Наконец получилось реализовать подсчет копий на основе ELK, с графиками и корректными данными.
Дано: Принтсервер на windows server, зоопарк принтеров (zebra, xerox, hp, tlc, kyocera)
Задача: Считать копии по всем принтерам, с функцией фильтрации по параметрам (принтеры, время, пользователи, с какого ПК)
Реализация: Реализовать решили используя следующие технологии:
Elasticsearch - механизм индексирования и хранения логов, а также полнотекстового поиска по ней.
Kibana - визуальная часть системы Elasticsearch
Logstash - фильтрация и модификация поступаемых логов в Elasticsearch
winlogbeat - сбор логов по определенным правилам с windows систем.
Т.е. простыми словами, по порядку:
Ставим winlogbeat который собирает логи и передает их в Logstash который их фильтрует и модифицирует, а затем отправляет в Elasticsearch, а через интерфейс Kibana мы можем увидеть результат работы всей этой связки.
Elasticsearch - механизм индексирования и хранения логов, а также полнотекстового поиска по ней.
Kibana - визуальная часть системы Elasticsearch
Logstash - фильтрация и модификация поступаемых логов в Elasticsearch
winlogbeat - сбор логов по определенным правилам с windows систем.
Т.е. простыми словами, по порядку:
Ставим winlogbeat который собирает логи и передает их в Logstash который их фильтрует и модифицирует, а затем отправляет в Elasticsearch, а через интерфейс Kibana мы можем увидеть результат работы всей этой связки.
Решение: Поделим его на этапы
I) Включение ведения логов на принтсервере
II) Настройка winlogbeat на принтсервере для передачи данных в logstash
III) Настройка на другом сервере logstash+elasticserch+Kibana
IV) Настройка Kibana и elasticserch для формирования нужных данных.
V) Создаем нужные графики.
I. Включение ведения логов на принтсервере
Включите и настройте логирование событий заданий печати на сервере печати:
- start Devices and Printers > (highlight any printer) > Print server properties > Advanced
- check "Show informational notifications for local printers"
- check "Show informational notifications for network printers"
- OK
- start Event Viewer > Applications and Services Logs > Microsoft > Windows > PrintService
- right-click Operational > Enable Log
- right-click Operational > Properties > Maximum log size (KB): 65536 (was 1028 KB by default)
- OK
II. Настройка winlogbeat на принтсервере для передачи данных в logstash
Поставим на сервер, где собираются все эти логи, утилиту winlogbeat
Устанавливаем его сразу как службу. Открываем конфиг C:\ProgramFiles\Winlogbeat\winlogbeat.yml и прописываем следующее
Устанавливаем его сразу как службу. Открываем конфиг C:\ProgramFiles\Winlogbeat\winlogbeat.yml и прописываем следующее
winlogbeat.event_logs: - name: Microsoft-Windows-PrintService/Operational event_id: 307 #перечисляем ID event которые буем собирать tags: ["log-print-01"] #указываем тэг с которым логи будут отправляться в logstash output.logstash: hosts: ["10.1.1.1:5044"] #адрес сервера logstash logging.level: info logging.to_files: true logging.files: path: C:/Program Files/Winlogbeat/logs #указываем, так же хранить логи в файлах локально. name: printlogbeat keepfiles: 7 xpack.monitoring: enabled: true elasticsearch: hosts: ["http://10.1.1.1:9200"]
Блок xpack.monitoring: необязателен.
Перезапускаем службу.
Советую так же запустить winlogbeat в командной строке, что бы увидеть вывод, корректно ли отрабатывает сбор и пересылка логов.
Советую так же запустить winlogbeat в командной строке, что бы увидеть вывод, корректно ли отрабатывает сбор и пересылка логов.
III. Настройка на другом сервере logstash+elasticserch+Kibana
Теперь, поднимаем виртуалку на линуксе, я предпочитаю дебиан и ставим этот набор. Ставится он из репозиториев, стандартно и без каких-то проблем. Приводить подробности их установки не буду. Официальная документация подробно и хорошо описывает этот этап. Или можете воспользоваться хорошей инструкцией отсюда
Скажу лишь, то что после установки, у вас должна работать kibana из браузера по адресу http://serverIP:5601/
После того как установили
Открываем /etc/logstash/conf.d/input.conf
Итак. Мы настроили logstash, kibana у нас уже поднята, elastic тоже. Пришло время смотреть в веб морду кибаныinput { beats { port => 5044 } }
Открываем /etc/logstash/conf.d/output.conf
output {
if "log-print-01" in [tags] { # тэг который прописывали в winlogbeat
elasticsearch {
hosts => "localhost:9200" #адрес сервера Elasticsearch
index => "log-print-01" # индекс под которым будут писаться логи
}
}
else { #если тэга нет, все остальные логи кидать в индекс unknown_messages
elasticsearch {
hosts => "localhost:9200"
index => "unknown_messages"
}
}
}
Открываем /etc/logstash/conf.d/filter.conf
filter {
mutate {
copy => {"[winlog][user_data][Param5]" => "Printername"} # переносим Param5 в новый параметр
copy => {"[winlog][user_data][Param3]" => "username"}
copy => {"[winlog][user_data][Param4]" => "Hostname"}
copy => {"[winlog][user_data][Param8]" => "pages"}
convert => ["[winlog][user_data][Param8]", "integer"] #меняем тип значения на числовой.
}
}
Обращаю внимание, что очень важно, что бы convert отрабатывал. По умолчанию, все виндузовые логи падают в эластик в виде текстовой строки. Проводить математические операции с тестовой строкой, конечно невозможно. Позже мы с вами проверим отработку этого параметра в кибане.
Так же, обращаю внимание на то, что мы взяли параметр [winlog][user_data][Param8] где написано кол-во напечатанных копий и скопировали его значение в новый параметр, назвав его pages. Но нам еще нужно сконвертировать его в числовой формат. Так вот, конвертировать нужно [winlog][user_data][Param8], а не pages.
В конце перезагружаем logstash # systemctl restart logstash
что бы применить внесенные изменения в конфигах. Давайте проверим что logstash работает.
root@elk-msk-01:/home/user# systemctl status logstash ● logstash.service - logstash Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-07-21 14:20:14 MSK; 21h ago Main PID: 161382 (java) Tasks: 42 (limit: 19070) Memory: 715.8M CGroup: /system.slice/logstash.service └─161382 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -Djruby.jit.th
Все ок. Давайте так же проверим лог в реальном времени. logstash работает таким образом, что при некорректной конфигурации он постоянно перезагружается и по команде systemctl status logstash не всегда можно понять что что-то не так
Запускаем в ком.строке tail -f /var/log/logstash/logstash-plain.log и наблюдаем, сервис не должен перезапускаться.
IV. Настройка Kibana и elasticserch для формирования нужных данных.
открываем http://serverIP:5601/
Идём по пути Management - Index Patterns. Нажимаем кнопку Create index pattern выбираем наш log-print-01 и добавляем.
Проваливаемся внутрь log-print-01 и ищем pages - то что мы в конфиге logstash указывали как хранение в численном формате. В столбце type должно быть написано number.
Если там написано string, значит logstash не перевел значение в нужный нам вид. Возвращаемся к редактированию /etc/logstash/conf.d/filter.conf и устраняем ошибки.
Если у вас так все и произошло и значение не в том формате, после устранения проблемы в кибане нужно удалить весь индекс, что бы избежать конфликтов. Делаем это тут:
V. Создаем нужные графики
Идем - Visyalizations - Create Visyalization -Metric
Создаем еще одну - Controls. Это фильтры с выпадающими списками В ней я выбрал фильтровать по имени принтеру, имени пк и пользователю Не забывайте выбрать правильный индекс
Создаем еще одну визуализацию lens
По X-axis выставляем @timestamp по Y-axis - Sum of pages
Финал - идем на вкладку Dashboard, создаем новый и запихиваем все визуализации созданные ранее. В итоге должно получиться что-то типа такого.
Сбор статистики настроен, графики построены - вы великолепны.
Комментариев нет:
Отправить комментарий