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

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

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

Если у вас есть желание освоить Linux с нуля, не имея базовых знаний, рекомендую познакомиться с онлайн-курсом Administrator Linux.Basic в OTUS. Курс для новичков, для тех, кто хочет войти в профессию администратора Linux. Подробности по .

Введение

В своей статье я буду считать, что вы установили и настроили 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 сервера. Пишите обо всем в комментариях.

Онлайн курс "DevOps практики и инструменты"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .

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

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

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

24 комментария

  1. Аватар

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

    • Zerox

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

      • Аватар

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

        • Zerox

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

          • Аватар

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

            • Zerox

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

              • Аватар

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

  2. Аватар

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

    • Zerox

      Для кастомных логов 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}" 
             	           }
      }
  3. Аватар

    К сожалению, фактической пользы от подобных графиков нет. Рисуют красиво, но ни о чем.
    Хотелось бы видеть примеры реализации под конкретные задачи.
    Имея контроллер домена, мне как-то не так и важно какое кол-во логов было собрано за N времени. Достаточно бесполезный параметр.
    А вот, что бы придумать что-то реально полезное, надо помучиться и с составлением самих графиков и с logstash.

    • Zerox

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

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

  4. Аватар

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

    • Zerox

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

      • Аватар

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

        • Zerox

          У меня нет готового совета, так как сам не занимался этим. Да и вообще с 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

  5. Аватар

    После настройки в 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

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

  6. Аватар
    Валерий

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

  7. Аватар
    Дмитрий

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

    Хотел добавить дашборд с возможностью отслеживать удаление файлов пользователями. Пользователя получилось найти по полю "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".
      Не подскажете что нужно сделать, чтобы это поле появилось в дашбордах?

      • Zerox

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

        • Аватар
          Дмитрий

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

  8. Аватар
    Александр

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

    • Zerox

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

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

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.