<?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>логирование &#8902; Clip-Clap</title>
	<atom:link href="https://clip-clap.ru/tag/%d0%bb%d0%be%d0%b3%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed/" rel="self" type="application/rss+xml" />
	<link>https://clip-clap.ru/tag/логирование/</link>
	<description></description>
	<lastBuildDate>Sun, 15 Nov 2020 22:45:28 +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>логирование &#8902; Clip-Clap</title>
	<link>https://clip-clap.ru/tag/логирование/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Добавление произвольного поля в Elastic на примере session_id в Bitrix</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%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%8f-%d0%b2-elastic-%d0%bd%d0%b0-%d0%bf/</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%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%8f-%d0%b2-elastic-%d0%bd%d0%b0-%d0%bf/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 19:11:27 +0000</pubDate>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[администратор]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1635</guid>

					<description><![CDATA[<p>Некоторое время назад я показал, как очень быстро можно организовать&#160;сбор логов с web сервера в Elastic Cloud. Сегодня расскажу, как</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%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%8f-%d0%b2-elastic-%d0%bd%d0%b0-%d0%bf/">Добавление произвольного поля в Elastic на примере session_id в Bitrix</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Некоторое время назад я показал, как очень быстро можно организовать&nbsp;<a href="https://clip-clap.ru/it/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-elastic-stack-%d0%b2-elastic-cloud-%d0%b4%d0%bb%d1%8f-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%bb%d0%be/" target="_blank" rel="noreferrer noopener">сбор логов с web сервера в Elastic Cloud</a>. Сегодня расскажу, как сохранять не просто логи, а php session id посетителей сайта, чтобы потом анализировать их перемещения по нему. Инструкция будет универсальная и подойдет для всех, кто занимается сбором логов в Elastic Stack с обработкой в filebeat или logstash.</p>


</br>



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



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



<p>Я буду показывать настройку на примере сайта на Bitrix. В WordPress все это настраивается точно так же, один в один.</p>


</br>



<h2 class="wp-block-heading">Реальный ip адрес посетителя bitrix в логах apache</h2>



<p>Если вы используете преднастроенное окружение bitrixenv, то ничего особенного для вывода реального ip адреса в лог apache делать не надо. Напомню, для тех, кто не в курсе, о чем идет речь. Bitrixenv &#8212; набор рецептов ansible, которые автоматически разворачивают веб сервер на основе nginx и apache. На nginx приходят все запросы клиентов, а дальше проксируются на apache для исполнения php кода. Если ничего дополнительно не настраивать, то в логах apache все запросы будут с ip адреса 127.0.0.1.</p>



<p>При этом, в bitrixenv в настройках nginx для сайтов указано, что реальный ip адрес посетителя надо записывать в отдельный заголовок.</p>



<pre class="wp-block-preformatted">proxy_set_header <strong>X-Forwarded-For</strong> $proxy_add_x_forwarded_for;</pre>



<p>В apache можно взять информацию из этого заголовка и поместить сразу в лог файл.</p>



<pre class="wp-block-preformatted">LogFormat "<strong>%{X-Forwarded-For}i</strong> %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined</pre>



<p>Все, этого достаточно, чтобы в лог файле apache выводился реальный ip адрес посетителя. Теперь разберемся с session id.</p>


</br>



<h2 class="wp-block-heading">Вывод Session ID посетителя Битрикс в лог apache</h2>



<p>Каждому посетителю сайта на Битриксе прописывается в Cookie&nbsp;<strong>PHPSESSID</strong>&nbsp;с уникальным идентификатором сеанса. Он остается постоянным в рамках одного посещения. По крайней мере на первый взгляд это так. Я не занимался подробно исследованием того, как это работает. Задачи не стояло.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/bitrix_session_id.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/bitrix_session_id-1024x406.png" alt="Bitrix PHPSESSID" class="wp-image-11365"/></a></figure>



<pre class="wp-block-preformatted">Host: 10.20.1.5
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://10.20.1.5/photo/
Cookie: BITRIX_SM_GUEST_ID=2; BITRIX_SM_LAST_VISIT=22.04.2020+15%3A19%3A08; BITRIX_CONVERSION_CONTEXT_s1=conversion_visit_day; <strong>PHPSESSID=f62568ad389b9ef0bba3c6d3650f7155</strong>; BITRIX_SM_SOUND_LOGIN_PLAYED=Y
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache</pre>



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



<pre class="wp-block-preformatted">LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\" <strong>%{PHPSESSID}C</strong>" combined</pre>



<p>Если хотите вывести в лог все содержимое куки, то используйте такую конструкцию &#8212;&nbsp;<em>%{Cookie}i</em>. В нашем случае это излишне. Хватит только PHPSESSID. Перезапускаем apache и смотрим, что у нас будет в логе.</p>



<pre class="wp-block-preformatted"><strong>10.20.1.1</strong> - - [22/Apr/2020:15:45:59 +0300] "GET / HTTP/1.0" 200 47747 "http://10.20.1.5/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0" <strong>f62568ad389b9ef0bba3c6d3650f7155</strong></pre>



<p>IP адрес и ID сессии присутствуют в логе. В данном случае ip адрес серый, потому что тестовое окружение настроено в локальной сети. Теперь нам нужно настроить grok фильтр elastic на парсинг измененного лог файла. Затем добавить новое поле в индекс elasticsearch, чтобы с ним можно было работать.</p>


</br>



<h2 class="wp-block-heading">Добавление произвольного поля в Elastic Cloud</h2>



<p>Перемещаемся в Kibana. Первым делом проверим, какой pipeline для обработки логов загружен в Elasticsearch. Для этого идем в интерфейс Kibana, в раздел&nbsp;<strong>Dev Tools -&gt; Console</strong>&nbsp;и вводим туда запрос</p>



<pre class="wp-block-preformatted">GET _ingest/pipeline/filebeat-*access*</pre>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-01.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-01-1024x408.png" alt="Elastic pipeline" class="wp-image-11260"/></a></figure>



<p>Запоминаем точное название пайплайна &#8212;&nbsp;<em>filebeat-7.6.2-apache-access-default</em>. Напоминаю, что такое pipeline. Мы используем легковесный filebeat для передачи логов в elastic. В отличие от logstash, filebeat сам не умеет выполнять сложный парсинг логов на основе grok фильтров. Этим занимается сама нода elastic на основе pipeline, который ей передает filebeat.</p>



<p>Теперь идем на целевой сервер, где работает apache и filebeat. Дефолтный pipeline должен располагаться в файле&nbsp;<em>/usr/share/filebeat/module/apache/access/ingest/default.json</em>. Необходимо проверить, что его содержимое соответствует тому, что было в выводе в консоли Kibana. В дефолтной установке это должно быть так.</p>



<p>Нам нужно изменить этот pipeline. Для этого останавливаем filebeat.</p>



<pre class="wp-block-preformatted"># systemctl stop filebeat</pre>



<p>Редактируем&nbsp;<em>default.json</em>, предварительно сохранив копию исходного файла на всякий случай.</p>



<p>Берем следующий блок:</p>



<pre class="wp-block-preformatted">          "grok": {
              "field": "message",
              "patterns": [
                  "%{IPORHOST:destination.domain} %{IPORHOST:source.ip} - %{DATA:user.name} \\[%{HTTPDATE:apache.access.time}\\] \"(?:%{WORD:http.request.method} %{DATA:url.original} HTTP/%{NUMBER:http.version}|-)?\" %{NUMBER:http.response.status_code:long} (?:%{NUMBER:http.response.body.bytes:long}|-)( \"%{DATA:http.request.referrer}\")?( \"%{DATA:user_agent.original}\")?",
                  "%{IPORHOST:source.address} - %{DATA:user.name} \\[%{HTTPDATE:apache.access.time}\\] \"(?:%{WORD:http.request.method} %{DATA:url.original} HTTP/%{NUMBER:http.version}|-)?\" %{NUMBER:http.response.status_code:long} (?:%{NUMBER:http.response.body.bytes:long}|-)( \"%{DATA:http.request.referrer}\")?( \"%{DATA:user_agent.original}\")?",
                  "%{IPORHOST:source.address} - %{DATA:user.name} \\[%{HTTPDATE:apache.access.time}\\] \"-\" %{NUMBER:http.response.status_code:long} -",
                  "\\[%{HTTPDATE:apache.access.time}\\] %{IPORHOST:source.address} %{DATA:apache.access.ssl.protocol} %{DATA:apache.access.ssl.cipher} \"%{WORD:http.request.method} %{DATA:url.original} HTTP/%{NUMBER:http.version}\" (-|%{NUMBER:http.response.body.bytes:long})"
              ],</pre>



<p>И приводим его к следующему виду:</p>



<pre class="wp-block-preformatted">          "grok": {
              "field": "message",
              "patterns": [
                  "%{IPORHOST:source.address} - %{DATA:user.name} \\[%{HTTPDATE:apache.access.time}\\] \"(?:%{WORD:http.request.method} %{DATA:url.original} HTTP/%{NUMBER:http.version}|-)?\" %{NUMBER:http.response.status_code:long} (?:%{NUMBER:http.response.body.bytes:long}|-)( \"%{DATA:http.request.referrer}\")?( \"%{DATA:user_agent.original}\")? <strong>?%{WORD:session_id}</strong>"
              ],</pre>



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



<p>Мы добавили в конец новое поле для парсинга через встроенный grok фильтр&nbsp;<strong>?%{WORD:session_id}</strong>&nbsp;и удалили лишние фильтры, которые нужны для совместимости с разными версиями apache. Предложенный фильтр проверен на версии Apache/2.4.6 и его стандартном формате логов, плюс текстовое поле с сессией.</p>



<p>Так же для удобства рекомендую удалить строки ниже:</p>



<pre class="wp-block-preformatted">      {
          "remove": {
              "field": "message"
          }
      },
</pre>



<p>Тогда в elastic будут в том числе сохраняться строки из лога в оригинальном виде, а не только распарсенные значения. Это бывает полезно для разбора полетов. По-умолчанию они удаляются для экономии места.</p>



<p>Теперь возвращаемся в консоль Kibana и удаляем текущий pipeline из elastic, так как мы туда загрузим новый.</p>



<pre class="wp-block-preformatted">DELETE _ingest/pipeline/filebeat-7.6.2-apache-access-default</pre>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-02.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-02-1024x214.png" alt="elastic delete pipeline" class="wp-image-11261"/></a></figure>


</br>



<p>Идем на сервер и запускаем filebeat</p>



<pre class="wp-block-preformatted"># systemctl start filebeat</pre>



<p>Смотрим его лог на наличие ошибок. Их быть не должно. Если есть, то надо проверять внимательно&nbsp;<em>default.json</em>, не нарушен ли его формат при редактировании. Расположение пробелов и отступов важно. При проверке статуса сервиса ошибок быть не должно.</p>



<pre class="wp-block-preformatted"># systemctl status filebeat</pre>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-03.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-03-1024x251.png" alt="filebeat status" class="wp-image-11262"/></a></figure>



<p>Видим, что новый pipeline загружен. Идем в консоль Kibana и проверяем, что это так.</p>



<pre class="wp-block-preformatted">GET _ingest/pipeline/filebeat-7.6.2-apache-access-default</pre>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-04.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-04-1024x380.png" alt="Просмотр pipeline" class="wp-image-11263"/></a></figure>



<p>Идем в Discovery и проверяем наличие нового поля&nbsp;<strong>session_id</strong>. Рядом с ним должен быть восклицательный знак.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-05.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-05-1024x466.png" alt="Новое поле в Kibana" class="wp-image-11264"/></a></figure>



<p>Идем в&nbsp;<strong>Management -&gt; Kibana -&gt; Index Patterns</strong>. Выбираем индекс filebeat-* и жмем справа вверху на обновление &#8212;&nbsp;<em>refresh field list</em>.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-06.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-06-1024x550.png" alt="Обновление шаблона индекса" class="wp-image-11265"/></a></figure>


</br>



<p>После этого тут же проверяем через поиск, что в индексе появилось новое поле session_id.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-07.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-07-1024x457.png" alt="Проверка нового поля" class="wp-image-11266"/></a></figure>



<p>Теперь можно вернуться в Discovery и осуществлять поиск по полю session_id.</p>



<figure class="wp-block-image"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-08.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/filebeat-add-new-field-08-1024x545.png" alt="Группировка по новому полю session id в kibana" class="wp-image-11267"/></a></figure>



<p>На этом все. Новое поле в elasticsearch добавлено. Можно использовать в визуализациях и дашбордах.</p>


</br>



<h2 class="wp-block-heading">Часто задаваемые вопросы по теме статьи (FAQ)</h2>



<p><strong>Подойдет ли этот же grok фильтр для парсинга логов в logstash?</strong></p>



<p>Да, подойдет. Формат grok фильтров одинаков и в ingest node, где в данном случае происходит обработка логов, и в logstash.<strong>Есть ли разница в настройке Elastic Cloud и собственного ELK сервера?</strong></p>



<p>Принципиальной разницы в настройке нет. Это абсолютно одинаковые продукты. Первый развернут в публичном облаке, второй на ваших собственных серверах.<strong>Будут ли корректно обрабатываться логи, если в них не будет присутствовать запись с session id?</strong></p>



<p>Да, будут. В фильтре перед %{WORD:session_id} стоит вопросительный знак, который делает необязательным наличие этой строки в логе.</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%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%8f-%d0%b2-elastic-%d0%bd%d0%b0-%d0%bf/">Добавление произвольного поля в Elastic на примере session_id в Bitrix</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%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%8f-%d0%b2-elastic-%d0%bd%d0%b0-%d0%bf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Быстрая настройка Elastic Stack в Elastic Cloud для сбора логов</title>
		<link>https://clip-clap.ru/it/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-elastic-stack-%d0%b2-elastic-cloud-%d0%b4%d0%bb%d1%8f-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%bb%d0%be/</link>
					<comments>https://clip-clap.ru/it/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-elastic-stack-%d0%b2-elastic-cloud-%d0%b4%d0%bb%d1%8f-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%bb%d0%be/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 19:05:50 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1633</guid>

					<description><![CDATA[<p>Хочу сегодня наглядно показать, как можно очень быстро, буквально, за 30 минут, начать собирать и обрабатывать логи. Я расскажу, как</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-elastic-stack-%d0%b2-elastic-cloud-%d0%b4%d0%bb%d1%8f-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%bb%d0%be/">Быстрая настройка Elastic Stack в Elastic Cloud для сбора логов</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Хочу сегодня наглядно показать, как можно очень быстро, буквально, за 30 минут, начать собирать и обрабатывать логи. Я расскажу, как зарегистрироваться в Elastic Cloud, развернуть там Elastic Stack и сразу начать собирать логи apache через filebeat. Для демонстрации возможностей будет использоваться триальный период в 14 дней. Этого вполне хватает, чтобы оценить сервис и понять, нужен он вам или нет.</p>


</br>



<p>У меня есть целый цикл статей про настройку и эксплуатацию ELK Stack для сбора логов с различных приложений. Так же я подробно рассказал, как <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> себе, если у вас есть под него мощности и компетенции. В целом, там нет чего-то сильно сложного, но тем не менее, все равно необходимо повозиться, чтобы все заработало.</p>



<p>Не обязательно все это разворачивать и настраивать у себя, если хочется просто попробовать продукт, чтобы понять, нужен он вам или нет. Есть сервис &#8212;&nbsp;<a href="https://cloud.elastic.co/" target="_blank" rel="noreferrer noopener">https://cloud.elastic.co</a>, где можно за 2 минуты зарегистрировать и развернуть свой стэк на базе Elasticsearch и Kibana. Отличие от описанного мной способа разворачивания стека в том, что тут не будет Logstash. Во многих случаях можно обойтись без него, так что это не критично. Особенно для того, чтобы просто попробовать.</p>



<p>Итак, прежде чем приступить к настройке, зарегистрируйтесь в облаке и активируйте учетную запись.</p>


</br>



<h2 class="wp-block-heading">Запуск Elastic Stack в Elastic Cloud</h2>



<p>При первом входе в личный кабинет у вас будет возможность создать Deployment с Elasticsearch.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-01.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-01-1024x398.png" alt="Установка Elasticsearch в Elastic Cloud" class="wp-image-11279"/></a></figure></div>



<p>Дальше нужно выбрать платформу, где вы хотите произвести установку сервиса, и регион. Я для теста выбрал Google Cloud Platform во Frankfurt. Все остальное оставил по дефолту. Дальше внизу жмете Create Deployment и ждете, когда он развернется. Обычно 2-3 минуты.</p>



<p>Дожидаемся окончание процесса установки и переходим в Kibana.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-02.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-02-1024x551.png" alt="Запуск Kibana" class="wp-image-11280"/></a></figure></div>



<p>Логинимся в Kibana с учетными данными, которые указаны в личном кабинете, в Deployment. Username обычно elastic и какой-то пароль. При первом входе вам предложат залить набор демо данных, чтобы посмотреть функционал системы. Если хотите &#8212; посмотрите. Я там и так все видел, поэтому отказываюсь <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Буду лить свои логи от apache.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-03.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-03-1024x596.png" alt="Первый вход в Kibana" class="wp-image-11281"/></a></figure></div>



<p>После выбора оказываетесь на главной странице Kibana. По сути Elastic Stack вы уже развернули и он готов принимать данные. Вот так, быстро и просто все настроилось. И DevOps не нужен <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Можете тут осмотреться и познакомиться с системой.</p>


</br>



<h2 class="wp-block-heading">Сбор логов через Filebeat в Elasticsearch</h2>



<p>В качестве примера возьму, как обычно, свой &#171;любимый&#187; bitrix. Так выходит, что работать с ним приходится довольно часто, так что использую его в своих статьях в качестве примера.</p>



<p>Итак, у нас развернут Bitrixenv для любого битрикс сайта. Система &#8212; Centos 7, логи будем собирать с веб сервера Apache. Для Nginx никакой разницы не будет, так как дефолтный формат логов у них один и тот же.</p>



<p>Нам необходимо установить на сервер filebeat и настроить его на отправку логов в наш кластер. Инструкция, как это сделать, есть в самой Kibana. Для этого идите на главную страницу и выберите&nbsp;<strong>Add log data</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-04.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-04-1024x421.png" alt="Сбор логов в Elastic Cloud" class="wp-image-11282"/></a></figure></div>



<p>Далее выбирайте&nbsp;<strong>Apache Logs</strong>&nbsp;и вкладку RPM.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-05.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-05-1024x622.png" alt="Сбор логов Apache в elastic" class="wp-image-11283"/></a></figure></div>



<p>Ниже будет подробная инструкция о том, как настроить отправку логов через filebeat в Elastic. Идем на сервер и ставим filebeat.</p>



<pre class="wp-block-preformatted"># curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.2-x86_64.rpm
# rpm -vi filebeat-7.6.2-x86_64.rpm</pre>



<p>Открываем конфигурационный файл&nbsp;<em>/etc/filebeat/filebeat.yml</em>&nbsp;и указываем реквизиты доступа, как они показаны в Kibana.</p>



<pre class="wp-block-preformatted">cloud.id: ":ZXVyb3BlLXdlc3QzLmdjcC5jbG91ZC5lcy5pbyRiNLPeRmNlODBkNzY0OTYxODk3YWVmZGZlNmI1ZWVjYyQ0NjdjOTQzNGJlYjk0YTk1YjBmYTQ5ZWQ4NTdkMzYzMA=="
cloud.auth: "elastic:5344qwZjFyM9Q23THCuMxcSm"</pre>



<p>Активируем модуль для apache.</p>



<pre class="wp-block-preformatted"># filebeat modules enable apache</pre>


</br>



<p>Если у вас логи располагаются в дефолтном месте &#8212;&nbsp;<em>/var/log/httpd/access_log</em>&nbsp;и&nbsp;<em>error_log</em>, то больше ничего делать не надо. Если где-то в другом месте или с другими именами, то укажите до них путь в конфиге&nbsp;<em>/etc/filebeat/modules.d/apache.yml</em>&nbsp;примерно так:</p>



<pre class="wp-block-preformatted">- module: apache
  access:
    enabled: true
    var.paths: ["/path/to/log/apache/access.log*"]
  error:
    enabled: true
    var.paths: ["/path/to/log/apache/error.log*"]</pre>



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



<pre class="wp-block-preformatted"># filebeat setup</pre>



<p>И запускаем filebeat.</p>



<pre class="wp-block-preformatted"># systemctl enable --now filebeat</pre>



<p>Идем в Kibana в раздел&nbsp;<strong>Discovery</strong>&nbsp;и наблюдаем там свои логи. У вас должен был появиться индекс filebeat-*.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-06.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-06-1024x552.png" alt="Просмотр логов в Kibana" class="wp-image-11284"/></a></figure></div>



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



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-07.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-07-1024x524.png" alt="Настройка списка логов" class="wp-image-11285"/></a></figure></div>


</br>



<p>Вы можете использовать поиск для группировки запросов по каким-то признакам, сохраненных в полях, на которые распарсен ваш лог. У вас уже есть готовый dashboard для логов apache. Идем в раздел Dashboard, через поиск находим дашборд для apache и смотрим его.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-08.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2020/04/install-elastic-cloud-08-1024x532.png" alt="Dashboard для логов Apache" class="wp-image-11286"/></a></figure></div>



<p>У меня тестовый сайт на локалхосте, поэтому дашборд неинформативен. Если прогнать через него реальный сайт, можно получить полезные данные. Пример самостоятельной сборки dashboard в Kibana под свои потребности описан у меня в статьях &#8212; <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">Dashboard для логов Nginx</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/%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/" target="_blank" rel="noreferrer noopener">Мониторинг производительности бэкенда</a>.</p>


</br>



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



<p>Вот и все. Мы очень быстро и просто настроил сбор логов в Elastic Stack, используя триальный период в 14 дней. Этого будет достаточно, чтобы протестировать продукт и понять, нужен ли он вам. Далее вы можете либо выбрать платный тарифный план в облаке, либо собрать все на своих мощностях.</p>



<p>В стандартном деплойменте, который вы развернули для теста, используется кластер. Данные хранятся в двух различных сегментах облака, в третьем расположен мастер. И еще по виртуалке под Kibana и APM (мониторинг приложений). Если вам нужны только логи и нет необходимости настраивать отказоустойчивость, достаточно будет только виртуалки с Kibana и Elasticsearch. Собрать свой Deployment под задачи можно в самом начале, там, где мы выбирали готовый. При своей сборке сразу же будет видна ее стоимость в час. В целом, все удоволствие начинается от 16$ в месяц.</p>



<p>В следующем материале расскажу, как вывести id сессии посетителя Битрикс в лог файл и затем с помощью Kibana следить за его перемещениями по сайту.</p>
<p>Сообщение <a href="https://clip-clap.ru/it/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-elastic-stack-%d0%b2-elastic-cloud-%d0%b4%d0%bb%d1%8f-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%bb%d0%be/">Быстрая настройка Elastic Stack в Elastic Cloud для сбора логов</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://clip-clap.ru/it/%d0%b1%d1%8b%d1%81%d1%82%d1%80%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-elastic-stack-%d0%b2-elastic-cloud-%d0%b4%d0%bb%d1%8f-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%bb%d0%be/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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 &#8212; FORBIDDEN/12/index read-only / allow delete (api)</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%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-%d0%b2-elasticsearch-forbidden-12-index-read-only-allow-delete-api/</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%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-%d0%b2-elasticsearch-forbidden-12-index-read-only-allow-delete-api/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:32:19 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1622</guid>

					<description><![CDATA[<p>Поймал несколько раз ошибку в работе связки logstash + elasticsearch. Выражается в том, что данные не поступают в определенный индекс.</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%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-%d0%b2-elasticsearch-forbidden-12-index-read-only-allow-delete-api/">Ошибка в elasticsearch &#8212; FORBIDDEN/12/index read-only / allow delete (api)</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Поймал несколько раз ошибку в работе связки logstash + elasticsearch. Выражается в том, что данные не поступают в определенный индекс. Самое просторе решение &#8212; удалить индекс и создать заново. Данные начнут поступать. Если вас не устраивает решение с удалением индекса, то читайте дальше.</p>


</br>



<p>Полностью ошибка в логе logstash выглядит следующим образом:</p>



<pre class="wp-block-preformatted">[INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=&gt;"cluster_block_exception", "reason"=&gt;"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})</pre>



<p>Получил я ее несколько раз, когда оставалось очень мало свободного места на диске с данными elasticsearch. При достижении примерно 5% свободного места, данные переставали поступать в elasticsearch и появлялась эта ошибка. Исправить ее можно следующим образом. Во первых, перенести данные на более емкий диск или почистить его. Потом идем в&nbsp;<strong>Kibana -&gt; Dev Tools</strong>&nbsp;и выполняем команду:</p>



<pre class="wp-block-preformatted">PUT weblogs-2018.09.10/_settings
{
  "index": {
  "blocks": {
  "read_only_allow_delete": "false"
}
}
}</pre>


</br>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/kibana-error-01.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/kibana-error-01.png" alt="Решение ошибки в elasticsearch - FORBIDDEN/12/index read-only / allow delete (api)" class="wp-image-6890"/></a></figure></div>



<p><strong>weblogs-2018.09.10</strong>&nbsp;&#8212; имя индекса, куда не шли данные. После выполнения команды перезапустил logstash на сервере и данные пошли в текущий индекс.</p>


</br>



<p>Скорее всего для записи будут недоступны и системные индексы. Проверьте, какие у вас используются. Точно должен быть&nbsp;<strong>.kibana</strong>. Если используете мониторинг, то для него тоже свои системные индексы создаются. Они тоже могут быть заблокированы для записи.</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%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-%d0%b2-elasticsearch-forbidden-12-index-read-only-allow-delete-api/">Ошибка в elasticsearch &#8212; FORBIDDEN/12/index read-only / allow delete (api)</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%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-%d0%b2-elasticsearch-forbidden-12-index-read-only-allow-delete-api/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>
		<item>
		<title>Dashboard для логов Nginx в Kibana+Elasticsearch</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/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/</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/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 06 Sep 2020 18:20:58 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[анализ]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1616</guid>

					<description><![CDATA[<p>Не так давно я рассказывал о том, как настроить ELK Stack для централизованного хранения логов. Сегодня хочу подробно рассказать о том, как</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/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/">Dashboard для логов Nginx в Kibana+Elasticsearch</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> для централизованного хранения логов. Сегодня хочу подробно рассказать о том, как создать координатную географическую карту на основе логов nginx и составить дашборд для него же. На этом дашборде очень удобно мониторить состояние веб проекта &#8212; расследовать инициденты, анализировать ошибки.</p>


</br>



<p>Начнем создание дашборда с самого сложного &#8212; настройки гео карты запросов. На официальном сайте есть подробный мануал на тему создания&nbsp;<a href="https://www.elastic.co/blog/geoip-in-the-elastic-stack" target="_blank" rel="noreferrer noopener">GeoIP карты</a>. В нем вроде бы все понятно. Никаких особых настроек не требуется. Все работает из коробки. Но у меня никак не хотело работать все то, что там описано. Пришлось прилично поковыряться с elasticsearch и его шаблонами, чтобы разобраться в чем причина.</p>



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



<p>Основная сложность тут в том, что для работы geoip карты вам нужны в шаблоне поля с типом&nbsp;<strong>geo_point</strong>. После создания индекса, тип полей уже нельзя поменять. То есть просто преобразовать данные на основе ip в координаты не сложно, это умеет делать модуль geoip в logstash. Но вот дальше вы никак не превратите координаты в виде числа в geo_point данные. Нужно в самом начале создать шаблон с такими полями.</p>



<p>Надеюсь понятно объяснил <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Если не понятно сразу, то сообразите дальше по ходу моего рассказа. Я сам пока разобрался в этой кухне, прилично поковырялся и нагуглился.</p>



<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">elasticsearch и kibana</a> настроены примерно как у меня в инструкции. Фильтр logstash, отвечающий за обработку логов nginx выглядит следующим образом:</p>



<pre class="wp-block-preformatted">if [type] == "nginx-ext-access" {
        grok {
            match =&gt; [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"]
            overwrite =&gt; [ "message" ]
            }
        mutate {
            convert =&gt; ["response", "integer"]
            convert =&gt; ["bytes", "integer"]
            convert =&gt; ["responsetime", "float"]
            }
        geoip {
            source =&gt; "clientip"
            target =&gt; "geoip"
            add_tag =&gt; [ "nginx-geoip" ]
            }
        date {
            match =&gt; [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
            remove_field =&gt; [ "timestamp" ]
            }
        useragent {
            source =&gt; "agent"
            }
    }</pre>


</br>



<p>И вот так логи уходят в elasticsearch</p>



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



<h2 class="wp-block-heading">Создание index шаблона</h2>



<p>Как я уже сказал выше, для того, чтобы у вас заработала geoip карта, у вас должны быть в шаблоне индекса поля типа&nbsp;<strong>geo_point</strong>. Если их не будет, то вы сразу при создании визуализации с Coordinate Map получите ошибку:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-01.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-01.png" alt="No Compatible Fields: The &quot;nginx-*&quot; index pattern does not contain any of the following field types: geo_point" class="wp-image-7011"/></a></figure></div>



<pre class="wp-block-preformatted">No Compatible Fields: The "nginx-*" index pattern does not contain any of the following field types: geo_point</pre>


</br>



<p>Что я только не делал, после того, как получил эту ошибку. Я проверял работу geoip модуля. Смотрел поля с координатами на основе ip адреса. Все было в порядке и все было на месте.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-02.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-02.png" alt="geoip данные для карты запросов" class="wp-image-7012"/></a></figure></div>



<p>Но geoip карта в Kibana не работала. Погуглив немного эту тему, я потихоньку стал понимать, в чем тут дело.</p>



<p>Для начала посмотрим шаблон нашего индекса с логами nginx. Для этого идем в&nbsp;<strong>Management -&gt; Index Management</strong>. Выбираем наш индекс и смотрим&nbsp;<strong>Mapping</strong>. Нас интересует поле&nbsp;<strong>location</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-03.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-03.png" alt="mapping индекса с nginx логами" class="wp-image-7013"/></a></figure></div>



<p>Оно имеет тип&nbsp;<strong>float</strong>, а нам нужно, судя по статье на сайте, тип&nbsp;<strong>geo_point</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-04.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-04.png" alt="Тип поля geo_point для координат" class="wp-image-7014"/></a></figure></div>



<p>Дальше стал разбираться, как изменить тип поля в шаблоне. Оказалось, что это сделать нельзя. Тип полей можно установить только в момент создания индекса из шаблона. Значит нужно понять, как сделать свой шаблон с нужными полями.</p>



<p>Для начала посмотрим, какие шаблоны у нас сейчас установлены. Для этого идем в&nbsp;<strong>Dev Tools</strong>&nbsp;и выполняем команду:</p>



<pre class="wp-block-preformatted">GET /_template</pre>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-05.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-05.png" alt="Просмотр template в elasticsearch" class="wp-image-7015"/></a></figure></div>



<p>Обращаем внимание на шаблон logstash. В нем есть все, что нам нужно. Если ваш индекс будет иметь шаблон logstash-*, то вам ничего настраивать не надо, все заработает из коробки. Мы же добавим новый шаблон nginx* и установим у него параметры полей, необходимые для работы geoip карты.</p>


</br>



<p>Выполняем следующий код для создания шаблона nginx по аналогии с шаблоном logstash.</p>



<pre class="wp-block-preformatted">PUT _template/nginx
{
"index_patterns": [
      "nginx*"
    ],
    "settings": {
      "index": {
        "refresh_interval": "5s"
      }
    },
    "mappings": {
      "_default_": {
        "dynamic_templates": [
          {
            "message_field": {
              "path_match": "message",
              "match_mapping_type": "string",
              "mapping": {
                "type": "text",
                "norms": false
              }
            }
          },
          {
            "string_fields": {
              "match": "*",
              "match_mapping_type": "string",
              "mapping": {
                "type": "text",
                "norms": false,
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
            }
          }
        ],
        "properties": {
          "@timestamp": {
            "type": "date"
          },
          "@version": {
            "type": "keyword"
          },
          "geoip": {
            "dynamic": true,
            "properties": {
              "ip": {
                "type": "ip"
              },
              "location": {
                "type": "geo_point"
              },
              "latitude": {
                "type": "half_float"
              },
              "longitude": {
                "type": "half_float"
              }
            }
          }
        }
      }
    },
    "aliases": {}
  }</pre>



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



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-06.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-06.png" alt="Новый шаблон для логов nginx в elasticsearch" class="wp-image-7016"/></a></figure></div>



<p>Все в порядке. Теперь новые индексы, попадающие под этот шаблон, будут содержать необходимые поля. Можете либо удалить текущие индексы, для создания новых, либо подождать, когда они сами создадутся в соответствии с вашими правилами.</p>


</br>



<p>Прежде чем двигаться дальше, проверьте, что у вас в шаблоне индекса действительно есть поле geo_point. Идем в&nbsp;<strong>Management -&gt; Index Patterns</strong>&nbsp;и смотрим поля нашего индекса, предварительно обновив их, нажав&nbsp;<strong>Refresh field list</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-07.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-07.png" alt="Просмотр полей для индекса nginx в kibana" class="wp-image-7017"/></a></figure></div>



<p>Если у вас так же, можно двигаться дальше.</p>



<p>На всякий случай расскажу про неправильный путь, по которому я пошел изначально, пытаясь решить проблему с шаблоном. Я узнал, что logstash хранит свои шаблоны в директории&nbsp;<em>/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.2.0-java/lib/logstash/outputs/elasticsearch&nbsp;</em>(пипец какой путь :)). Я решил изменить его шаблон, для этого просто отредактировал файл&nbsp;<em>elasticsearch-template-es6x.json</em>, поменяв шаблон для индекса. Перезапустил logstash, но ничего не изменилось. Этот шаблон был залит в elasticsearch при первом запуске. Потом уже не меняется. Его надо удалить, чтобы он установился заново с моими изменениями. Я не стал это делать, а просто загрузил новый шаблон.</p>



<h2 class="wp-block-heading">Настройка координатной карты в Kibana</h2>



<p>Теперь создадим географическую карту с распределением запросов nginx по этой карте на основе ip адресов. Идем в раздел&nbsp;<strong>Visualize</strong>&nbsp;и добавляем&nbsp;<strong>Coordinate Map</strong>. Выбираем индекс с логами nginx. Указываем в карте поле с координатами &#8212;&nbsp;<strong>geoip.location</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-08.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-08.png" alt="Настройка Coordinate Map в Kibana" class="wp-image-7018"/></a></figure></div>


</br>



<p>Запускаете визуализацию и смотрите результат.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-09.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-09.png" alt="Geoip карта в Kibana и Elasticsearch для запросов nginx" class="wp-image-7019"/></a></figure></div>



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



<h2 class="wp-block-heading">Настройка Dashboard для nginx</h2>



<p>Я настроил вот такой дашборд в Kibana для логов Nginx (кликабельно, большая картинка, откройте в отдельной вкладке, чтобы рассмотреть).</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-10.png" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2018/09/elasticsearch-kibana-nginx-dashboard-10.png" alt="Dashboard для nginx в kibana" class="wp-image-7020"/></a></figure></div>


</br>



<p>Здесь представлена следующая информация:</p>



<ol><li>Geoip карта</li><li>Распределение запросов по странам.</li><li>Список самых популярных урлов.</li><li>Список самых активных IP.</li><li>Распределение запросов по типам ответов.</li><li>Траффик.</li><li>Непосредственно логи nginx в чистом виде.</li></ol>



<p>С таким дашбордом очень удобно расследовать инциденты и просто смотреть статистику. Выбираем, к примеру, код ошибки и смотрим всю информацию по нему. Сразу подсвечиваются ip, которые спамят запросы. По ним тут же можно получить всю информацию &#8212; откуда они и по каким урлам спамят. И так далее. В общем, очень удобно. Я уже не представляю большой веб проект без такого дашборда. Раньше анализ логов для меня был гораздо сложнее. И как я раньше админил без такого инструмента <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Век живи &#8212; век учись.</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/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/">Dashboard для логов Nginx в Kibana+Elasticsearch</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/dashboard-%d0%b4%d0%bb%d1%8f-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-nginx-%d0%b2-kibanaelasticsearch/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка syslog-ng для централизованного сбора логов</title>
		<link>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/</link>
					<comments>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/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 03 Aug 2020 09:46:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[syslog]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1506</guid>

					<description><![CDATA[<p>Мне понадобилось организовать сервер для сбора логов с удаленных устройств. Это могут быть серверы, сетевое оборудование, либо что-то еще, что поддерживает</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%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/">Настройка syslog-ng для централизованного сбора логов</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Мне понадобилось организовать сервер для сбора логов с удаленных устройств. Это могут быть серверы, сетевое оборудование, либо что-то еще, что поддерживает логирование в формате syslog. Я решил использовать не стандартный для большинства дистрибутивов rsyslog, а установить syslog-ng, потому что мне он показался более удобным и простым в настройке.</p>


</br>



<h2 class="wp-block-heading">Введение</h2>



<p>Информации на тему сбора логов с удаленных серверов и интернете достаточно много. Ничего сложного тут нет, я и сам уже описывал подобную настройку в статье про <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">сбор логов с mikrotik</a>. Но решение получилось кривоватое, в комментариях написаны замечания. Я и сам знал о них, но простого и быстрого решения я не смог найти, на тот момент меня устраивал и такой вариант. Сейчас же решил все сделать аккуратно и красиво, чтобы было удобно пользоваться. В процессе поиска информации в интернете решил попробовать <strong>syslog-ng</strong>. С ним у меня не возникло никаких затруднений, сразу получилось то, что требовалось, поэтому я остановил свой выбор на нем.</p>



<p>Настраивать сервер сбора логов будем на системе CentOS 7. Если у вас еще не подготовлен сервер, то читайте мою информацию по <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-centos-7/" target="_blank" rel="noreferrer noopener">установке</a> и <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/centos-7-%d0%b8-8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0-%d0%bf%d0%be%d1%81%d0%bb%d0%b5-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba/" target="_blank" rel="noreferrer noopener">базовой настройке centos</a>. Для небольшого количества устройств, нагрузка на сервер будет незначительная, поэтому имеет смысл размещать сервер на виртуальной машине. Если у вас нет готового гипервизора, можете посмотреть мою информацию на тему настройки <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/debian/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-proxmox-%d0%b2-debian-%d0%bd%d0%b0-raid-1/" target="_blank" rel="noreferrer noopener">linux гипервизора proxmox</a> или бесплатного решения microsoft &#8212; Windows Hyper-V Server 2016.</p>


</br>



<h2 class="wp-block-heading">Установка и настройка syslog-ng</h2>



<p>С установкой нет ничего сложного. Установить syslog-ng можно одной командой:</p>



<pre class="wp-block-preformatted"># yum install -y syslog-ng</pre>



<p>Сразу переходим к настройке. Файл конфигурации располагается по адресу&nbsp;<em>/etc/syslog-ng/syslog-ng.conf</em>. Чтобы сервер начал принимать логи с удаленного устройства, его необходимо прописать в конфиг. Делается это просто. В самый конец конфигурационного файла добавляем информацию о новом устройстве:</p>



<pre class="wp-block-preformatted">destination d_xs-zabbix { file("/var/log/!remote/xs-zabbix.log"); };
filter f_xs-zabbix { netmask("10.1.3.29/255.255.255.255"); };
log { source(net); filter(f_xs-zabbix); destination(d_xs-zabbix); };</pre>



<figure class="wp-block-table"><table><tbody><tr><td>d_xs-zabbix</td><td>Название назначения для записи лога по адресу&nbsp;/var/log/!remote/xs-zabbix.log</td></tr><tr><td>f_xs-zabbix</td><td>Название фильтра по адресу сервера источника.</td></tr><tr><td>10.1.3.29</td><td>Адрес сервера источника логов</td></tr></tbody></table></figure>



<p>Соответственно для второго сервера нужно добавить еще 3 строки, например так:</p>



<pre class="wp-block-preformatted">destination d_xs-web { file("/var/log/!remote/xs-web.log"); };
filter f_xs-web { netmask("10.1.3.38/255.255.255.255"); };
log { source(net); filter(f_xs-web); destination(d_xs-web); };</pre>



<p>И так далее. Добавляете столько серверов, сколько нужно. Не забудьте создать папку для логов. В моем примере это папка&nbsp;<em>/var/log/!remote</em>, сами файлы создавать не надо, служба автоматически их создаст, когда придет информация с удаленных серверов.</p>



<p>Запускаем&nbsp;syslog-ng и добавляем в автозагрузку:</p>



<pre class="wp-block-preformatted"># systemctl start&nbsp;syslog-ng
# systemctl enable&nbsp;syslog-ng</pre>



<p>Проверим, запустилась ли служба:</p>



<pre class="wp-block-preformatted"># netstat -tulnp | grep syslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 25960/syslog-ng</pre>



<p>Все в порядке, слушает <strong>514 udp</strong> порт. Не забудьте открыть этот порт в <a href="https://clip-clap.ru/it/%d1%81%d0%be%d1%84%d1%82-%d0%b8-%d0%be%d1%81/linux/centos/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-iptables-%d0%b2-centos-7/" target="_blank" rel="noreferrer noopener">iptables</a>, если у вас включен фаерволл. Сервер готов к приему логов.</p>


</br>



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



<p>Теперь идем на добавленные в syslog-ng сервера и настраиваем там отправку логов на наш сервер. Сделать это очень просто. Открываем файл конфигурации rsyslog. В CentOS он живет по адресу&nbsp;<em>/etc/rsyslog.conf</em>&nbsp;и добавляем туда строку:</p>



<pre class="wp-block-preformatted">*.* @10.1.3.22</pre>



<p>10.1.3.22 &#8212; ip адрес syslog-ng сервера. Перезапустите rsyslog:</p>



<pre class="wp-block-preformatted"># service rsyslog restart</pre>



<p>и проверяйте логи на сервере syslog-ng в указанной папке. Правило&nbsp;*.* отправит все логи в указанное направление. Это не всегда нужно, можно отредактировать правила. Для этого надо ознакомиться с документацией по syslog. Там нет ничего сложного, мне не хочется на этом сейчас подробно останавливаться. В интернете есть примеры. Приведу пару своих.</p>



<pre class="wp-block-preformatted">*.*;local5.none @10.1.3.22</pre>



<p>В данном случае у меня по&nbsp;local5.notice идет лог самбы по доступу к сетевой шаре. Мне не нужно собирать эту информацию и я ее отключил. Вот еще пример:</p>



<pre class="wp-block-preformatted">*.info @10.1.3.22</pre>



<p>С этого сервера сыпалось много лишней информации уровня debug. Я ограничил отправляемые сообщения уровнем info. И так далее.</p>


</br>



<h2 class="wp-block-heading">Ротация логов syslog-ng</h2>



<p>В завершение приведу пример своего правила ротации логов. Рекомендую ротацию настроить сразу, не оставлять на потом. Создаем файл&nbsp;/<em>etc/logrotate.d/syslog-ng</em></p>



<pre class="wp-block-preformatted"># mcedit&nbsp;/etc/logrotate.d/syslog-ng</pre>



<pre class="wp-block-preformatted">/var/log/!remote/*.log {
    daily
    rotate 180
    olddir /var/log/!remote/old
    missingok
    compress
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2&gt; /dev/null` 2&gt; /dev/null || true
    endscript
}</pre>



<p>По этому правилу ротация логов происходит раз в день. Старые логи перемещаются в папку&nbsp;/var/log/!remote/old и сжимаются. Хранятся логи за последние 180 дней.</p>


</br>



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



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



<p>Для более удобного сбора и последующего просмотра информации существуют готовые решения с написанными веб панелями. Я посмотрел на некоторые из них. Что-то мне показалось слишком сложным в настройке, где-то веб интерфейс не понравился. Для себя остановился на приведенном варианте.</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%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/">Настройка syslog-ng для централизованного сбора логов</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%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/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mikrotik логирование на удаленный сервер rsyslog</title>
		<link>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/</link>
					<comments>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/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 02 Aug 2020 09:47:00 +0000</pubDate>
				<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[rsyslog]]></category>
		<category><![CDATA[логирование]]></category>
		<guid isPermaLink="false">https://clip-clap.ru/?p=1507</guid>

					<description><![CDATA[<p>Возникло желание собирать логи с роутера Mikrotik. Была нужна информация о подключенных по pptp абонентах и логи firewall для настройки. По-умолчанию, Mikrotik пишет все</p>
<p>Сообщение <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/">Mikrotik логирование на удаленный сервер rsyslog</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Возникло желание собирать логи с роутера Mikrotik. Была нужна информация о подключенных по <strong>pptp</strong> абонентах и <strong>логи firewall</strong> для настройки. По-умолчанию, Mikrotik пишет все логи в лог журнал, который можно просмотреть через winbox. Стандартно, там хранятся последние 100 строк лога.</p>


</br>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://serveradmin.ru/wp-content/uploads/2014/09/2014-09-24-18-43-08-Skrinshot-e%60krana.png"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2014/09/2014-09-24-18-43-08-Skrinshot-e%60krana.png" alt="Mikrotik logging" class="wp-image-417"/></a></figure></div>



<h2 class="wp-block-heading">Настраиваем удаленный сервер&nbsp;rsyslog</h2>



<p>У меня в хозяйстве имелся сервер Debian. Решил хранить логи с микротиков именно на нем. В составе Debian уже имеется сервис сбора логов с удаленных источников&nbsp;<strong>rsyslog</strong>. Необходимо только включить в нем необходимый функционал.&nbsp;Правим файл&nbsp;<strong>/etc/rsyslog.conf</strong>:</p>



<p>Раскомментируем строки</p>



<pre class="wp-block-preformatted"># provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514</pre>


</br>



<p>чтобы получать логи по UDP, либо</p>



<pre class="wp-block-preformatted"># provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514</pre>



<p>чтобы получать логи по TCP</p>



<p>И в секцию&nbsp;RULES добавим несколько строк для удобного хранения файлов логов от разных удаленных источников:</p>



<pre class="wp-block-preformatted"># Зададим шаблон создания имен файлов (на основании IP адреса клиента)
$template FILENAME,"/var/log/!remote/%fromhost-ip%/syslog.log"</pre>



<pre class="wp-block-preformatted"># Укажем сохранять сообщения от любого источника (*) с любым приоритетом (*) в файл, заданный шаблоном
# Например, клиенты (10.0.0.2,10.0.0.3...) будут раскладываться в соответствующие каталоги /var/log/10.0.0.2/syslog.log
 *.* ?FILENAME</pre>



<p>Перезапускаем rsyslog для применения настроек:</p>



<pre class="wp-block-preformatted">/etc/init.d/rsyslog restart</pre>



<p>Теперь наш сервер готов принимать логи с удаленных источников. Хранить он их будет в папке /var/log/!remote Для каждого источника будет создана папка с именем IP адреса этого источника.</p>


</br>



<h2 class="wp-block-heading">Настраиваем пересылку&nbsp;логов в Mikrotik</h2>



<p>Теперь настраиваем в роутере хранение логов на удаленном сервере. Для этого заходим в раздел&nbsp;<strong>System -&gt; Logging</strong>, выбираем закладку&nbsp;<strong>Actions</strong>, два раза щелкаем по строчке remote. Открывается окно настроек. В нем вводим адрес удаленного сервера сбора логов. Порт на свое усмотрение либо оставляем по-умолчанию, либо меняем на свой. Больше ничего добавлять не надо.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2014/09/2014-09-24-18-59-49-Skrinshot-e%60krana.png" alt="настройка логов в mikrotik" class="wp-image-425"/></figure></div>



<p>Дальше в разделе&nbsp;<strong>Rules</strong>&nbsp;создаем необходимое правило хранения:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2014/09/2014-09-24-19-05-15-Skrinshot-e%60krana.png" alt="Правила для логов в mikrotik" class="wp-image-428"/></figure></div>



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



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://serveradmin.ru/wp-content/uploads/2014/09/2014-09-24-19-07-55-Skrinshot-e%60krana-2.png" alt="запись логов с mikrotik в rsyslog" class="wp-image-429"/></figure></div>


</br>
<p>Сообщение <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/">Mikrotik логирование на удаленный сервер rsyslog</a> появились сначала на <a href="https://clip-clap.ru">Clip-Clap</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>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/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 01:54:06 by W3 Total Cache
-->