Настраиваем сбор логов Windows Server в ELK Stack

Продолжаю цикл статей по настройке централизованной системы сбора логов ELK Stack. Сегодня расскажу, как собирать логи с Windows Server различных версий в elasticsearch. Данные предложенным способом можно будет собирать не только с серверных систем, но и со всех остальных, где используется журнал windows.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

В своей статье я буду считать, что вы установили и настроили elk stack по моему материалу. Если это не так, то сами подредактируйте представленные конфиги под свои реалии. По большому счету, все самое основное по сбору логов windows серверов уже дано в указанной статье. Как минимум, там рассказано, как начать собирать логи с помощью winlogbeat. Дальше нам нужно их обработать и нарисовать функциональный дашборд для быстрого анализа поступающей информации.

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

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

Сбор windows логов

Приступим к настройке. Устанавливаем последнюю версию winlogbeat на сервер, с которого мы будем отправлять логи в elk stack. Вот конфиг с тестового сервера, по которому пишу статью:

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

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

    else if "winsrv" in [tags] {
        elasticsearch {
            hosts     => "localhost:9200"
            index    => "winsrv-%{+YYYY.MM}"
        }
    }

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

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

Dashboard в Kibana для Windows Server

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

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

Визуализации создаются достаточно просто, плюс они все похожи друг на друга. Вот пример одной из них - разбивка по рабочим станциям:

Визуализация в kibana для Windows Server

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

Dasboard в kibana для Windows Server

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

Сбор и анализ логов Windows Fileserver

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

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

Dashboard в kibana для Windows FileServer

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

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Материал написан исключительно на основании своего видения и небольшого опыта использования elk stack. Нигде не видел статей и мыслей на данную тему, так что буду рад предложениям, замечаниям. Ко всему прочему, я практически не администрирую windows сервера. Пишите обо всем в комментариях.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

