<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ELK Stack &#8902; Clip-Clap</title>
	<atom:link href="https://clip-clap.ru/tag/elk-stack/feed/" rel="self" type="application/rss+xml" />
	<link>https://clip-clap.ru/tag/elk-stack/</link>
	<description></description>
	<lastBuildDate>Sun, 06 Sep 2020 18:58:05 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://clip-clap.ru/wp-content/uploads/2020/07/cropped-favicon-32x32.png</url>
	<title>ELK Stack &#8902; Clip-Clap</title>
	<link>https://clip-clap.ru/tag/elk-stack/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Мониторинг производительности бэкенда с помощью ELK Stack</title>
		<link>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d0%b1%d1%8d%d0%ba%d0%b5%d0%bd/</link>
					<comments>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d0%b1%d1%8d%d0%ba%d0%b5%d0%bd/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:58:02 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[ELK Stack]]></category>
		<category><![CDATA[администратор]]></category>
		<category><![CDATA[бэкенд]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1631</guid>

					<description><![CDATA[<p>Ранее я уже показывал несколько примеров, как можно использовать мониторинг логов, упрощая себе жизнь. Сегодня я расскажу, как с помощью</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d0%b1%d1%8d%d0%ba%d0%b5%d0%bd/">Мониторинг производительности бэкенда с помощью ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ранее я уже показывал несколько примеров, как можно использовать мониторинг логов, упрощая себе жизнь. Сегодня я расскажу, как с помощью ELK Stack анализировать работу бэкенда на примере web сервера nginx и php-fpm в качестве бэкенда. Я покажу, как логировать информацию о времени ответа бэкенда, передавать ее в elk stack и потом анализировать.</p>


</br>



<p>Схема работы будет следующая:</p>



<ol><li>Настраиваем в nginx логирование времени ответа бэкенда с помощью переменной&nbsp;<strong>$upstream_response_time</strong>&nbsp;из параметров логирования.</li><li>Передаем лог nginx в elk stack.</li><li>Создаем визуализации и дашборд для удобного анализа логов.</li></ol>



<p>Прежде чем двигаться дальше, вам необходимо ознакомиться со статьей по <a href="https://clip-clap.ru/it/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-elasticsearch-logstash-kibana-elk-stack-%d0%bd%d0%b0-u/" target="_blank" rel="noreferrer noopener">установке и настройке elk stack</a>. Руководствуясь статьей, вам следует настроить сам сервер elk stack и сбор логов nginx на этот сервер. Подобный пример как раз рассмотрен в статье. После этого можно приступать к дальнейшим действиям.</p>


</br>



<h2 class="wp-block-heading">Настройка nginx для мониторинга бэкенда</h2>



<p>На web сервере nginx нам нужно выполнить несколько подготовительных действий. Во-первых, добавляем дополнительный&nbsp;<strong>log_format</strong>, который будет собирать полезную информацию, помимо той, что используется в дефолтной настройке. Я предлагаю сразу максимально полный формат, который я называю full и обычно использую. Для этого в&nbsp;<em>/etc/nginx/nginx.conf</em>&nbsp;в раздел http добавляем новый формат лога.</p>



<pre class="wp-block-preformatted">    log_format full	'$remote_addr - $host [$time_local] "$request" '
               'request_length=$request_length '
               'status=$status bytes_sent=$bytes_sent '
               'body_bytes_sent=$body_bytes_sent '
               'referer=$http_referer '
               'user_agent="$http_user_agent" '
               'upstream_status=$upstream_status '
               'request_time=$request_time '
               'upstream_response_time=<strong>$upstream_response_time</strong> '
               'upstream_connect_time=$upstream_connect_time '
               'upstream_header_time=$upstream_header_time';
</pre>



<p>Здесь много дополнительной информации, которая может быть полезна для анализа. В данной статье я буду анализировать только время ответа бэкенда &#8212;&nbsp;<strong>upstream_response_time</strong>. Если вам интересны какие-то еще значения, можете их добавлять по аналогии.</p>



<p>Далее идем в виртуальный хост, за которым будем следить и правим его настройки. Я не буду приводить полный конфиг виртуального хоста. Покажу только те параметры, которые нас интересуют в рамках заданной темы.</p>



<p>Задаем формат лога виртуального хоста:</p>



<pre class="wp-block-preformatted">access_log /web/sites/serveradmin.ru/logs/access.log <strong>full</strong>;</pre>



<p>Далее я всю статику добавляю в отдельный location и отключаю для него лог. Доступ к этим файлам мне нет необходимости логировать:</p>



<pre class="wp-block-preformatted">    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff|woff2|swf|ttf|svg)$ {
    access_log off;
    expires 1y;
    add_header Cache-Control public;
    }</pre>



<p>В отдельный location добавляю php запросы, которые как раз и будут попадать в лог.</p>



<pre class="wp-block-preformatted">    location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;    
    ......
    }</pre>



<p>Перечитывайте конфигурацию nginx и проверяйте лог виртуального хоста. Там должно быть примерно следующее:</p>



<pre class="wp-block-preformatted">5.45.207.63 - serveradmin.ru [05/Jan/2019:17:18:35 +0300] "GET /ustanovka-synology-os-na-obyichnyiy-kompyuter-hp-proliant-n54l-microserver/synology/ HTTP/1.1" request_length=302 status=200 bytes_sent=21246 body_bytes_sent=20644 referer=- user_agent="Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" upstream_status=200 request_time=0.407 upstream_response_time=0.407 upstream_connect_time=0.000 upstream_header_time=0.401
207.46.13.33 - serveradmin.ru [05/Jan/2019:17:21:22 +0300] "GET /obnovlenie-chasovogo-poyasa-v-xenserver-6-5/ HTTP/1.1" request_length=281 status=200 bytes_sent=23846 body_bytes_sent=23244 referer=- user_agent="Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" upstream_status=200 request_time=0.397 upstream_response_time=0.396 upstream_connect_time=0.000 upstream_header_time=0.390
5.45.207.63 - serveradmin.ru [05/Jan/2019:17:22:14 +0300] "GET /forum/astersik/ustanovka-free-pbx-13-na-sentos-7/ HTTP/1.1" request_length=267 status=200 bytes_sent=35598 body_bytes_sent=34756 referer=- user_agent="Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" upstream_status=200 request_time=0.446 upstream_response_time=0.446 upstream_connect_time=0.000 upstream_header_time=0.435</pre>



<p>Если у вас примерно так же, можно двигаться дальше. Смысл в том, что в логе должен быть параметр&nbsp;upstream_response_time и какое-то временное значение в секундах. Обычно меньше секунды, но это зависит от быстродействия бэкенда, за которым мы как раз и будем следить.</p>


</br>



<h2 class="wp-block-heading">Grok фильтр logstash для парсинга лога</h2>



<p>Следующим шагом по настройке мониторинга ответа бэкенда является создание grok фильтра для logstash. Приведенный выше формат лога я парсю следующим grok фильтром. Привожу сразу весь конфиг logstash, который за него отвечает:</p>



<pre class="wp-block-preformatted">filter {
 if [type] == "nginx_access" {
    grok {
	match =&gt; { "message" =&gt; "%{IPORHOST:remote_ip} - %{DATA:virt_host} [%{HTTPDATE:access_time}] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" request_length=%{INT:request_length} status=%{INT:status} bytes_sent=%{INT:bytes_sent} body_bytes_sent=%{NUMBER:body_bytes_sent} referer=%{DATA:referer} user_agent=\"%{DATA:user_agent}\" upstream_status=%{DATA:upstream_status} request_time=%{NUMBER:request_time} upstream_response_time=%{DATA:upstream_response_time} upstream_connect_time=%{DATA:upstream_connect_time} upstream_header_time=%{DATA:upstream_header_time}" }
	overwrite =&gt; [ "message" ]
    }
    mutate {
        convert =&gt; ["bytes_sent", "integer"]
        convert =&gt; ["body_bytes_sent", "integer"]
        convert =&gt; ["request_length", "integer"]
        convert =&gt; ["request_time", "float"]
        convert =&gt; ["upstream_status", "integer"]
        convert =&gt; ["upstream_response_time", "float"]
        convert =&gt; ["upstream_connect_time", "float"]
        convert =&gt; ["upstream_header_time", "float"]
    }
    ruby {
       code =&gt; 'event.set("request_time_ms",event.get("request_time")*1000)'
    }
    date {
        match =&gt; [ "access_time" , "dd/MMM/YYYY:HH:mm:ss Z" ]
	remove_field =&gt; [ "access_time" ]
    }
    geoip {
	source =&gt; "remote_ip"
	target =&gt; "geoip"
	add_tag =&gt; [ "nginx-geoip" ]
    }
 }</pre>



<p>Привожу конфиг с рабочего сервера, который настраивал достаточно давно. Здесь выполняются следующие действия:</p>



<ol><li><strong>grok</strong> фильтр парсит строки лога</li><li><strong>mutate</strong> конвертирует некоторые числовые поля в нужный формат, чтобы потом было удобнее работать</li><li><strong>ruby</strong> фильтр добавляет новое поле request_time_ms просто умножая значение из существующего request_time на 1000. Это делается для более удобной визуализации значений. Целые числа более наглядны для визуализации</li><li>фильтр <strong>date</strong> берет время из поля access_time и использует его как время поступления лога в систему, заменяя @timestamp. Затем это поле удаляет, так как оно становится не нужно. Делается это для того, чтобы использовать только время из лога nginx, чтобы не было путаницы, когда порядок отправки логов по какой-то причине будет нарушен</li><li><strong>geoip</strong> фильтр используется для построения гео карты. Об этом я отдельно рассказывал в статье по <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/" target="_blank" rel="noreferrer noopener">настройке дашборда для nginx</a></li></ol>



<p>Перезапускайте logstash и идите в Kibana проверять поступление логов в указанном формате. Если все сделали правильно, то должно получиться примерно следующее:</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-05.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-05-756x1024.png" alt="Парсинг лога nginx с помощью grok фильтра" class="wp-image-7648"/></a></figure>


</br>



<h2 class="wp-block-heading">Дашборд с временем ответа бэкенда</h2>



<p>По сути вся настройка за мониторингом бэкенда сделана. Логи в нужном формате поступают в elasticsearch. Осталось только визуализировать их. Тут каждый может сделать так, как больше нравится ему. Я предложу свой вариант визуализации, но сразу скажу, что он меня не очень устраивает, но лучше не придумал сходу, а потом стало не очень актуально. Все, что надо, видно, а акцента на мониторинг работы web сервера я не делал.</p>



<p>Первая визуализация для upstream_response_time. Все запросы я разбил на несколько интервалов и вывел отдельно каждый интервал в столбец. Получилось примерно так:</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-01.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-01-1024x541.png" alt="Визуализация upstream_response_time" class="wp-image-7644"/></a></figure>



<p>Следующая визуализация показывает адреса запросов. Иногда эта картинка ломается, если какой-то запрос очень длинный и не помещается на экран. Не придумал, что с этим делать.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-02.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-02-1024x541.png" alt="Визуализация запросов к сайту" class="wp-image-7645"/></a></figure>



<p>В следующей визуализации построил график на основе&nbsp;request_time. Напомню, что этот параметр я как раз умножал на 1000, чтобы получились целые значения. С ними нагляднее. Получилось вот так.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-03.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-03-1024x541.png" alt="Визуализация request_time" class="wp-image-7646"/></a></figure>



<p>Обращаю внимание, что хвост я ограничил длиной в 2 секунды. Если этого не сделать, то отдельные очень длинные запросы растягивают график. Его становится неудобно анализировать. Вы подгоните этот параметр под свои условия работы. Возможно, вам нужен будет хвост длиннее, а может короче.</p>


</br>



<p>Отдельную визуализацию сделал для типов запросов.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-04.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-04-1024x541.png" alt="Визуализация типов запросов" class="wp-image-7647"/></a></figure>



<p>Вот и все. Под графиками идет список самих логов. Весь дашборд получился таким:</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-06.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2019/01/elk-stack-backend-response-time-06-851x1024.png" alt="Dashboard в Kibana для логов бэкенда" class="wp-image-7649"/></a></figure>



<p>Смотреть не очень удобно, потому что пишу статью на ноутбуке с низким разрешением. Смотреть лучше на большом мониторе.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Подобного дашборда вполне достаточно, чтобы беглым взглядом оценить производительность сервера и проверить медленные запросы. В связке с общим <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/" target="_blank" rel="noreferrer noopener">дашбордом nginx</a> анализ производительности web сервера выполнять очень удобно. Приведу пример того, как обычно действую я.</p>



<p>Я получаю уведомления от zabbix о том, что превышен средний трафик за интервал времени или высокая нагрузка на процессор. Открываю основной дашборд и сразу же анализирую, не спамит ли какой-то конкретный ip запросами. Далее смотрю по каким урлам идут запросы, есть ли ошибки web сервера.</p>



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



<p>Заходить на сам web сервер по ssh и смотреть вручную логи нет необходимости. Это существенно экономит время. Не хватает только оповещений из elk stack по превышению каких-то пороговых значений, например количество пятисотых ошибок сервера.</p>



<p>Если грамотно настроить мониторинг логов с помощью elk stack, посадить за систему можно обычного оператора, не системного администратора. Весь первичный анализ он сможет сделать сам и составить подробный тикет для техподдержки с описанием проблемы. Либо можно отдать систему программисту, который будет очень рад возможности смотреть логи не бегая на сервер по ssh.</p>



<p>Получилась система из разряда must have для более ли менее серьезного web сервера. Я сейчас уже не представляю, как без нее администрировать веб сервер. По каждому инциденту надо лезть по ssh и смотреть, что случилось. Обычного мониторинга zabbix не достаточно. В elk stack можно настроить все, что угодно, вывести любые данные, которые актуальны для твоего проекта.</p>


</br>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d0%b1%d1%8d%d0%ba%d0%b5%d0%bd/">Мониторинг производительности бэкенда с помощью ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d0%bc%d0%be%d0%bd%d0%b8%d1%82%d0%be%d1%80%d0%b8%d0%bd%d0%b3-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d0%b1%d1%8d%d0%ba%d0%b5%d0%bd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настраиваем сбор логов Windows Server в ELK Stack</title>
		<link>https://clip-clap.ru/it/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%b0%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-windows-server-%d0%b2-elk-stack/</link>
					<comments>https://clip-clap.ru/it/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%b0%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-windows-server-%d0%b2-elk-stack/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:47:25 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[ELK Stack]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1629</guid>

					<description><![CDATA[<p>Продолжаю цикл статей по настройке централизованной системы сбора логов ELK Stack. Сегодня расскажу, как собирать логи с Windows Server различных</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%b0%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-windows-server-%d0%b2-elk-stack/">Настраиваем сбор логов Windows Server в ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Продолжаю цикл статей по настройке централизованной системы сбора логов ELK Stack. Сегодня расскажу, как собирать логи с Windows Server различных версий в elasticsearch. Данные предложенным способом можно будет собирать не только с серверных систем, но и со всех остальных, где используется журнал windows.</p>


</br>



<p>В своей статье я буду считать, что вы <a href="https://clip-clap.ru/it/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-elasticsearch-logstash-kibana-elk-stack-%d0%bd%d0%b0-u/" target="_blank" rel="noreferrer noopener">установили и настроили elk stack</a> по моему материалу. Если это не так, то сами подредактируйте представленные конфиги под свои реалии. По большому счету, все самое основное по сбору логов windows серверов уже дано в указанной статье. Как минимум, там рассказано, как начать собирать логи с помощью <strong>winlogbeat</strong>. Дальше нам нужно их обработать и нарисовать функциональный дашборд для быстрого анализа поступающей информации.</p>



<p>Для того, чтобы оценить представленные мной графики и дашборды, рекомендую собирать логи сразу с нескольких серверов. Так можно будет оценить представленную информацию на практике. С одним сервером не так наглядно получится.</p>



<p>С визуализацией данных из windows журналов проблем нет никаких. Winlogbeat из коробки умеет парсить логи и добавлять все необходимые метаданные. Со стороны logstash не нужны никакие фильтры. Принимаем все данные как есть с winlogbeat.</p>


</br>



<h2 class="wp-block-heading">Сбор windows логов</h2>



<p>Приступим к настройке. <a href="https://clip-clap.ru/it/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-elasticsearch-logstash-kibana-elk-stack-%d0%bd%d0%b0-u/" target="_blank" rel="noreferrer noopener">Устанавливаем</a> последнюю версию winlogbeat на сервер, с которого мы будем отправлять логи в elk stack. Вот конфиг с тестового сервера, по которому пишу статью:</p>



<pre class="wp-block-preformatted">winlogbeat.event_logs:
  - name: Application
    ignore_older: 72h
  - name: Security
  - name: System

tags: ["winsrv"]

output.logstash:
  hosts: ["10.1.4.114:5044"]

logging.level: info
logging.to_files: true
logging.files:
  path: C:/Program Files/Winlogbeat/logs
  name: winlogbeat
  keepfiles: 7</pre>



<p>Теперь настраивает logstash на прием этих логов. Добавляем в конфиг:</p>



<pre class="wp-block-preformatted">    else if "winsrv" in [tags] {
        elasticsearch {
            hosts     =&gt; "localhost:9200"
            index    =&gt; "winsrv-%{+YYYY.MM}"
        }
    }</pre>



<p>Я формирую месячные индексы с логами windows серверов. Если у вас очень много логов или хотите более гибкое управление занимаемым объемом, то делайте индексы дневные, указав&nbsp;winsrv-%{+YYYY.MM<strong>.dd</strong>}.</p>



<p>Перезапускайте службы на серверах и ждите поступления данных в elasticsearch.</p>


</br>



<h2 class="wp-block-heading">Dashboard в Kibana для Windows Server</h2>



<p>После того, как данные из логов windows серверов начали поступать в elk stack, можно приступить к их визуализации. Я предлагаю такую информацию для Dashboard в kibana:</p>



<ul><li>Количество логов с разбивкой по серверам</li><li>Количество записей в каждом журнале</li><li>Разбивка по уровням критичности (поле&nbsp;level)</li><li>Разбивка по ID событий в логах (поле event_id)</li><li>Список имен компьютеров, фигурирующих в логах (поле&nbsp;event_data.Workstation)</li><li>Список пользователей в логах (поле&nbsp;event_data.TargetUserName)</li><li>Разбивка по IP адресам&nbsp;(поле&nbsp;event_data.IpAddress)</li></ul>



<p>Визуализации создаются достаточно просто, плюс они все похожи друг на друга. Вот пример одной из них &#8212; разбивка по рабочим станциям:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/12/elk-stack-windows-server-01.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/12/elk-stack-windows-server-01.png" alt="Визуализация в kibana для Windows Server" class="wp-image-7539"/></a></figure></div>



<p>А вот какой Dashbord у меня получился в итоге:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/12/elk-stack-windows-server-02.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/12/elk-stack-windows-server-02.png" alt="Dasboard в kibana для Windows Server" class="wp-image-7540"/></a></figure></div>



<p>В самом низу идет список логов с сырым текстом события. Отдельно представляю дашборд для файлового сервера windows.</p>


</br>



<h2 class="wp-block-heading">Сбор и анализ логов Windows Fileserver</h2>



<p>Для файлового сервера настраиваем сбор логов в ELK Stack точно так же, как я показал выше. Для визуализации данных я настроил отдельный дашборд в Kibana со следующей информацией:</p>



<ul><li>Имена пользователей, которые обращаются к файлам (поле&nbsp;event_data.SubjectUserName)</li><li>Типы запросов, которые выполняются (поле file_action)</li><li>Список доступа к файлам (формируется из сохраненного фильтра поиска)</li></ul>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/12/elk-stack-windows-server-03.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/12/elk-stack-windows-server-03.png" alt="Dashboard в kibana для Windows FileServer" class="wp-image-7541"/></a></figure></div>



<p>Возможно, кому-то будет актуально выводить на дашборд еще и информацию об именах файлов, к которым идет доступ. Информация об этом хранится в поле&nbsp;event_data.ObjectName. Лично я не увидел в этом необходимости.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Материал написан исключительно на основании своего видения и небольшого опыта использования elk stack. Нигде не видел статей и мыслей на данную тему, так что буду рад предложениям, замечаниям. Ко всему прочему, я практически не администрирую windows сервера.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%b0%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-windows-server-%d0%b2-elk-stack/">Настраиваем сбор логов Windows Server в ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%b0%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-windows-server-%d0%b2-elk-stack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Централизованный сбор логов Mikrotik в ELK Stack</title>
		<link>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%b9-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-mikrotik-%d0%b2-elk-stack/</link>
					<comments>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%b9-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-mikrotik-%d0%b2-elk-stack/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:44:16 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[ELK Stack]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[администратор]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1627</guid>

					<description><![CDATA[<p>Очередной материал на тему централизованной системы сбора логов. Сегодня расскажу, как настроить сбор логов с устройств компании Mikrotik в ELK</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%b9-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-mikrotik-%d0%b2-elk-stack/">Централизованный сбор логов Mikrotik в ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Очередной материал на тему централизованной системы сбора логов. Сегодня расскажу, как настроить сбор логов с устройств компании Mikrotik в ELK Stack. Статья ничем не примечательна, так как делается все стандартно и просто. Никакого парсинга и разбора логов я делать не буду. То есть будем просто хранить логи микротиков в одном месте с удобным поиском.</p>


</br>



<p>Ранее я рассказал, как <a href="https://clip-clap.ru/it/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-elasticsearch-logstash-kibana-elk-stack-%d0%bd%d0%b0-u/" target="_blank" rel="noreferrer noopener">установить и настроить elk stack</a>, потом как загружать и анализировать логи <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/" target="_blank" rel="noreferrer noopener">nginx</a> и <a href="https://clip-clap.ru/it/%d1%81%d0%b1%d0%be%d1%80-%d0%b8-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-samba-%d0%b2-elk-stack/" target="_blank" rel="noreferrer noopener">samba</a>. Теперь пришел черед логов Mikrotik. Я уже рассказывал, как <a href="https://clip-clap.ru/it/mikrotik/mikrotik-%d0%bb%d0%be%d0%b3%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-rsyslog/" target="_blank" rel="noreferrer noopener">отправлять логи микротика на удаленный syslog сервер</a>, в качестве которого может выступать в том числе <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-syslog-ng-%d0%b4%d0%bb%d1%8f-%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d0%be%d0%b3%d0%be-%d1%81%d0%b1/" target="_blank" rel="noreferrer noopener">syslog-ng</a>. В данном случае на самом микротике ничего особенного делать не надо. Будем точно так же отправлять данные на удаленный syslog сервер, в качестве которого будет трудиться <strong>logstash</strong>.</p>



<p>Я некоторое время рассуждал на тему парсинга и разбора логов. Но посмотрев на типичную картину стандартных логов mikrotik, понял, что ничего не выйдет. События очень разные и разобрать их одним правилом grok не получится. Если нужен парсинг и добавление метаданных к событиям, необходимо определенные события выделять и направлять отдельным потоком в logstash, где уже обрабатывать своим фильтром. Например, отдельный фильтр можно настроить на парсинг подключений к vpn или подключение по winbox с анализом имен пользователей.</p>



<p>Я же буду просто собирать все логи скопом и складывать в единый индекс. У записей не будет метаданных, по которым можно строить дашборды и анализировать данные. Но тем не менее, это все равно удобно, так как все логи в одном месте с удобным и быстрым поиском.</p>


</br>



<h2 class="wp-block-heading">Настройка logstash на прием логов микротик</h2>



<p>В конфиге&nbsp;<em>/etc/logstash/conf.d/input.conf</em>&nbsp;добавляем секцию для приема syslog логов. Вместе с логами от beats конфиг будет выглядеть вот так:</p>



<pre class="wp-block-preformatted">input {
    beats {
	port =&gt; 5044
    }
    <strong>syslog {
	port =&gt; 5045
	type =&gt; syslog</strong>
    }
}</pre>



<p>В конфиге с фильтрами&nbsp;<em>filter.conf</em>&nbsp;я разделил с помощью тэгов логи обычных роутеров, свитчей и wifi точек доступа по ip адресам. Получилось примерно так:</p>



<pre class="wp-block-preformatted">    else if [host] == "10.1.4.19" or [host] == "10.1.5.1" {
        mutate {
            add_tag =&gt; [ "mikrotik", "gateway" ]
        }
    }
    else if [host] == "10.1.4.66" or [host] == "10.1.3.110" or [host] == "10.1.3.111" {
        mutate {
            add_tag =&gt; [ "mikrotik", "wifi" ]
        }
    }
    else if [host] == "10.1.4.14" or [host] == "10.1.5.33" {
        mutate {
            add_tag =&gt; [ "mikrotik", "switch" ]
	}
    }</pre>



<p>Это простой случай, когда устройств мало. Если у вас много устройств, то лучше наверно придумать что-то другое, чтобы не нагружать logstash лишними правилами. Да и в ручную править конфиг неудобно. Как лучше поступать в таком случае &#8212; не знаю, не продумывал тему. Наверно имеет смысл разделить потоки по разным портам и на этом основании принимать решение о дальнейшей обработке.</p>



<p>Отправляем полученные логи в elasticsearch, настроив конфиг&nbsp;<em>output.conf</em>:</p>



<pre class="wp-block-preformatted">    else if "mikrotik" in [tags] {
        elasticsearch {
            hosts     =&gt; "localhost:9200"
            index    =&gt; "mikrotik-%{+YYYY.MM}"
        }
    }</pre>



<p>Я просто складываю все логи с тэгом mikrotik в один индекс с разбивкой по месяцам. На типы gateway, switch и wifi не разделяю, хотя можно это сделать. Тэги я добавил просто для удобства просмотра логов. С помощью тэгов можно будет быстро группировать логи по типу устройств.</p>



<p>Перезапускаем logstash и идем настраивать микротики на отправку логов на удаленный сервер.</p>


</br>



<h2 class="wp-block-heading">Отправка логов mikrotik на удаленный сервер</h2>



<p>Подключаемся к Mikrotik по winbox и идем в раздел&nbsp;<strong>System -&gt; Logging</strong>. Изначально там вот так, если вы ничего не меняли.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-01.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-01.png" alt="Настройки логирования в Микротике" class="wp-image-7372"/></a></figure></div>



<p>Идем на вкладку Actions, выбираем remote и указываем параметры:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-02.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-02.png" alt="Отправка логов Mikrotik на удаленный сервер" class="wp-image-7373"/></a></figure></div>



<p>В данном случае:</p>



<ul><li>10.1.4.114 &#8212; сервер elk, точнее с logstash;</li><li>5045 &#8212; порт, по которому logstash принимает syslog подключения.</li></ul>



<p>После этого идем на вкладку Rules и дублируем стандартные правила, указывая action remote или добавляем новые правила для отправки логов. Должно получиться примерно вот так:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-03.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-03.png" alt="Централизованный сбор логов Mikrotik" class="wp-image-7374"/></a></figure></div>



<p>Все, микротик настроен на отправку логов на удаленный сервер. Больше на нем ничего делать не надо. Идем в web интерфейс Kibana.</p>


</br>



<h2 class="wp-block-heading">Добавление индекса mikrotik в kibana</h2>



<p>Если в предыдущих разделах вы все сделали правильно, в elasticsearch должны начать поступать данные от микротиков в индекс mikrotik-*. Идем в Kibana в раздел&nbsp;<strong>Management -&gt; Index Patterns</strong>&nbsp;и добавляем новый индекс.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-04.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-04.png" alt="Индекс в elasticsearch для логов микротика" class="wp-image-7375"/></a></figure></div>



<p>После этого можно в разделе&nbsp;<strong>Discover</strong>&nbsp;просматривать логи. При этом работает группировка по тэгам, которые характеризуют тип устройства.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-05.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/11/mikrotik-logs-to-elk-stack-05.png" alt="Хранение логов mikrotik в elk stack" class="wp-image-7376"/></a></figure></div>



<p>На этом по настройке хранения логов mikrotik в elk stack все. Надеюсь, было полезно.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Получилась простая статья по сбору логов. Для тех, кто уже работал с ELK Stack тут ничего нового нет. По сути, никакого анализа и графиков нет, а именно это чаще всего интересует при использовании elk. Я просто не придумал, что может быть полезного в логах микротика, что требует какого-то детального разбора и построения дашбордов. Если у кого-то есть идеи или примеры grok фильтров, прошу поделиться.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%b9-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-mikrotik-%d0%b2-elk-stack/">Централизованный сбор логов Mikrotik в ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d0%b0%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/%d1%86%d0%b5%d0%bd%d1%82%d1%80%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%b9-%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-mikrotik-%d0%b2-elk-stack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Сбор и анализ логов samba в ELK Stack</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%b1%d0%be%d1%80-%d0%b8-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-samba-%d0%b2-elk-stack/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%b1%d0%be%d1%80-%d0%b8-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-samba-%d0%b2-elk-stack/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:39:14 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[ELK Stack]]></category>
		<category><![CDATA[администратор]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1625</guid>

					<description><![CDATA[<p>Продолжаю тему настройки и использования централизованной системы сбора логов на основе elasticsearch. Сегодня расскажу, как настроить сбор и анализ логов</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%b1%d0%be%d1%80-%d0%b8-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-samba-%d0%b2-elk-stack/">Сбор и анализ логов samba в ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Продолжаю тему настройки и использования централизованной системы сбора логов на основе elasticsearch. Сегодня расскажу, как настроить сбор и анализ логов аудита samba в ELK Stack. Я буду не только собирать логи, но и обрабатывать их и добавлять метаданные для построения графиков и дашбордов.</p>


</br>



<p>Для установки и настройки файлового сервера samba можно воспользоваться одной из моих статей:</p>



<ul><li><a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/windows/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-samba-%d1%81-%d0%b8%d0%bd%d1%82%d0%b5%d0%b3/" target="_blank" rel="noreferrer noopener">Настройка файлового сервера Samba с интеграцией в Active Directory</a></li><li><a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%b8-%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-samba/" target="_blank" rel="noreferrer noopener">Быстрая и простая настройка samba</a></li></ul>



<p>Дальнейшее описание подойдет для обоих случаев. И для интеграции с AD, и для одиночного сервера с авторизацией по IP или имени пользователя.</p>



<p>Для того, чтобы samba записывала в лог все операции с файлами, необходимо настроить логирование. Как это сделать я рассказал уже давно в отдельной статье &#8212; <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%bb%d0%be%d0%b3%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%bf%d0%b5%d1%80%d0%b0%d1%86%d0%b8%d0%b9-%d1%81-%d1%84%d0%b0%d0%b9%d0%bb%d0%b0%d0%bc%d0%b8-%d0%b2-samba/" target="_blank" rel="noreferrer noopener">настройка логов доступа в samba</a>. Дальше в статье я буду считать, что у вас настроено примерно так же. Формат логов очень важен, так как ниже я предложу свой вариант grok фильтра для парсинга.</p>



<h2 class="wp-block-heading">Сбор логов samba</h2>



<p>Для сбора логов с samba сервера необходимо на него установить filebeat. Как это сделать рассказано в моей статье по <a href="https://clip-clap.ru/it/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-elasticsearch-logstash-kibana-elk-stack-%d0%bd%d0%b0-u/" target="_blank" rel="noreferrer noopener">установке и настройке elk stack</a>. Создаем простой конфиг для filebeat &#8212; <em>/etc/filebeat/filebeat.yml</em>.</p>



<pre class="wp-block-preformatted">filebeat.inputs:
- type: log
  enabled: true
  paths:
      - /var/log/samba/audit.log
  fields:
    type: smb-audit
  fields_under_root: true
  scan_frequency: 5s

output.logstash:
  hosts: ["10.1.4.114:5044"]</pre>



<p>Минимум опций. Просто отправляем все записи лога самбы&nbsp;<strong>audit.log</strong>&nbsp;в logstash по адресу&nbsp;10.1.4.114 и устанавливаем тип &#8212;&nbsp;<strong>smb-audit</strong>. Это сделано для удобства в дальнейшей обработке и вычленении логов самбы из общего потока данных. Идентичные настройки будут на всех серверах samba.</p>


</br>



<h2 class="wp-block-heading">Парсинг логов samba в logstash</h2>



<p>Нам нужно принять логи с samba в logstash, обработать их и передать в elasticsearch. Для приема логов в конфиге logstash&nbsp;<em>/etc/logstash/conf.d/input.conf</em>&nbsp;(напомню, что у меня для удобства конфиг разделен на 3 части&nbsp;input.conf,&nbsp;filter.conf,&nbsp;output.conf) у меня уже есть строки:</p>



<pre class="wp-block-preformatted">input {
    beats {
	port =&gt; 5044
    }
}</pre>



<p>Так что ничего добавлять не надо. Дальше нам нужно настроить фильтрацию логов. Для этого в&nbsp;<em>filter.conf</em>&nbsp;добавляю строки:</p>



<pre class="wp-block-preformatted">	else if [type] == "smb-audit" {
	mutate {
	    gsub =&gt; ["message","[\\|]",":"]
	    gsub =&gt; ["message","  "," "]
	    }
        grok {
            match =&gt; [ "message" , "%{MONTH:syslog_month} %{MONTHDAY:syslog_day} %{TIME:syslog_time} %{HOSTNAME:srv_name} smbd_audit: XS:%{GREEDYDATA:user_name}:%{IP:user_ip}:%{WORD:share_name}:%{WORD:action}:%{DATA:sucess}:%{GREEDYDATA:path}"]
	    overwrite =&gt; [ "message" ]
            }
    }</pre>



<p>В данном случае выше в конфиге у меня уже есть другие правила. Если же данное правило у вас будет единственным, то else не нужно указывать. Расскажу, что делают данные правила. Плагин&nbsp;<strong>mutate</strong>&nbsp;и операция&nbsp;<strong>gsub</strong>&nbsp;в первой строке заменяет в логе самбы все обратные слеши \ и | на : Это сделано для того, чтобы потом было проще использовать фильтр&nbsp;<strong>grok</strong>. Вторая операция gsub заменяет двойной пробел на единичный. Это сделано для того, чтобы убрать двойной пробел в логах самбы, когда в числе месяца используется одна цифра. Вот пример:</p>



<pre class="wp-block-preformatted">Nov  6 18:00:41 xmdoc smbd_audit: XS\kobelev|10.1.4.49|documents|open|ok|r|Конструкторы/_Проекты/15667/проработка.dwg</pre>


</br>



<pre class="wp-block-preformatted">Nov 13 12:04:47 xmdoc smbd_audit: XS\ignatev|10.1.4.81|documents|open|ok|r|Конструкторы/_Проекты/02649.обрамление.dwg</pre>



<p>В первом случае после Nov стоят 2 пробела. Это усложняет настройку парсинга. Поэтому лишние пробелы и символы убираем. После работы фильтра mutate мы получим вот такую строку:</p>



<pre class="wp-block-preformatted">Nov 6 18:00:41 xmdoc smbd_audit: XS:kobelev:10.1.4.49:documents:open:ok:r:Конструкторы/_Проекты/15667/проработка.dwg</pre>



<p>Дальше вступает в дело фильтр&nbsp;<strong>grok</strong>&nbsp;и его правило обработки:</p>



<pre class="wp-block-preformatted">%{MONTH:syslog_month} %{MONTHDAY:syslog_day} %{TIME:syslog_time} %{HOSTNAME:srv_name} smbd_audit: XS:%{GREEDYDATA:user_name}:%{IP:user_ip}:%{WORD:share_name}:%{WORD:action}:%{DATA:sucess}:%{GREEDYDATA:path}</pre>



<p>Оно не идеальное, но мои запросы удовлетворяет. Проверить работу фильтра можно в&nbsp;<a href="https://grokdebug.herokuapp.com/" target="_blank" rel="noreferrer noopener">grok debugger.</a>&nbsp;На выходе будет вот такой&nbsp;<strong>json</strong>:</p>



<pre class="wp-block-preformatted">{
  "user_ip": "10.1.4.49",
  "share_name": "documents",
  "syslog_time": "18:00:41",
  "srv_name": "xmdoc",
  "user_name": "kobelev",
  "syslog_month": "Nov",
  "path": "r:Конструкторы/_Проекты/15667/проработка.dwg",
  "syslog_day": "6",
  "sucess": "ok",
  "action": "open"
}</pre>


</br>



<p>В моем случае не парсится значение домена XS из лога, так как все делается в рамках одного домена, и я просто опустил это действие. Вам нужно подработать правило под свои реалии. Если у вас много доменов, добавьте отдельное поле для имени домена. Если это не нужно, просто поменяйте на свой домен. Из названия полей думаю и так понятно, что я сделал. Я выделил ключевые для меня значения, которые дальше буду использовать в графиках и дашбордах. Я не смог отдельно выделить путь файла без лишних символов в начале. Не помню точно, с чем конкретно это связано, но в целом, проблема в том, что лог сильно изменяется в зависимости от проводимой операции. Единым фильтром было трудно все охватить, пришлось бы разделять разные события на разные потоки и анализировать отдельно. Я посчитал, что это не имеет смысла.</p>



<p>Если у вас samba не в домене, то лог будет немного другой. Вот пример строки лога и моего grok фильтра для обработки. Исходный лог:</p>



<pre class="wp-block-preformatted">Nov 13 11:40:54 xb-share smbd_audit: 10.1.5.20|scans|realpath|ok|Отсканированные счета/2018/счет.pdf</pre>



<p>После работы фильтра mutate:</p>



<pre class="wp-block-preformatted">Nov 13 11:40:54 xb-share smbd_audit: 10.1.5.20:scans:realpath:ok:Отсканированные счета/2018/счет.pdf</pre>



<p>Дальше вступает в дело grok фильтр</p>



<pre class="wp-block-preformatted">%{MONTH:syslog_month} %{MONTHDAY:syslog_day} %{TIME:syslog_time} %{HOSTNAME:srv_name} smbd_audit: %{IP:user_ip}:%{WORD:share_name}:%{WORD:action}:%{DATA:sucess}:%{GREEDYDATA:path}</pre>


</br>



<p>И на выходе получаем обработанные данные:</p>



<pre class="wp-block-preformatted">{
  "user_ip": "10.1.5.20",
  "share_name": "scans",
  "syslog_time": "11:40:54",
  "srv_name": "xb-share",
  "syslog_month": "Nov",
  "path": "Отсканированные счета/2018/счет.pdf",
  "syslog_day": "13",
  "sucess": "ok",
  "action": "realpath"
}</pre>



<p>Теперь эти данные надо передать в elasticsearch. Добавляем в конфиг&nbsp;<em>output.conf</em>&nbsp;строки:</p>



<pre class="wp-block-preformatted">    else if [type] == "smb-audit" {
        elasticsearch {
            hosts     =&gt; "localhost:9200"
            index    =&gt; "smb-audit-%{+YYYY.MM}"
        }
    }</pre>



<p>Обращаю внимание, что данными настройками я формирую месячные индексы, а не дневные. Если у вас большой объем данных за день и вы не планируете хранить данные за несколько месяцев, то разбивайте индексы на дни.</p>


</br>



<p>Если других правил у вас нет, то else уберите. После этого нужно перезапустить logstash и проверять через kibana поступление обработанных логов.</p>



<h2 class="wp-block-heading">Дашборд в ELC Stack для логов samba</h2>



<p>Я немного поразмышлял и собрал вот такой dashboard для логов samba.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/11/smba-logs-to-elc-stack.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/11/smba-logs-to-elc-stack.png" alt="Хранение логов samba в elasticsearch" class="wp-image-7287"/></a></figure></div>



<p>На этом дашборде расположены следующие визуализации:</p>



<ol><li>Количество запросов с конкретного IP.</li><li>Количество запросов по доменному имени пользователя.</li><li>Распределение запросов между тремя файловыми серверами.</li><li>Распределение по типам операций.</li><li>Список исходных логов.</li></ol>



<p>При выборе конкретного сервера, мы получаем дашборд с информацией только по нему. То же самое по пользователям, ip, операциям и т.д. Стало ОЧЕНЬ удобно анализировать работу серверов. К примеру, если у вас в сети появится шифровальщик, вы сразу же это увидите на дашборде и узнаете ip источника проблемы. Про банальное &#8212; узнать, кто у удалил или изменил файл я и не говорю.</p>



<p>Большие выбросы на графиках дают пользователи, которые используют поиск по сетевым дискам. У них будет огромное количество операций чтения. Но тут уже ничего не поделать. Визуализация не идеальная, но тем не менее, очень упрощает жизнь.</p>


</br>



<h2 class="wp-block-heading">Заключение</h2>



<p>Вот таким относительно простым и эффективным способом можно облегчить управление файловыми серверами, особенно когда их много. Я раньше и представить не мог, что можно так удобно собрать всю информацию с логов и вывести в наглядном виде. А потом еще и фильтровать все это по нужным параметрам практически на лету.</p>



<p>В следующей статье расскажу, как сделать то же самое, только для файловых серверов на windows. Там примерно такой же dashboard будет, но сбор и анализ логов другие.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%b1%d0%be%d1%80-%d0%b8-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-samba-%d0%b2-elk-stack/">Сбор и анализ логов samba в ELK Stack</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%b1%d0%be%d1%80-%d0%b8-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-samba-%d0%b2-elk-stack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Очистка elasticsearch с помощью curator</title>
		<link>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%be%d1%87%d0%b8%d1%81%d1%82%d0%ba%d0%b0-elasticsearch-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-curator/</link>
					<comments>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%be%d1%87%d0%b8%d1%81%d1%82%d0%ba%d0%b0-elasticsearch-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-curator/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:28:11 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[ELK Stack]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1619</guid>

					<description><![CDATA[<p>Моя статья по установке и настройке системы сбора логов на основе ELK Stack получилась не полной без одного важного раздела. Сегодня расскажу,</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%be%d1%87%d0%b8%d1%81%d1%82%d0%ba%d0%b0-elasticsearch-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-curator/">Очистка elasticsearch с помощью curator</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Моя статья по <a href="https://clip-clap.ru/it/%d0%ba%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d1%8c-elasticsearch-logstash-kibana-elk-stack-%d0%bd%d0%b0-u/" target="_blank" rel="noreferrer noopener">установке и настройке системы сбора логов на основе ELK Stack</a> получилась не полной без одного важного раздела. Сегодня расскажу, как настроить автоматическую очистку индексов elasticsearch с помощью curator. С этим столкнется каждый, кто будет эксплуатировать систему, так как она очень требовательна к ресурсам. Очистка старых индексов увеличивает быстродействие.</p>



<p>Статья будет короткая, так как процесс очистки индексов в elasticsearch с помощью curator в базовом варианте очень прост.</p>


</br>



<h2 class="wp-block-heading">Установка curator</h2>



<p>Для начала установим curator. Сделать это можно разными способами. Самый простой &#8212; из репозитория&nbsp;<strong>packages.elastic.co</strong>&nbsp;от авторов продукта. Подключим его в CentOS 7.</p>



<pre class="wp-block-preformatted">#&nbsp;rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
# mcedit /etc/yum.repos.d/curator.repo</pre>



<pre class="wp-block-preformatted">[curator-5]
name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/7
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1</pre>



<p>Подключаем репозиторий в Debian 8/Ubuntu</p>



<pre class="wp-block-preformatted"># wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# mcedit /etc/apt/sources.list.d/curator.list</pre>


</br>



<pre class="wp-block-preformatted">deb [arch=amd64] https://packages.elastic.co/curator/5/debian stable main</pre>



<p>Отдельный репозиторий для Debian 9</p>



<pre class="wp-block-preformatted"># deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main</pre>



<p>Устанавливаем curtator:</p>



<pre class="wp-block-preformatted"># yum install elasticsearch-curator
# apt update &amp;&amp; apt install elasticsearch-curator</pre>


</br>



<p>Так же curator можно установить через pip. Для Debian/Ubuntu достаточно просто выполнить:</p>



<pre class="wp-block-preformatted">#&nbsp;apt install python-pip</pre>



<p>Установка curator через pip:</p>



<pre class="wp-block-preformatted"># pip install elasticsearch-curator</pre>



<h2 class="wp-block-heading">Настройка curator для очистки elasticsearch</h2>



<p>Сделаем для примера простое задание на закрытие и удаление индексов с шаблоном nginx-* старше 14-ти дней. Для этого создадим директорию для конфигов curator и сами конфиги.</p>



<pre class="wp-block-preformatted"># mkdir /etc/curator
# touch /etc/curator/action.yml
# touch /etc/curator/config.yml</pre>



<p>Заполняем файлы следующим содержимым. Сначала общий конфиг.</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/curator/config.yml</pre>


</br>



<pre class="wp-block-preformatted">client:
  hosts:
    - 127.0.0.1
  port: 9200
  url_prefix:
  use_ssl: False
  certificate:
  client_cert:
  client_key:
  ssl_no_validate: False
  http_auth:
  timeout: 30
  master_only: False

logging:
  loglevel: INFO
  logfile:
  logformat: default
  blacklist: ['elasticsearch', 'urllib3']</pre>



<p>Дальше файл с необходимыми действиями:</p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/curator/action.yml</pre>



<pre class="wp-block-preformatted">actions:
  1:
    action: close
    description: &gt;-
      Close indices older than 14 days (based on index name).
    options:
      ignore_empty_list: True
      delete_aliases: False
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: nginx-
    - filtertype: age
      source: name
      direction: older
      timestring: '%Y.%m.%d'
      unit: days
      unit_count: 14

  2:
    action: delete_indices
    description: &gt;-
      Delete indices older than 14 days (based on index name).
    options:
      ignore_empty_list: True
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: nginx-
    - filtertype: age
      source: name
      direction: older
      timestring: '%Y.%m.%d'
      unit: days
      unit_count: 14
</pre>



<p>Обращаю внимание на форматирование файла. Отступы в начале строки важны. Они должны быть именно такие, как у меня в примере.</p>


</br>



<p>Конфиг сделан на основе примеров из&nbsp;<a href="https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html" target="_blank" rel="noreferrer noopener">официальной документации</a>. Рекомендую все подробности искать там. Запускаем очистку:</p>



<pre class="wp-block-preformatted"># /usr/bin/curator --config /etc/curator/config.yml /etc/curator/action.yml</pre>



<p>В консоли увидите информативный вывод выполняемых команд по очистке индексов. После завершения очистки, не забудьте добавить задание в cron.</p>



<pre class="wp-block-preformatted"># crontab -e</pre>



<pre class="wp-block-preformatted">4 4 * * * /usr/bin/curator --config /etc/curator/config.yml /etc/curator/action.yml</pre>



<p>Очистка индексов будет выполняться каждый день в 4 утра.</p>


</br>
<p>Сообщение <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%be%d1%87%d0%b8%d1%81%d1%82%d0%ba%d0%b0-elasticsearch-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-curator/">Очистка elasticsearch с помощью curator</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/%d0%be%d1%87%d0%b8%d1%81%d1%82%d0%ba%d0%b0-elasticsearch-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-curator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Кэширование страницы с использованием Disk: Enhanced 
Минифицировано с помощью Disk
Кэширование БД с использованием Disk (Request-wide (широкий запрос) modification query)

Served from: clip-clap.ru @ 2026-07-03 02:10:04 by W3 Total Cache
-->