Парсинг поля “message” windows print

Добрый день!
Прошу помочь разобрать лог печати из windows. За ранее извиняюсь, т.к. дуб дубом в grok

[2021-08-19T23:14:41,726][WARN ][logstash.outputs.elasticsearch][main][7a22c627e1accad82d7e582d6ff4b94f3fb25a00d651310816b6db7e5757d6f1] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"win_print-logs-19.08.2021", :routing=>nil}, {"winlog"=>{"channel"=>"Microsoft-Windows-PrintService/Operational", "process"=>{"thread"=>{"id"=>12372}, "pid"=>3692}, "user"=>{"identifier"=>"S-1-5-21-3399346512-758631369-2990822830-15962", "name"=>"i.ivanov", "type"=>"User", "domain"=>"AAA"}, "computer_name"=>"MS-307-2.AAA.RT.LOCAL", "opcode"=>"Операция очереди успешно выполнена", "provider_name"=>"Microsoft-Windows-PrintService", "provider_guid"=>"{747ef6fd-e535-4d16-b510-42c90f6873a1}", "user_data"=>{"Param5"=>"WF-M5690 Series(Сеть) (Копировать 1)", "Param4"=>"\\\\MS-307-2", "Param3"=>"i.ivanov", "Param2"=>"Печать документа", "Param8"=>"1", "Param6"=>"EP065BC7:WF-M5690 SERIES", "Param7"=>"7284", "xml_name"=>"DocumentPrinted", "Param1"=>"169"}, "keywords"=>["Задание печати документа", "Классическое событие очереди"], "api"=>"wineventlog", "record_id"=>3251, "event_id"=>"307", "task"=>"Печать документа"}, "event"=>{"provider"=>"Microsoft-Windows-PrintService", "code"=>"307", "created"=>"2021-08-19T23:14:39.952Z", "kind"=>"event", "action"=>"Печать документа"}, "tags"=>["win_print", "win_print", "beats_input_codec_plain_applied", "_grokparsefailure"], "ecs"=>{"version"=>"1.10.0"}, "host"=>{"os"=>{"kernel"=>"10.0.19041.1052 (WinBuild.160101.0800)", "build"=>"19042.1052", "type"=>"windows", "platform"=>"windows", "version"=>"10.0", "name"=>"Windows 10 Enterprise", "family"=>"windows"}, "id"=>"c3d5f491-5268-4d3d-bc36-8aad2de6cfec", "ip"=>["10.0.82.2"], "name"=>"MS-307-2.AAA.RT.LOCAL", "mac"=>["6c:4b:90:6b:a4:62"], "hostname"=>"MS-307-2", "architecture"=>"x86_64"}, "message"=>"Документ 169, Печать документа, которым владеет i.ivanov на \\\\MS-307-2, был распечатан на WF-M5690 Series(Сеть) (Копировать 1) через порт EP065BC7:WF-M5690 SERIES.  Размер в байтах: 7284. Страниц напечатано: 1. Действий пользователя не требуется.", "@timestamp"=>2021-08-19T23:14:38.248Z, "@version"=>"1", "log"=>{"level"=>"сведения"}, "agent"=>{"id"=>"e54412be-f63c-46e1-bce7-d98a55a25b1f", "type"=>"winlogbeat", "ephemeral_id"=>"2034feeb-a43b-413c-a197-859bcfc247d7", "version"=>"7.14.0", "name"=>"MS-307-2", "hostname"=>"MS-307-2"}}], :response=>{"index"=>{"_index"=>"win_print-logs-19.08.2021", "_type"=>"_doc", "_id"=>"NrqxYHsBTAwmix39-Veb", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse field [host] of type [text] in document with id 'NrqxYHsBTAwmix39-Veb'. Preview of field's value: '{hostname=MS-307-2, os={build=19042.1052, kernel=10.0.19041.1052 (WinBuild.160101.0800), name=Windows 10 Enterprise, type=windows, family=windows, version=10.0, platform=windows}, ip=[10.0.82.2], name=MS-307-2.AAA.RT.LOCAL, id=c3d5f491-5268-4d3d-bc36-8aad2de6cfec, mac=[6c:4b:90:6b:a4:62], architecture=x86_64}'", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Can't get text on a START_OBJECT at 1:1233"}}}}}

Необходима информация, IP, пользователь, имя ПК, домен, название принтера, имя документа, кол-во. страниц.

п.с. лог взят из logstash-plain

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

У меня данные передаются с Winlogbeat, вот кусочек конфига
winlogbeat.event_logs:

  • name: Microsoft-Windows-PrintService/Operational
    ignore_older: 72h
    event_id: 307
    Беру данные из журнала печати, только по событию 307.

Вот лог винды

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="Microsoft-Windows-PrintService" Guid="{747ef6fd-e535-4d16-b510-42c90f6873a1}" /> 
  <EventID>307</EventID> 
  <Version>0</Version> 
  <Level>4</Level> 
  <Task>26</Task> 
  <Opcode>11</Opcode> 
  <Keywords>0x4000000000000840</Keywords> 
  <TimeCreated SystemTime="2021-08-23T05:42:54.4390524Z" /> 
  <EventRecordID>3434</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="3816" ThreadID="1424" /> 
  <Channel>Microsoft-Windows-PrintService/Operational</Channel> 
  <Computer>MS-307-2.AAA.RT.LOCAL</Computer> 
  <Security UserID="S-1-5-21-3399346512-758631369-2990822830-14224" /> 
  </System>
- <UserData>
- <DocumentPrinted xmlns="http://manifests.microsoft.com/win/2005/08/windows/printing/spooler/core/events">
  <Param1>2</Param1> 
  <Param2>Печать документа</Param2> 
  <Param3>i.ivanov</Param3> 
  <Param4>\\MS-307-2</Param4> 
  <Param5>WF-M5690 Series(Сеть) (Копировать 1)</Param5> 
  <Param6>EP065BC7:WF-M5690 SERIES</Param6> 
  <Param7>3686988</Param7> 
  <Param8>1</Param8> 
  </DocumentPrinted>
  </UserData>
  </Event>

Sergey, не надо себя ругать
если Вы и дальше будете продолжать работать с Logstash , etc..
то я бы поставил у себя на компе 2 приложения , Filebeat ( ) и Logstash() и что б последний писал в текстовый файл:
output {
file {
path => "c:\dev\Multi_out.log"
}
#stdout { codec => rubydebug }
}.
есть также grok debug , который мне оч сильно помог,
а с вашим фийлом не видно конфига полностью
где-то ошибка в '"Can't get text on a START_OBJECT at 1:1233"
плюс , кое-что из этого уже есть
Пользователь, "Param3"=>"i.ivanov",
имя ПК, домен,
название принтера, "Param6"=>"EP065BC7:WF-M5690 SERIES",..
а кол-во. страниц надо брать из "message" опять.. ка бы еще один Grok.. ну и т.д

Приветствую. На самом деле, уже чуть разобрался.
Winlogbeat

winlogbeat.event_logs:
  - name: Microsoft-Windows-PrintService/Operational
    ignore_older: 72h
    event_id: 307
tags: ["win_print"]
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
processors:
  - drop_fields:
      fields: [winlog.user_data.Param2, winlog.event_id, agent.type, agent.version, log.level, message, winlog.keywords, event.action, winlog.user_data.Param3, winlog.user_data.Param4, agent.name, ecs.version, event.kind, event.provider, winlog.provider_name, event.code, winlog.api, winlog.channel, agent.ephemeral_id, agent.id, winlog.task, winlog.user_data.Param1, winlog.user_data.Param6, winlog.record_id, winlog.provider_guid, winlog.process.thread.id, winlog.process.pid, winlog.opcode, winlog.user_data.Param7, winlog.user_data.xml_name, winlog.user.identifier, winlog.user.type]
  • drop_fields: - убираю лишнюю информацию до передачи ее в Logstash

Logstash конфиг

input {
  beats {
    port => 5044
    tags => "win_print"
  }
}
filter {
    mutate {
      remove_field => [ "host"]
    }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "win_print-logs-%{+YYYY.MM.dd}"
  }

В ELK получаю:

_id            twYwhnsBxiHTOcNKWi0h
_index      win_print-logs-2021.08.27
_score       - 
_type      _doc
@timestamp     Aug 27, 2021 @ 16:58:37.972
@version    1
agent.hostname     MS-307
event.created    Aug 27, 2021 @ 16:58:39.609
tags    win_print, win_print, beats_input_raw_event, _grokparsefailure
winlog.computer_name      MS-307.AAA.RT.LOCAL
winlog.user_data.Param5    HP Color LaserJet Pro M479 PCL-6 (V4) (сеть)
winlog.user_data.Param8     1
winlog.user.domain    AAA
winlog.user.name    i.ivanov

Вот тут вопрос! Как мне отсеять печать на принтерах PDF?
Я не смог сделать это в Winlogbeat (хотя судя по документации, там можно работать со скриптами). Думаю, можно фильтром в конфиге Logstash, но как?

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.