35 комментариев

  1. Добрый день, как уже писали ниже, не понятно как выводить file_action. Сделал все как написано и запнулся на этом, а это одно из самых важных. В интернете так-же инфу не нашел, видимо поле кастомное, но в статье о нем не слова.

    • В общем как понял это задается в конфе logstash, но к сожалению тут не дан пример, хотя на скринах все есть и все ок)

      • Я очень давно это настраивал. И сейчас уже ничего не помню.

        • Ну да 18 год статье)

          Нашел у вас в другой статье комментарий, где в логстешь вы в фильтр сделали конфу:

          else if [event_data][AccessMask] == "0x10000" or [event_data][AccessMask] == "0x10080" {
          mutate {
          add_field => { "file_action" => "delete" }
          }
          }
          else if [event_data][AccessMask] == "0x2" or [event_data][AccessMask] == "0x6" {
          mutate {
          add_field => { "file_action" => "write" }
          }
          }
          else if [event_data][AccessMask] == "0x1" {
          mutate {
          add_field => { "file_action" => "read" }
          }
          }

          Применил, но у меня не заработало( Буду дальше думать..

          Еще вопрос , если вспомните - при каждом действии юзера - переход в папку, открытие файла итп в лог сыпятся множество повторных событий. Т.е на одно действие может прилететь 10 событий, хотелось бы их как-то "склеить" я так понимаю это тоже задается в логстеш где-то?

          • Не очень понял, что за логика имеется ввиду под фразой "склеить". Я просто в аудите отключал всё лишнее, чтобы оставались только нужные и значимые действия.

            • Вы отключали настройках папки, про это имеетс ввиду? Я имею ввиду что сама винда при каждом действи генерит около 10 записей в ивентлог зачем-то.

  2. Первый раз работаю с ELK. Установил по вашей инструкции и не понимаю как отобразить веб интерфейс Кибаны как у Вас? У меня по умолчанию при запросе https://ip:5601 открывается веб интерфейс Elastic как в инструкции по установке. Подскажите пожалуйста.

  3. Сергей

    Никак не могу понять, почему то при аудите доступа к файлам, не все поля индексируются.
    То есть в в message
    Access Request Information:
    Accesses: ReadData (or ListDirectory)
    Access Mask: 0x1
    Access Mask - индексируется и находится в поле winlog.event_data.AccessMask
    а сам тип доступа Accesses - нет.
    Есть похожие поля, к примеруwinlog.event_data.AccessList, но там не те значения.
    Вот интересно надо вручную парсить через фильтр все значение message? Или можно отдельно из него как-то выцепить это значение?

  4. Максим

    Добрый день. Подскажите, каким образом вы перехватываете лог событий файлового сервера на Windows? По какому Event_Log'у?

    • Настроен стандартный аудит windows, записи о доступе к файлам попадают в лог Security.

  5. Добрый день, какую версию ставили ELK?
    Производите ли и каким образом экспорт логов из этой системы?

    • Точно не помню, но вроде 6-я. Экспорт данных из ELK не делаю. Да и куда? И зачем? Они в него как раз и стекаются для долгосрочного хранения.

      • чтобы отдать контролирующим органам часть лога, который их интересует

        • Так это не проблема. Делаете запрос в elasticsearch и забираете нужные данные в формате json.

          • ну да, в том и проблема, что нет готового ПО для написания nosql запросов и экспортом в тот же эксель. Думал может у вас уже есть набор инструментов и лайфхаков. Вообще статья про написание и экспорт типовых запросов был бы актуален для многих пользователей. Туда же и работу с куратором можно было засунуть

            • А какое тут может быть готовое ПО, если данные в кластере могут храниться совершенно разные? Это нужно под конкретную задачу и логи свое ПО писать. Я не знаю, тему не изучал, но мне кажется, это не сильно сложно загнать json в таблицу exel.

              • Ну базы тоже все разные, однако под каждую есть ПО облегчающее жизнь. для mysql Heidi sql, для Оракла sql navigator или девелопер. Их десятки. А вот для nosql...
                Тут явно у них недочет. С данными работать тяжело. Складывается ощущение, что ELK для не критичных данных. Уж не знаю стоит ли логи считать таковыми.

  6. А как настроить агента на лог чужой программы ? Есть допустим C\Program Files\Programma\logs\log_1.log log_2...log и т.д.

    • Для кастомных логов winlogbeat не подходит. Он именно из виндового журнала данные забирает. Для любых других логов надо ставить Filebeat. Он есть под windows в том числе. Конфиг примерно такой будет:

      # Input from Crystal Logs
      
      input {
           file {
                 type => "Crystal"
                 path => "C:/Logs/Crystal*.log"
                }
      }
      
      # Transformation Section to add extra Fields to Crystal log events
      
      filter {
      
        if [type] == "Crystal" {
             mutate {
                add_field => { 
             		           "env" => "qa"
             		           "region" => "UK"
                             }
                      }
                }
      }
      
      # Output to Elastic Search section
      
      output {
          elasticsearch  {
                      hosts => "xxx.xxx.xxx.xxx"
                      index => "logstash-crystal-%{+YYYY.MM.DD}" 
             	           }
      }
  7. К сожалению, фактической пользы от подобных графиков нет. Рисуют красиво, но ни о чем.
    Хотелось бы видеть примеры реализации под конкретные задачи.
    Имея контроллер домена, мне как-то не так и важно какое кол-во логов было собрано за N времени. Достаточно бесполезный параметр.
    А вот, что бы придумать что-то реально полезное, надо помучиться и с составлением самих графиков и с logstash.

    • Почему это нет? Очень даже есть. Я постоянно пользуюсь. Сортировка, выборка и чтение логов возможны прямо из Кибаны. Это удобно. Пример, сыпет какой-то комп ошибками. Я это сразу вижу на графике и делаю выборку по нему. Сразу вижу все его ошибки.

      То же самое с файловыми серверами. Сразу видно, какой юзер или комп больше всего дергает файловые сервера. Чаще всего там какие-то проблемы.

  8. день добрый!
    хотелось бы уточнить, можно ли сделать так, чтобы логи собирались со всего домена(серверов и пк), на сервер с установленным ELK Stack?

    • Можно. Статья же как раз про это. Возьмите и повторите это все на всем домене. Можно автоматизировать.

      • да я все раскатал уже, на сервере, win2012, вот только логи почему у меня только с этого(накатанного) сервака снимаются.. не могли бы подсказать как "Возьмите и повторите это все на всем домене" это сделать..честно сказать я только начал админством заниматься, а тут сразу повесили на меня это задание, ничего не объяснив и не подсказав. заранее Спасибо!

        • У меня нет готового совета, так как сам не занимался этим. Да и вообще с AD давно не работаю. Я просто знаю, что через AD можно автоматизировать все, что угодно.

        • Артур! Скорее всего вы выбрали не тот event_logs в конфиге winlogbeats.
          Для начала откройте логи на винсерве и посмотрите какие логи вас интересуют.
          Затем, откройте powershell и выполните:
          Get-EventLog * и найдите интересующий вас лог. Его и впишите в конфиг винлогбита

          Так же, есть вероятность, что вас попросили реализовать сбор логов в ELK через windows сервер на который падают логи с контроллера домена. В таком случае, у вас логи должны храниться в разделе ForwardedEvents. Посмотрите логи там, есть ли они.

          Подробнее вот тут https://www.elastic.co/guide/en/beats/winlogbeat/current/configuration-winlogbeat-options.html#configuration-winlogbeat-options-event_logs-name

  9. После настройки в ELK в поле Messedge пишет такое
    \u0010\u007F\x88\xA7Q\x8C\xD1\xC9+\xEC/\u0012\x8C\xCE\u0016\xE1\x938\x9A\u00063<&\u001E\u0018Q?\x85\xA2\u0010\u001E0\r\x89\xE7\e\xFB1\x9E\u0004\t~u\u0003ﵶ\xFD蚘\xA92\xB1U\u0002 0\u001C\u001C\u0010\xB9;\xB0@\xDB\u001A\x9AL\xCDc\xFB\xBB-\xEB[~ղZ\x8F*\t\xE9ڮc\xC8\xC4\xE9V\u001F\x8F\xBC\xD9\f\xCDoC\u001F\xCD&\xDE\xCD\u0017\x97A8A\xD3(F\xC7ѵ\u0017\x84\x8F\xBCk\xFC@\u0000\xC7\u001E\x82W\u0005\x90\xDFy\xAF\u00171\xB6\xE1\xEF!\xB5\xE2\xA4iD\u0015\u0002\u001D\u0089.\xBC\xFD\xA0̉\xC3c\xC8Pd\xB8\xEB)\u0005_\u0005ݔܰ\xBBK\xB2zzi!0\bS\u0000\t\u0014+\u0000\xF09 ac5)\u0

    severity_label Emergency
    ttags winserv, _grokparsefailure_sysloginput, _elasticsearch_lookup_failure

    Что может быть ?

  10. Валерий

    Добрый день
    Подскажите, после настройки в elasticsearch нету поля file_action, Вы предпринимали какие-то дополнительные действия?
    winlogbeat 6.8.1
    Cпасибо

  11. Дмитрий

    Добрый день.
    Расскажите пожалуйста подробнее про "Список доступа к файлам (формируется из сохраненного фильтра поиска)"

    Хотел добавить дашборд с возможностью отслеживать удаление файлов пользователями. Пользователя получилось найти по полю "event_data.SubjectUserName.keyword", а вот событие удаления или хотя бы "event_data.ObjectName" найти не получилось, похоже что в версии 6.6 их нет.

    В логе Windows это событие выглядит вот так:
    Subject:
    Security ID: TEST\Ivanova_EA
    Account Name: Ivanova_EA
    Account Domain: TEST
    Logon ID: 0x519E01293

    Object:
    Object Server: Security
    Object Type: File
    Object Name: E:\Fileshare\File.do

    Access Request Information:
    Accesses: DELETE

    • Дмитрий

      Странно, но эти поля есть в самом индексе с пометкой "No cached mapping for this field. Refresh field list from the management > Index Patterns page".
      Не подскажете что нужно сделать, чтобы это поле появилось в дашбордах?

      • Так тут же написано все. Надо идти в раздел Management > Index Patterns. Там выбрать нужный индекс и в нем нажать кнопку Refresh field list.

        • Дмитрий

          Мда, во как протупил. Да, после одного нажатия все поля проиндексировались и теперь их можно указывать при создании дашборда. Спасибо!

  12. Александр

    а можете сбросить визуализации и дашбордики для импорта?

    • Да их править для импорта дольше, чем самому сделать. Они же все простые, по скринам видно, как их сделать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar