рд╣рд╛рдореА ELK рд░ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХрд╛ рд╕рд╛рдереА рд╣реМрдВред рднрд╛рдЧ 2

рд╣рд╛рдореА ELK рд░ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХрд╛ рд╕рд╛рдереА рд╣реМрдВред рднрд╛рдЧ 2

рдо рдХрд╕рд░реА рд╕рд╛рдереАрд╣рд░реВ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд░ ELK рдмрдирд╛рдЙрдиреЗ рдмрд╛рд░реЗ рдореЗрд░реЛ рдХрдерд╛ рдЬрд╛рд░реА рд░рд╛рдЦреНрдЫреБ (рд╕реБрд░реБрд╡рд╛рдд рдпрд╣рд╛рдБ)ред рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдореНрдЭрд╛рдЙрди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рд╕рдВрдпреЛрдЬрди рдмрд┐рдирд╛ рдХреБрдиреИ рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдзреЗрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд▓рдЧрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд╕рдХреНрд╖рдо рдЫред рдпрд╕ рдкрдЯрдХ рд╣рд╛рдореА Logstash рд░ Kibana рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрд╕рдБрдЧ рдПрдХреНрд╕рдЪреЗрдиреНрдЬ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВред

ELK рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕рд▓рд╛рдИ рдмреМрджреНрдзрд┐рдХ рд░реВрдкрдорд╛ рд▓рдЧрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд░ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрдорд╛ рдкреНрд▓реЗрд╕рдореЗрдиреНрдЯрдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдХрд┐рдмрд╛рдирд╛рдорд╛ рд╡рд┐рднрд┐рдиреНрди рджреГрд╢реНрдпрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫред

рд╕реЗрдЯрд┐рдЩ

рджреБрдИ рдЪрд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢:

  • OpenJDK рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИред
  • Logstash рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИред

OpenJDK рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

OpenJDK рдкреНрдпрд╛рдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░рд┐рдиреБрдкрд░реНрдЫред рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЬрд╛рдиреЗ рдмрд╛рдЯреЛ рд╡рд┐рдиреНрдбреЛрдЬ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордХреЛ $env:Path рд░ $env:JAVA_HOME рдЪрд░рд╣рд░реВрдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рд╣реБрдиреБрдкрд░реНрдЫ:

рд╣рд╛рдореА ELK рд░ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХрд╛ рд╕рд╛рдереА рд╣реМрдВред рднрд╛рдЧ 2

рд╣рд╛рдореА ELK рд░ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХрд╛ рд╕рд╛рдереА рд╣реМрдВред рднрд╛рдЧ 2

рдЬрд╛рднрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдБрдЪ рдЧрд░реМрдВ:

PS C:> java -version
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)

Logstash рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

Logstash рд╡рд┐рддрд░рдг рд╕рдВрдЧ рдЕрднрд┐рд▓реЗрдЦ рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН рдпрд╣рд╛рдБ рджреЗрдЦрд┐ред рдЕрднрд┐рд▓реЗрдЦрд▓рд╛рдИ рдбрд┐рд╕реНрдХрдХреЛ рдореВрд▓рдорд╛ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рд╣реБрдиреБрдкрд░реНрдЫред рдлреЛрд▓реНрдбрд░рдорд╛ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН C:Program Files рдпреЛ рдпрд╕рдХреЛ рд▓рд╛рдпрдХ рдЫреИрди, Logstash рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рд╕реБрд░реБ рдЧрд░реНрди рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреЗрдЫред рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ jvm.options рдЬрд╛рднрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ RAM рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдлрд┐рдХреНрд╕рд╣рд░реВред рдо рд╕рд░реНрднрд░рдХреЛ RAM рдХреЛ рдЖрдзрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреБред рдпрджрд┐ рдпрд╕рдорд╛ рдмреЛрд░реНрдбрдорд╛ 16 GB RAM рдЫ рднрдиреЗ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреБрдЮреНрдЬреАрд╣рд░реВ рд╣реБрдиреН:

