====== Мониторинг и сбор журналов ======
{{indexmenu_n>9}}
[[:ru:documentation:start|Вернуться в оглавление Документации Pandora FMS]]
===== Сбор журналов =====
==== Введение ====
{{:wiki:icono-modulo-enterprise.png |Версия Enterprise.}}Версия 5.0 и выше.
Мониторинг //журналов// в Pandora FMS настраивается двумя различными способами:
- **На основе модулей**: Представляет //журналы// в Pandora FMS как асинхронные мониторы, способные связывать предупреждения с обнаруженными записями, которые выполняют ряд условий, предварительно настроенных пользователем. Модульное представление //журналов// позволяет:
- Создать модули, подсчитывающие количество происшествий регулярного выражения в //журнале//.
- Получение строк и контекста сообщений //журнала//.
- **На основе Комбинированной визуализации**: Позволяет пользователю визуализировать в единой консоли всю информацию //журналов// из нескольких захватываемых источников, организуя информацию в последовательном порядке, используя метку времени, в которой были обработаны //журналы//.
Начиная с версии 7.0 NG 712, Pandora FMS включает [[https://ru.wikipedia.org/wiki/Elasticsearch|ElasticSearch]] для хранения информации //журналов//, что подразумевает существенное улучшение производительности.
==== Как это работает ====
{{ :wiki:logsesquema.png?650 |Pandora FMS y ElasticSearch, funcionamiento.}}
* //Журналы// проанализированные [[:en:documentation:01_understanding:03_glossary#software_agent|Программными Агентами]] (**eventlog** или текстовыми файлами), передаются на сервер Pandora FMS в "буквальном" виде (RAW) в [[:en:documentation:01_understanding:03_glossary##data_filesdata_xml|XML]] отчета агента
* Сервер данных Pandora FMS получает XML от агента, который содержит информацию о мониторинге и //журналах//.
* Когда сервер данных обрабатывает XML-данные, он идентифицирует информацию из //журналов//, сохраняя в основной базе данных ссылки агента отчетности и источник //журнала//, а затем автоматически отправляет информацию в ElasticSearch.
* Pandora FMS хранит данные в индексах ElasticSearch, ежедневно генерируя уникальный индекс для каждого экземпляра Pandora FMS.
* Сервер Pandora FMS имеет задачу обслуживания, которая удаляет индексы через интервал, заданный системным администратором (по умолчанию 90 дней).
==== Конфигурация ====
=== Конфигурация сервера ===
Система хранения //журналов//, основанная на ElasticSearch, требует конфигурации и настройки своих компонентов.
== Требования для сервера ==
Можно распространять Pandora FMS Server и ElasticSearch на независимых серверах.
* CentOS 7 или выше.
* Не менее 4 гигабайт оперативной памяти, хотя рекомендуется 6 ГБ оперативной памяти на каждый экземпляр ElasticSearch.
* Не менее 2 процессорных //ядер//.
* 20 ГБ дискового пространства для системы.
* 50 ГБ дискового пространства для данных ElasticSearch (количество может варьироваться в зависимости от объема данных, которые вы хотите хранить).
* Подключение сервера и консоли Pandora FMS к ElasticSearch API (порт по умолчанию 9200/TCP ).
== Установка и настройка ElasticSearch ==
Прежде чем приступить к установке этих компонентов, необходимо установить Java на дистрибутиве CentOS:
yum install java
После установки Java установите ElasticSearch [[https://www.elastic.co/guide/en/elasticsearch/reference/7.6/rpm.html|следуя официальной документации]]; для [[https://www.elastic.co/guide/en/elasticsearch/reference/7.6/deb.html|сред Debian есть свои инструкции]].
Настройка службы:
Параметры сети и, опционально, местоположение данных (и собственных журналов ElasticSearch) должны быть настроены в файле конфигурации, расположенном в ''/etc/elasticsearch/elasticsearch.yml''.
# ---------------------------------- Network -----------------------------------
# Set a custom port for HTTP:
http.port: 9200
# ----------------------------------- Paths ------------------------------------
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/elastic
# Path to log files:
path.logs: /var/log/elastic
Следующие строки также должны быть //декомментированы// и определены:
cluster.name: elkpandora
node.name: ${HOSTNAME}
bootstrap.memory_lock: true
network.host: ["127.0.0.1", “IP"]
**cluster.name**
Это будет имя, присвоенное группе или //кластеру//.
**node.name**
Чтобы назвать узел с помощью системной переменной ''${HOSTNAME}'', он автоматически принимает имя хоста.
**bootstrap.memory_lock**
Это всегда должно быть правдой "true".
**network.host**
IP-адрес сервера.
* В случае работы с одним узлом необходимо также добавить следующую строку:
discovery.type: single-node
* В случае работы с //кластером// нам потребуется заполнить параметр ''discovery.seed_hosts''.
discover.seed_hosts : [["ip:port",|"ip", "ip"]]
Или же:
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
Определите параметры ресурсов, назначенных ElasticSearch, путем настройки параметров, доступных в конфигурационном файле, расположенном по адресу ''/etc/elasticsearch/jvm.options''. Рекомендуется использовать не менее 2 ГБ пространства на XMS.
# Xms represDeents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms2g
-Xmx2g
Распределение ресурсов будет зависеть от предполагаемого использования ElasticSearch, мы рекомендуем следовать [[https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html|официальной документации]].
Также необходимо изменить параметр ''memlock unlimited'' в конфигурационном файле ElasticSearch, расположенном в файле ''/usr/lib/systemd/system/elasticsearch.service'', чтобы добавить следующий параметр:
MAX_LOCKED_MEMORY = unlimited
После завершения необходимо будет выполнить:
systemctl daemon-reload && systemctl restart elasticsearch
Команда для запуска службы следующая:
systemctl start elasticsearch
Если служба не запускается, проверьте журналы, расположенные в ''/var/log/elasticsearch/''
Чтобы проверить установку ElasticSearch, выполните следующую команду в окне терминала:
curl -q http://{IP}:9200/
Вы получите ответ, аналогичный следующему:
{
"name" : "3743885b95f9",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "7oJV9hXqRwOIZVPBRbWIYw",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Рекомендуется посетить ссылку на best practices ElasticSearch для производственных сред:
[[https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod|https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod]]
== Pandora FMS Syslog Server ==
{{:wiki:icono-modulo-enterprise.png |Версия Enterprise.}}Версия NG 717 или выше.
Этот компонент позволяет Pandora FMS анализировать [[https://ru.wikipedia.org/wiki/Syslog|syslog]] машины, на которой он расположен, анализируя его содержимое и сохраняя ссылки в соответствующем сервере ElasticSearch.
Основным преимуществом сервера Syslog является то, что он дополняет унификацию //журналов//.. Поддерживая функции экспорта Syslog Server в среды Linux® и Unix®, Syslog Server позволяет выполнять запросы //журналов// независимо от источника, осуществляя поиск в одной общей точке (средство просмотра //журналов// консоли Pandora FMS).
Установка Syslog Server должна быть выполнена как на клиенте, так и на сервере, а для ее выполнения необходимо запустить следующую команду:
yum install rsyslog
После установки **syslog** на используемое оборудование, нужно зайти в конфигурационный файл ''/etc/rsyslog.conf'', чтобы включить //input// **TCP** и **UDP**.
(...)
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
(...)
После выполнения этой настройки необходимо будет остановить и перезапустить службу **rsyslog**. Как только служба станет доступной, проверьте, что порт ''514'' доступен с помощью:
netstat -ltnp
Для получения дополнительной информации о настройке rsyslog, [[https://www.rsyslog.com/|посетите официальный сайт]].
Настройте **Клиента** так, чтобы он мог отправлять //журналы// на сервер Syslog Server. Для этого еще раз зайдите в файл конфигурации **rsyslog** ''/etc/rsyslog.conf'' **//в клиенте//** . Найдите и включите строку, которая позволяет настроить удаленный //хост//.
.* @@remote-host:514
При отправке //журналов// создается агент-контейнер с именем клиента, поэтому рекомендуется создавать агентов с “**alias as name**”, чтобы он совпадал с //hostname// клиента, что позволит избежать дублирования агентов.
Чтобы активировать эту функцию в Pandora FMS Server, включите в файл ''pandora_server.conf'' следующее содержание:
# Enable (1) or disable (0) the Pandora FMS Syslog Server
# (PANDORA FMS ENTERPRISE ONLY).
syslogserver 1
# Full path to syslog's output file (PANDORA FMS ENTERPRISE ONLY).
syslog_file /var/log/messages
# Number of threads for the Syslog Server
# (PANDORA FMS ENTERPRISE ONLY).
syslog_threads 2
# Maximum number of lines queued by the Syslog Server's
# producer on each run (PANDORA FMS ENTERPRISE ONLY).
syslog_max 65535
**syslogserver**
//Булево//, включает (1) или выключает (0) локальный механизм разбора SYSLOG.
**syslog_file**
Расположение файла, в который доставляются записи SYSLOG.
**syslog_threads**
Максимальное количество потоков, которые будут использоваться в системе производитель/потребитель Syslog Server.
**syslog_max**
Это максимальное окно обработки для сервера Syslog; будет максимальным количеством записей SYSLOG, которые будут обрабатываться в каждой итерации.
Вам понадобится включенный и настроенный сервер ElasticSearch; ознакомьтесь с предыдущими пунктами, чтобы узнать, как это сделать.
Помните, что вам необходимо изменить конфигурацию вашего устройства таким образом, чтобы //журналы// отправлялись на сервер Pandora FMS.
== Рекомендации ==
**Вращение журнала для ElasticSearch**
**Важно**: Чтобы предотвратить бесконтрольный рост журналов ElasticSearch, необходимо создать новую запись для демона или //daemon// вращения //журналов// в ''/etc/logrotate.d''>
cat> /etc/logrotate.d/elastic <
**Очистка индексов**
Список индексов и занимаемый ими размер можно посмотреть в любое время, запустив **cURL** запрос к серверу ElasticSearch:
curl -q http://9200/_cat/indices?
Где ''elastic'' означает IP-адрес сервера.
Чтобы удалить любой из этих индексов, вы можете выполнить команду ''DELETE''>
curl -q -XDELETE http://9200/{index-name}
Где ''{index-name}'' - выходной файл вышеуказанной команды. Эта операция освобождает место, используемое удаленным индексом.
=== Конфигурация консоли ===
Чтобы активировать систему отображения //журналов//, необходимо активировать следующую конфигурацию:
{{ :wiki:logs1.jpg?800 |logs1.jpg}}
Затем вы можете настроить поведение средства просмотра журнала в **Configuration** > **Log Collector**:
{{ :wiki:logs2.jpg?800 |logs2.jpg}}
* IP-адрес или FQDN и порт сервера, на котором размещена служба ElasticSearch
* **Number of logs viewed**: Для ускорения отклика консоли была добавлена динамическая загрузка записей. Пользователь должен прокрутить страницу до самого низа, что заставит загрузить следующий доступный набор записей, сгруппированных в определенном количестве;.
* **Days to purge old information**: Чтобы избежать перегрузки размера системы, вы можете определить максимальное количество дней, в течение которых будет храниться информация //журналов//; начиная с этой даты, она будет автоматически удаляться в процессе очистки Pandora FMS.
=== ElasticSearch Interface ===
{{:wiki:icono-modulo-enterprise.png |Версия Enterprise.}}Версия NG 747 или выше.
{{ :wiki:es_interface.png?800 }}
В конфигурации по умолчанию, Pandora FMS генерирует один индекс в день, который ElasticSearch должен фрагментировать и распределить для будущего поиска.
Чтобы эти поиски были оптимальными, по умолчанию ElasticSearch генерирует индекс для каждого из них, поэтому **мы должны настроить в нашей среде столько же ** поисков**, сколько узлов ElasticSearch установлено**.
Эти **search** и реплики **настраиваются при создании индекса**, который Pandora FMS генерирует автоматически, поэтому для изменения этой конфигурации мы должны использовать шаблоны или //templates//.
== Шаблоны Elasticsearch ==
Шаблоны или //templates// - это конфигурации, которые применяются только во время создания индекса. Изменение //template// не повлияет на уже существующие индексы.
Для создания **базового //template//** достаточно определить следующие поля:
{
"index_patterns": ["pandorafms*"],
"settings": {
"number_of_shards": 1,
"auto_expand_replicas" : "0-1",
"number_of_replicas" : "0"
},
"mappings" : {
"properties" : {
"agent_id" : {
"type" : "long",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"group_id" : {
"type" : "long",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"group_name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"logcontent" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"source_id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"suid" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"utimestamp" : {
"type" : "long"
}
}
}
}
}
Если вам нужно **определить многоузловой //template//** , вам следует учесть следующую информацию:
При настройке //шаблона// (формат JSON), **вам нужно настроить столько //search//, сколько узлов у вас есть**, однако для правильной настройки реплик **вы должны вычесть 1 из количества узлов среды**.
Например, в среде Pandora FMS с ElasticSearch с 3 настроенными узлами, когда вы изменяете поля ''number_of_search'' и ''number_of_replicas'', это должно выглядеть следующим образом:
{
"index_patterns": ["pandorafms*"],
"settings": {
"number_of_shards": 3,
"auto_expand_replicas" : "0-1",
"number_of_replicas" : "2"
},
Вы можете выполнять эти операции через интерфейс ElasticSearch в Pandora FMS, используя собственные команды ElasticSearch.
* **PUT _template/**: позволяет ввести данные нашего //шаблона//.
* **GET _template/>**: позволяет отобразить //template//.
{{ :wiki:getinterface.png?750 }}
==== Миграция в систему ElasticSearch ====
После настройки новой системы хранения //журналов// вы можете перенести все данные, ранее хранившиеся в Pandora FMS, распределенным образом в каталогах в новую систему.
Для этого необходимо выполнить следующий //скрипт//, который находится в ''/usr/share/pandora_server/util/''>
# Migrate Log Data <7.0NG 712 to>= 7.0NG 712
/usr/share/pandora_server/util/pandora_migrate_logs.pl /etc/pandora/pandora_server.conf
==== Визуализация и поиск ====
В инструменте сбора //журналов// интерес представляют две основные характеристики: возможность поиска информации - фильтрация по дате, источникам данных и/или ключевым словам и т.д. - и возможность визуализации этой информации в виде графиков происшествий за единицу времени. В этом примере мы ищем все сообщения //журнала// из всех источников за последний час; обратите внимание на **Search**, **Start date** и **End date**:
{{ :wiki:logsvistanew.png?700 |Haga clic para ampliar}}//Просмотр происшествий во времени//
Самым важным - и полезным - полем будет строка поиска, которую нужно ввести в текстовое поле **Search** в сочетании с тремя доступными типами поиска (**Search mode**).
**Exact match**
Буквальный строковый поиск, //log// **содержит** точное совпадение.
{{ :wiki:logsvistanew2.png?700 |Haga clic para ampliar}}
**All words**
Поиск, **содержащий //все//** указанные слова, независимо от порядка в одной и той же строке //лога// (обратите внимание, что каждое слово разделено пробелами).
{{ :wiki:logsvistanew4.png?direct&700 |Haga clic para ampliar }}
**Any word**
Поиск **содержащий //любое//** из указанных слов, независимо от порядка.
{{ :wiki:logsvistanew5.png?direct&700 |Haga clic para ampliar }}
Если мы отметим опцию просмотра контекста отфильтрованного содержимого, мы получим обзор ситуации с информацией из других строк //журналов//, связанных с нашим поиском:
{{ :wiki:logsvistanew3.png?700 |Haga clic para ampliar}}
=== Расширенные визуализация и поиск: ===
{{:wiki:icono-modulo-enterprise.png |Версия Enterprise.}}Версия NG 727 или выше.
С помощью этой функции вы можете графически отображать записи //журнала//, сортируя информацию на основе **моделей захвата данных**.
Эти модели захвата данных в основном представляют собой регулярные выражения и идентификаторы, которые позволяют разобрать источник данных и отобразить его в виде графика.
Для доступа к расширенным опциям нажмите на **Advanced options**. Появится форма, в которой можно выбрать тип просмотра результатов:
* Показать записи //журнала// (простой текст).
* Показать график //журнала//.
{{ :wiki:graph_log.png?700 }}
В опции //показать график журнала// мы можем выбрать модель захвата.
Модель по умолчанию, Apache log model, предлагает возможность обработки или разбора журналов Apache в стандартном формате ([[https://httpd.apache.org/docs/2.4/en/logs.html#access-log|access_log]]), позволяя извлекать сравнительные графики времени отклика, сгруппированные по посещенным страницам и коду ответа:
{{ :wiki:graph_log2.png?700 }}
Вы можете либо нажать кнопку редактирования {{:wiki:edit_icon.png}}, либо кнопку создания {{:wiki:new_icon.png}}, чтобы создать новую модель захвата.
{{ :wiki:graph_log3.png?600 }}
**Capture regexp**
Регулярное выражение для захвата данных, каждое извлекаемое поле идентифицируется подвыражением в скобках //(выражение для захвата)//.
**Fields**
Поля в том порядке, в котором мы зафиксировали их с помощью регулярного выражения. Результаты будут сгруппированы по конкатенации ключевых полей, то есть тех, названия которых не заключены в символы подчеркивания:
key, _value_
key1,key2,_value_
key1,_value_,key2
//Примечание:// Если мы не укажем поле значений, будет автоматически подсчитываться количество вхождений, соответствующих регулярному выражению.
//Примечание 2:// Если мы указываем столбец //value//, мы можем выбрать между представлением кумулятивного значения (поведение по умолчанию) или установлением флажка для представления среднего значения.
//Пример//
Извлечение записей из //журнала// со следующим форматом:
Sep 19 12:05:01 nova systemd: Starting Session 6132 of user root.
Sep 19 12:05:01 nova systemd: Starting Session 6131 of user root.
Подсчет количества раз, когда они входили в систему, сгруппированных по пользователям:
Регулярное выражение
Starting Session \d+ of user (.*?)\.
Поля:
username
Эта модель захвата возвращает количество входов в систему для каждого пользователя за выбранный нами промежуток времени.
{{ :wiki:graph_log4.png?600 }}
==== Конфигурация Агентов ====
Сбор //журналов// осуществляется с помощью агентов, как в агенте для Microsoft Windows®, так и в агентах Unix® (Linux®, MacOsX®, Solaris®, HPUX®, AIX®, BSD® и т.д.). В случае агентов Windows информацию также можно получить из средства просмотра событий операционной системы, используя те же фильтры, что и в модуле мониторинга средства просмотра событий.
Давайте рассмотрим два примера захвата информации //журналов//, на Windows и Unix:
=== Windows ===
Начиная с версии 750, это действие можно выполнить через [[:ru:documentation:03_monitoring:02_operations#управление_плагинами_программного_агента_из_консоли|плагины агента,]] активировав опцию //Advanced//.
Могут выполняться выполнения типа, показанного ниже:
**Модуль logchannel**
module_begin
module_name MyEvent
module_type log
module_logchannel
module_source
module_eventtype
module_eventcode
module_pattern
module_description
module_end
**Модуль logevent**
module_begin
module_name Eventlog_System
module_type log
module_logevent
module_source System
module_end
**Модуль regexp**
module_begin
module_name PandoraAgent_log
module_type log
module_regexp <%PROGRAMFILES%>\pandora_agent\pandora_agent.log
module_description This module will return all lines from the specified logfile
module_pattern .*
module_end
Дополнительную информацию об описании модулей типа журнала можно найти в следующем разделе, касающемся [[:ru:documentation:02_installation:05_configuration_agents#конкретные_директивы_по_получению_информации|Специфических директив]].
module_type log
Определяя этот тип тега, ''module_type log'', вы указываете, что он **не** сохраняется в базе данных, а отправляется в коллектор //log//. Любой модуль с данными этого типа должен быть отправлен в коллектор, если он включен: в противном случае информация будет отброшена.
**Примечание**: Этот новый синтаксис действителен для агента версии 5.0 или выше, //не забудьте обновить// версию вашего **Enterprise**.
=== Системы Unix ===
В агенте версии 5.0 или выше можно использовать следующий синтаксис.
module_plugin grep_log_module /var/log/messages Syslog \.\*
Подобно плагину //разбора журналов// (**grep_log**), //плагин// **grep_log_module** отправляет обработанную информацию //журнала// в Log Collector с именем "Syslog" в качестве источника. Использует регулярное выражение ''\.\*'' (в этом случае "//все//") в качестве шаблона при выборе того, какие строки отправлять, а какие нет.
==== Log Source в Виде Агентов ====
Начиная с версии 749 Pandora FMS, в Виде Агента добавлено поле **Log sources status**, в котором отображается дата последнего обновления //журналов// этим агентом. Нажатие на значок лупы **Review** перенаправляет к просмотру **Log Viewer**, отфильтрованному по данному //журналу//.
{{ :wiki:agent_view_log.png?direct&800 |Haga clic para ampliar}}
[[:ru:documentation:start|Вернуться в оглавление Документации Pandora FMS]]