рд╣рдо рдИрдПрд▓рдХреЗ рдФрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдорд┐рддреНрд░ рд╣реИрдВред рднрд╛рдЧ 2

рд╣рдо рдИрдПрд▓рдХреЗ рдФрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдорд┐рддреНрд░ рд╣реИрдВред рднрд╛рдЧ 2

рдореИрдВ рджреЛрд╕реНрдд рдПрдХреНрд╕рдЪреЗрдВрдЬ рдФрд░ рдИрдПрд▓рдХреЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ (рд╢реБрд░реБрдЖрдд) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдХрд╣рд╛рдиреА рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ рдпрд╣рд╛рдВ). рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдпрд╣ рд╕рдВрдпреЛрдЬрди рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЙрдЧ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдФрд░ рдХрд┐рдмрд╛рдирд╛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рд╛рдпрд╛ рдЬрд╛рдПред

рдИрдПрд▓рдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЙрдЧ рдХреЛ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдореЗрдВ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдмрд╛рдирд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдмрдирд╛рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред

рд╕реНрдерд╛рдкрдирд╛

рджреЛ рдЪрд░рдгреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ:

  • OpenJDK рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред
  • рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред

OpenJDK рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

OpenJDK рдкреИрдХреЗрдЬ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрде Windows рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ $env:Path рдФрд░ $env:JAVA_HOME рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╣рдо рдИрдПрд▓рдХреЗ рдФрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдорд┐рддреНрд░ рд╣реИрдВред рднрд╛рдЧ 2

рд╣рдо рдИрдПрд▓рдХреЗ рдФрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдорд┐рддреНрд░ рд╣реИрдВред рднрд╛рдЧ 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)

рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

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

-Xms1g
-Xmx1g

рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

-Xms8g
-Xmx8g

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрди рд╕реЗ рдмрд╛рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ -XX:+UseConcMarkSweepGC. рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдпрд╣рд╛рдВ. рдЕрдЧрд▓рд╛ рдЪрд░рдг logstash.conf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдирд╛ рд╣реИ:

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

рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХрдВрд╕реЛрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛рдПрдВ:

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}

рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдкреЛрд░реНрдЯ 9600 рдкрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдиреНрдЪ рд╣реБрдЖред

рдЕрдВрддрд┐рдо рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЪрд░рдг: рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдирдПрд╕рдПрд╕рдПрдо:

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

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

рд╕реНрд░реЛрдд рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд▓реЙрдЧ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреНрдпреВ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд▓реЙрдЧ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХрддрд╛рд░реЛрдВ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рд╣реИ: рдЗрдирдкреБрдЯ тЖТ рдХрддрд╛рд░ тЖТ рдлрд╝рд┐рд▓реНрдЯрд░ + рдЖрдЙрдЯрдкреБрдЯред

рдЗрдирдкреБрдЯ рдкреНрд▓рдЧрдЗрди рдПрдХ рд▓реЙрдЧ рд╕реНрд░реЛрдд рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдкреБрд╖реНрдЯрд┐ рднреЗрдЬрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

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

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

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

рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ queue.max_events ╨╕ queue.max_bytes, рддреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдорд╛рди рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рддрдд рдХрддрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВ рдпрд╣рд╛рдВ.

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

queue.type: persisted
queue.max_bytes: 10gb

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

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

рдирд┐рд╡реЗрд╢

рд╣рдо рдлрд╝рд╛рдЗрд▓рдмреАрдЯ рдПрдЬреЗрдВрдЯреЛрдВ рд╕реЗ рдХрдЪреНрдЪреЗ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЗрдирдкреБрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

input {
  beats {
    port => 5044
  }
}

рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдкреЛрд░реНрдЯ 5044 рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрдиреБрднрд╛рдЧ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдПрд╕рдПрд╕рдПрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓рдмрд┐рдЯ рд╕реЗ рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдмреАрдЯреНрд╕ рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ рдпрд╣рд╛рдВ.

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

рд╕рднреА рдЯреЗрдХреНрд╕реНрдЯ рд▓реЙрдЧ рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╕реАрдПрд╕рд╡реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИрдВред рд╕реАрдПрд╕рд╡реА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧрд╕реНрдЯреИрд╢ рд╣рдореЗрдВ рддреАрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдХрд╛рдЯрдирд╛, рд╕реАрдПрд╕рд╡реА рдФрд░ рдЧреНрд░реЛрдХред рдкрд╣рд▓рд╛ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╣реИ рдЙрдкрд╡рд╛рд╕, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд▓реЙрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рджреЗрдЧрд╛ (рдлрд╝реАрд▓реНрдб рдХреЗ рдЕрдВрджрд░ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг), рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд▓реЙрдЧ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

тАж,"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" }
    }
  }
} 

рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд╕рд╢рд░реНрдд рдмрдпрд╛рди, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рд╡реЗ рд▓реЙрдЧ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдлрд╝рд╛рдЗрд▓рдмреАрдЯ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдбрд┐рд╕реЗрдХреНрдЯ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ IIS. рдкреНрд▓рдЧрдЗрди рдХреЗ рдЕрдВрджрд░ рд╣рдо рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ, рдореВрд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ message, рдЬрд┐рд╕рдореЗрдВ рд▓реЙрдЧ рд╕реЗ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рд▓реЙрдЧ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓реЙрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реАрдПрд╕рд╡реА рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ; рдпрд╣ рдЬрдЯрд┐рд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

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 {
  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" ]
}

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

рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд╕рд╛рдзрд┐рдд рд▓реЙрдЧ рдХреЛ рд▓реЙрдЧ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдзреЗ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Elasticsearch, рдЬреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрддрд╛ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдирд╛рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