-Xms1g
-Xmx1g

рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреБрдкрд░реНрдЫ:

-Xms8g
-Xmx8g

рд╕рд╛рдереИ, рдпреЛ рд▓рд╛рдЗрди рдмрд╛рд╣рд┐рд░ рдЯрд┐рдкреНрдкрдгреА рдЧрд░реНрди рд╕рд▓реНрд▓рд╛рд╣ рджрд┐рдЗрдиреНрдЫ -XX:+UseConcMarkSweepGCред рдпрд╕ рдмрд╛рд░реЗ рдердк рдпрд╣рд╛рдБред рдЕрд░реНрдХреЛ рдЪрд░рдг рднрдиреЗрдХреЛ logstash.conf рдлрд╛рдЗрд▓рдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛ:

input {
 stdin{}
}
 
filter {
}
 
output {
 stdout {
 codec => "rubydebug"
 }
}

рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╛рде, Logstash рд▓реЗ рдХрдиреНрд╕реЛрд▓рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкрдвреНрдЫ, рдпрд╕рд▓рд╛рдИ рдЦрд╛рд▓реА рдлрд┐рд▓реНрдЯрд░ рдорд╛рд░реНрдлрдд рдкрд╛рд╕ рдЧрд░реНрдЫ, рд░ рдХрдиреНрд╕реЛрд▓рдорд╛ рдлрд┐рд░реНрддрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрджрдЫред рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Logstash рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдпрд╕рд▓рд╛рдИ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореЛрдбрдорд╛ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

PS C:...bin> .logstash.bat -f .logstash.conf
...
[2019-12-19T11:15:27,769][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2019-12-19T11:15:27,847][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-12-19T11:15:28,113][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

Logstash рдкреЛрд░реНрдЯ 9600 рдорд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реБрд░реБ рднрдпреЛред

рдЕрдиреНрддрд┐рдо рд╕реНрдерд╛рдкрдирд╛ рдЪрд░рдг: рд╡рд┐рдиреНрдбреЛрдЬ рд╕реЗрд╡рд╛рдХреЛ рд░реВрдкрдорд╛ Logstash рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ NSSM:

PS C:...bin> .nssm.exe install logstash
Service "logstash" installed successfully!

рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛

рд╕реНрд░реЛрдд рд╕рд░реНрднрд░рдмрд╛рдЯ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджрд╛ рд▓рдЧрд╣рд░реВрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдиреНрдЯ рдХреНрдпреБрдЬ рдореЗрдХрд╛рдирд┐рдЬрдорджреНрд╡рд╛рд░рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░рд┐рдиреНрдЫред

рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ

рд▓рдЧ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрд╛ рд▓рд╛рдордХреЛ рд▓реЗрдЖрдЙрдЯ рд╣реЛ: рдЗрдирдкреБрдЯ тЖТ рд▓рд╛рдо тЖТ рдлрд┐рд▓реНрдЯрд░ + рдЖрдЙрдЯрдкреБрдЯред

рдЗрдирдкреБрдЯ рдкреНрд▓рдЧрдЗрдирд▓реЗ рд▓рдЧ рд╕реНрд░реЛрддрдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рдпрд╕рд▓рд╛рдИ рдХрддрд╛рд░рдорд╛ рд▓реЗрдЦреНрдЫ, рд░ рд╕реНрд░реЛрддрдорд╛ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдкрдард╛рдЙрдБрджрдЫред

рд▓рд╛рдордмрд╛рдЯ рд╕рдиреНрджреЗрд╢рд╣рд░реВ Logstash рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдиреНрдЫ, рдлрд┐рд▓реНрдЯрд░ рд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд▓рдЧрдЗрди рдорд╛рд░реНрдлрдд рдкрд╛рд░рд┐рдд рдЧрд░рд┐рдиреНрдЫред рд▓рдЧ рдкрдард╛рдЗрдПрдХреЛ рдЖрдЙрдЯрдкреБрдЯрдмрд╛рдЯ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрд╛, Logstash рд▓реЗ рдХрддрд╛рд░рдмрд╛рдЯ рдкреНрд░рд╢реЛрдзрд┐рдд рд▓рдЧ рд╣рдЯрд╛рдЙрдБрдЫред рдпрджрд┐ Logstash рд░реЛрдХрд┐рдиреНрдЫ рднрдиреЗ, рд╕рдмреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирдЧрд░рд┐рдПрдХрд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд░ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдЫреИрди, рд▓рд╛рдордорд╛ рд░рд╣рдиреНрдЫ, рд░ Logstash рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдкрдЯрдХ рд╕реБрд░реБ рдЧрд░реНрджрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╣рдиреЗрдЫред

рд╕рдорд╛рдпреЛрдЬрди

рдлрд╛рдЗрд▓рдорд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдпреЛрдЬреНрдп C:Logstashconfiglogstash.yml:

  • queue.type: (рд╕рдореНрднрд╛рд╡рд┐рдд рдорд╛рдирд╣рд░реВ - persisted ╨╕ memory (default)).
  • path.queue: (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ C:Logstashqueue рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рд▓рд╛рдо рдлрд╛рдЗрд▓рд╣рд░реВрд╕рдБрдЧ рдлреЛрд▓реНрдбрд░рдорд╛ рдЬрд╛рдиреЗ рдмрд╛рдЯреЛ)ред
  • queue.page_capacity: (рдЕрдзрд┐рдХрддрдо рд▓рд╛рдо рдкреГрд╖реНрда рдЖрдХрд╛рд░, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди 64mb рд╣реЛ)ред
  • queue.drain: (рд╕рддреНрдп/рдЭреВрдЯреЛ - Logstash рдмрдиреНрдж рдЧрд░реНрдиреБ рдЕрдШрд┐ рд▓рд╛рдо рдкреНрд░рд╢реЛрдзрди рд░реЛрдХреНрди рд╕рдХреНрд╖рдо/рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫред рдо рдпрд╕рд▓рд╛рдИ рд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрд┐рди, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рд╕рд░реНрднрд░ рдмрдиреНрджрдХреЛ рдЧрддрд┐рд▓рд╛рдИ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрд╕рд░ рдЧрд░реНрдиреЗрдЫ)ред
  • queue.max_events: (рд▓рд╛рдордорд╛ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд реж рд╣реЛ (рдЕрд╕реАрдорд┐рдд))ред
  • queue.max_bytes: (рдмрд╛рдЗрдЯрдорд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдо рдЖрдХрд╛рд░, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд - 1024mb (1gb))ред

рдпрджрд┐ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ queue.max_events ╨╕ queue.max_bytes, рддреНрдпрд╕рдкрдЫрд┐ рдпреА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдордзреНрдпреЗ рдХреБрдиреИ рдкрдирд┐ рдорд╛рди рдкреБрдЧреЗрдкрдЫрд┐ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд▓рд╛рдордорд╛ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрди рд░реЛрдХрд┐рдиреНрдЫред рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдорд╣рд░реВ рдмрд╛рд░реЗ рдердк рдЬрд╛рдиреНрдиреБрд╣реЛрд╕реН рдпрд╣рд╛рдБ.

logstash.yml рдХреЛ рднрд╛рдЧ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдо рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░:

queue.type: persisted
queue.max_bytes: 10gb

рд╕рдорд╛рдпреЛрдЬрди

Logstash рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рддреАрди рднрд╛рдЧрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН, рдЖрдЧрдорди рд▓рдЧрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ (рдЗрдирдкреБрдЯ рдЦрдгреНрдб), рдкрд╛рд░реНрд╕рд┐рдЩ (рдлрд┐рд▓реНрдЯрд░ рдЦрдгреНрдб) рд░ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ (рдЖрдЙрдЯрдкреБрдЯ рдЦрдгреНрдб) рдорд╛ рдкрдард╛рдЙрдиреЗред рддрд▓ рд╣рд╛рдореА рддреА рдкреНрд░рддреНрдпреЗрдХрд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реНрдиреЗрдЫреМрдВред

рдЖрдЧрдд

рд╣рд╛рдореАрд▓реЗ рдлрд╛рдЗрд▓рдмрд┐рдЯ рдПрдЬреЗрдиреНрдЯрд╣рд░реВрдмрд╛рдЯ рдХрдЪреНрдЪрд╛ рд▓рдЧрд╣рд░реВрд╕рдБрдЧ рдЖрдЧрдорди рд╕реНрдЯреНрд░рд┐рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВред рдпреЛ рдпреЛ рдкреНрд▓рдЧрдЗрди рд╣реЛ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдЗрдирдкреБрдЯ рд╕реЗрдХреНрд╕рдирдорд╛ рд╕рдВрдХреЗрдд рдЧрд░реНрдЫреМрдВ:

input {
  beats {
    port => 5044
  }
}

рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрдЫрд┐, Logstash рд▓реЗ рдкреЛрд░реНрдЯ 5044 рд╕реБрдиреНрди рдерд╛рд▓реНрдЫ, рд░ рд▓рдЧрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрд╛, рдлрд┐рд▓реНрдЯрд░ рдЦрдгреНрдбрдХреЛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрдЫред рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рддрдкрд╛рдИрдБрд▓реЗ SSL рдорд╛ рдлрд╛рдЗрд▓рдмрд┐рдЯрдмрд╛рдЯ рд▓рдЧрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЪреНрдпрд╛рдирд▓рд▓рд╛рдИ рд░реНтАНрдпрд╛рдк рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдмрд┐рдЯреНрд╕ рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк рдкрдвреНрдиреБрд╣реЛрд╕реН рдпрд╣рд╛рдБ.

рдлрд┐рд▓реНрдЯрд░

рдПрдХреНрд╕рдЪреЗрдиреНрдЬрд▓реЗ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рдкреНрд░рд╢реЛрдзрдирдХрд╛ рд▓рд╛рдЧрд┐ рд░реЛрдЪрдХ рд╣реБрдиреЗ рд╕рдмреИ рдкрд╛рда рд▓рдЧрд╣рд░реВ рд▓рдЧ рдлрд╛рдЗрд▓рдорд╛ рдиреИ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрд╕рдБрдЧ csv рдврд╛рдБрдЪрд╛рдорд╛ рд╣реБрдиреНрдЫрдиреНред csv рд░реЗрдХрд░реНрдбрд╣рд░реВ рдкрд╛рд░реНрд╕ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, Logstash рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рддреАрдирд╡рдЯрд╛ рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ: рд╡рд┐рдЪреНрдЫреЗрджрди, csv рд░ grokред рдкрд╣рд┐рд▓реЛ рд╕рдмреИрднрдиреНрджрд╛ рдзреЗрд░реИ рд╣реЛ ╨▒╤Л╤Б╤В╤А╤Л╨╣, рддрд░ рд╕рд░рд▓ рд▓рдЧрд╣рд░реВ рдорд╛рддреНрд░ рдкрд╛рд░реНрд╕рд┐рдЩрдХреЛ рд╕рд╛рде рд╕рд╛рдордирд╛ рдЧрд░реНрджрдЫред
рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрд╕рд▓реЗ рдирд┐рдореНрди рд░реЗрдХрд░реНрдбрд▓рд╛рдИ рджреБрдИ рднрд╛рдЧрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреЗрдЫ (рдлрд┐рд▓реНрдб рднрд┐рддреНрд░ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдордХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рдХрд╛рд░рдг), рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рд▓рдЧ рдЧрд▓рдд рд░реВрдкрдорд╛ рдкрд╛рд░реНрд╕ рд╣реБрдиреЗрдЫ:

тАж,"MDB:GUID1, Mailbox:GUID2, Event:526545791, MessageClass:IPM.Note, CreationTime:2020-05-15T12:01:56.457Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant",тАж

рд▓рдЧрд╣рд░реВ рдкрд╛рд░реНрд╕ рдЧрд░реНрджрд╛ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, IISред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдлрд┐рд▓реНрдЯрд░ рдЦрдгреНрдб рдпрд╕реНрддреЛ рджреЗрдЦрд┐рди рд╕рдХреНрдЫ:

filter {
  if "IIS" in [tags] {
    dissect {
      mapping => {
        "message" => "%{date} %{time} %{s-ip} %{cs-method} %{cs-uri-stem} %{cs-uri-query} %{s-port} %{cs-username} %{c-ip} %{cs(User-Agent)} %{cs(Referer)} %{sc-status} %{sc-substatus} %{sc-win32-status} %{time-taken}"
      }
      remove_field => ["message"]
      add_field => { "application" => "exchange" }
    }
  }
} 

Logstash рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рд╕рд╢рд░реНрдд рдХрдердирд╣рд░реВ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╡рд┐рдЪреНрдЫреЗрдж рдкреНрд▓рдЧрдЗрдирдорд╛ рдлрд╛рдЗрд▓рдмрд┐рдЯ рдЯреНрдпрд╛рдЧрд╕рдБрдЧ рдЯреНрдпрд╛рдЧ рдЧрд░рд┐рдПрдХрд╛ рд▓рдЧрд╣рд░реВ рдорд╛рддреНрд░ рдкрдард╛рдЙрди рд╕рдХреНрдЫреМрдВред IISред рдкреНрд▓рдЧрдЗрди рднрд┐рддреНрд░ рд╣рд╛рдореА рдлрд┐рд▓реНрдб рдорд╛рдирд╣рд░реВ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдирд╛рдорд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫреМрдВ, рдореВрд▓ рдлрд┐рд▓реНрдб рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН message, рдЬрд╕рдорд╛ рд▓рдЧрдмрд╛рдЯ рдПрдЙрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫ, рд░ рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдЕрдиреБрдХреВрд▓рди рдХреНрд╖реЗрддреНрд░ рдердкреНрди рд╕рдХреНрдЫреМрдВ рдЬрд╕рдорд╛, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд▓рдЧрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдирд╛рдо рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рд▓рдЧрд╣рд░реВрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, csv рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ; рдпрд╕рд▓реЗ рдЬрдЯрд┐рд▓ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрд▓рд╛рдИ рд╕рд╣реА рд░реВрдкрдорд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд╕рдХреНрдЫ:

filter {
  if "Tracking" in [tags] {
    csv {
      columns => ["date-time","client-ip","client-hostname","server-ip","server-hostname","source-context","connector-id","source","event-id","internal-message-id","message-id","network-message-id","recipient-address","recipient-status","total-bytes","recipient-count","related-recipient-address","reference","message-subject","sender-address","return-path","message-info","directionality","tenant-id","original-client-ip","original-server-ip","custom-data","transport-traffic-type","log-id","schema-version"]
      remove_field => ["message", "tenant-id", "schema-version"]
      add_field => { "application" => "exchange" }
    }
}

рдкреНрд▓рдЧрдЗрди рднрд┐рддреНрд░ рд╣рд╛рдореА рдлрд┐рд▓реНрдб рдорд╛рдирд╣рд░реВ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдирд╛рдорд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫреМрдВ, рдореВрд▓ рдлрд┐рд▓реНрдб рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН message (рд░ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдкрдирд┐ tenant-id ╨╕ schema-version), рдЬрд╕рдорд╛ рд▓рдЧрдмрд╛рдЯ рдПрдЙрдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫ, рд░ рд╣рд╛рдореА рдЕрдиреБрдХреВрд▓рди рдХреНрд╖реЗрддреНрд░ рдердкреНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рдорд╛, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд▓рдЧрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдирд╛рдо рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдлрд┐рд▓реНрдЯрд░рд┐рдЩ рдЪрд░рдгрдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдБрджрд╛, рд╣рд╛рдореАрд▓реЗ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрдорд╛рдирдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ, рдХрд┐рдмрд╛рдирд╛рдорд╛ рднрд┐рдЬреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЫред рд╣рд╛рдореА рдирд┐рдореНрди рд╣рд░рд╛рдЗрд░рд╣реЗрдХрд╛ рд╣реБрдиреЗрдЫреМрдВ:

  • рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрд▓рд╛рдИ рдкрд╛рдардХреЛ рд░реВрдкрдорд╛ рдорд╛рдиреНрдпрддрд╛ рджрд┐рдЗрдиреЗрдЫ, рдЬрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди рд░реЛрдХреНрдЫред рдЕрд░реНрдерд╛рддреН, рдХреНрд╖реЗрддреНрд░рд╣рд░реВ time-taken IIS рд▓рдЧ, рд╕рд╛рдереИ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ recipient-count ╨╕ total-bites рд▓рдЧ рдЯреНрд░реНрдпрд╛рдХрд┐рдВрдЧред
  • рдорд╛рдирдХ рдХрд╛рдЧрдЬрд╛рдд рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдкрд▓реЗ рд▓рдЧ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдПрдХреЛ рд╕рдордп рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдпреЛ рд╕рд░реНрднрд░ рд╕рд╛рдЗрдбрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рд╕рдордп рд╣реЛрдЗрдиред
  • рдХреНрд╖реЗрддреНрд░ recipient-address рдПрдЙрдЯрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рд╛рдЗрдЯ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗрдЫ, рдЬрд╕рд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкрддреНрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЧрдгрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИрдиред

рд▓рдЧ рдкреНрд░рд╢реЛрдзрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдереЛрд░реИ рдЬрд╛рджреВ рдердкреНрдиреЗ рд╕рдордп рд╣реЛред

рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджреИ

рд╡рд┐рдЪреНрдЫреЗрджрди рдкреНрд▓рдЧрдЗрдирд╕рдБрдЧ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЫ convert_datatype, рдЬреБрди рдкрд╛рда рдХреНрд╖реЗрддреНрд░рд▓рд╛рдИ рдбрд┐рдЬрд┐рдЯрд▓ рдврд╛рдБрдЪрд╛рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдпреЛ рдЬрд╕реНрддреИ:

dissect {
  тАж
  convert_datatype => { "time-taken" => "int" }
  тАж
}

рдпреЛ рдпрд╛рдж рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рдпреЛ рд╡рд┐рдзрд┐ рдорд╛рддреНрд░ рдЙрдкрдпреБрдХреНрдд рдЫ рдпрджрд┐ рдлрд┐рд▓реНрдбрдорд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рд╕реНрдЯреНрд░рд┐рдЩ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫред рд╡рд┐рдХрд▓реНрдкрд▓реЗ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдмрд╛рдЯ рд╢реВрдиреНрдп рдорд╛рдирд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИрди рд░ рдЕрдкрд╡рд╛рдж рдлреНрдпрд╛рдБрдХреНрдЫред

рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рд▓рдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рдлрд┐рд▓реНрдбрд╣рд░реВрдмрд╛рдЯ, рд╕рдорд╛рди рд░реВрдкрд╛рдиреНрддрд░рдг рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ recipient-count ╨╕ total-bites рдЦрд╛рд▓реА рд╣реБрди рд╕рдХреНрдЫред рдпреА рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдпреЛ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рдЫ рдкрд░рд┐рд╡рд░реНрддрди:

mutate {
  convert => [ "total-bytes", "integer" ]
  convert => [ "recipient-count", "integer" ]
}

рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛_рдареЗрдЧрд╛рдирд╛рд▓рд╛рдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдкрдХрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрджреИ

рдпреЛ рд╕рдорд╕реНрдпрд╛ рдкрдирд┐ mutate рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

mutate {
  split => ["recipient_address", ";"]
}

рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИ

рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рд▓рдЧ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рд╕рдорд╕реНрдпрд╛ рдзреЗрд░реИ рд╕рдЬрд┐рд▓реИ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдЧрд░рд┐рдПрдХреЛ рдЫ рдорд┐рддрд┐, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХреНрд╖реЗрддреНрд░рдорд╛ рд▓реЗрдЦреНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ timestamp рдлрд┐рд▓реНрдбрдмрд╛рдЯ рдЖрд╡рд╢реНрдпрдХ рдврд╛рдБрдЪрд╛рдорд╛ рдорд┐рддрд┐ рд░ рд╕рдордп date-time:

date {
  match => [ "date-time", "ISO8601" ]
  timezone => "Europe/Moscow"
  remove_field => [ "date-time" ]
}

IIS рд▓рдЧ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рд╣рд╛рдореАрд▓реЗ рдлрд┐рд▓реНрдб рдбрд╛рдЯрд╛ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ date ╨╕ time рдореНрдпреБрдЯреЗрдЯ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореАрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпреЛ рдЯрд╛рдЗрдо рд╕реНрдЯреНрдпрд╛рдореНрдк рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН timestamp рдорд┐рддрд┐ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ:

mutate { 
  add_field => { "data-time" => "%{date} %{time}" }
  remove_field => [ "date", "time" ]
}
date { 
  match => [ "data-time", "YYYY-MM-dd HH:mm:ss" ]
  timezone => "UTC"
  remove_field => [ "data-time" ]
}

рдЙрддреНрдкрд╛рджрди

рдЖрдЙрдЯрдкреБрдЯ рдЦрдгреНрдб рд▓рдЧ рд░рд┐рд╕реАрднрд░рдорд╛ рдкреНрд░рд╢реЛрдзрд┐рдд рд▓рдЧрд╣рд░реВ рдкрдард╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрдорд╛ рд╕рд┐рдзреИ рдкрдард╛рдЙрдиреЗ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕реЗрд░реНрдЪ, рдЬрд╕рд▓реЗ рдЙрддреНрдкрдиреНрди рдХрд╛рдЧрдЬрд╛рдд рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░реНрднрд░ рдареЗрдЧрд╛рдирд╛ рд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╛рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫ:

output {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

рдЕрдиреНрддрд┐рдо рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди

рдЕрдиреНрддрд┐рдо рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

input {
  beats {
    port => 5044
  }
}
 
filter {
  if "IIS" in [tags] {
    dissect {
      mapping => {
        "message" => "%{date} %{time} %{s-ip} %{cs-method} %{cs-uri-stem} %{cs-uri-query} %{s-port} %{cs-username} %{c-ip} %{cs(User-Agent)} %{cs(Referer)} %{sc-status} %{sc-substatus} %{sc-win32-status} %{time-taken}"
      }
      remove_field => ["message"]
      add_field => { "application" => "exchange" }
      convert_datatype => { "time-taken" => "int" }
    }
    mutate { 
      add_field => { "data-time" => "%{date} %{time}" }
      remove_field => [ "date", "time" ]
    }
    date { 
      match => [ "data-time", "YYYY-MM-dd HH:mm:ss" ]
      timezone => "UTC"
      remove_field => [ "data-time" ]
    }
  }
  if "Tracking" in [tags] {
    csv {
      columns => ["date-time","client-ip","client-hostname","server-ip","server-hostname","source-context","connector-id","source","event-id","internal-message-id","message-id","network-message-id","recipient-address","recipient-status","total-bytes","recipient-count","related-recipient-address","reference","message-subject","sender-address","return-path","message-info","directionality","tenant-id","original-client-ip","original-server-ip","custom-data","transport-traffic-type","log-id","schema-version"]
      remove_field => ["message", "tenant-id", "schema-version"]
      add_field => { "application" => "exchange" }
    }
    mutate {
      convert => [ "total-bytes", "integer" ]
      convert => [ "recipient-count", "integer" ]
      split => ["recipient_address", ";"]
    }
    date {
      match => [ "date-time", "ISO8601" ]
      timezone => "Europe/Moscow"
      remove_field => [ "date-time" ]
    }
  }
}
 
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХрд╣рд░реВ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди