เจ…เจธเฉ€เจ‚ ELK เจ…เจคเฉ‡ เจเจ•เจธเจšเฉ‡เจ‚เจœ เจฆเฉ‡ เจฆเฉ‹เจธเจค เจนเจพเจ‚เฅค เจญเจพเจ— 2

เจ…เจธเฉ€เจ‚ ELK เจ…เจคเฉ‡ เจเจ•เจธเจšเฉ‡เจ‚เจœ เจฆเฉ‡ เจฆเฉ‹เจธเจค เจนเจพเจ‚เฅค เจญเจพเจ— 2

เจฎเฉˆเจ‚ เจฆเฉ‹เจธเจค เจเจ•เจธเจšเฉ‡เจ‚เจœ เจ…เจคเฉ‡ ELK (เจธเจผเฉเจฐเฉ‚เจ†เจค เจ‡เฉฑเจฅเฉ‡). เจฎเฉˆเจจเฉ‚เฉฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจฃ เจฆเจฟเจ“ เจ•เจฟ เจ‡เจน เจธเฉเจฎเฉ‡เจฒ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจเจฟเจœเจ• เจฆเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฆเฉ‡ เจธเจฎเจฐเฉฑเจฅ เจนเฉˆเฅค เจ‡เจธ เจตเจพเจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจเจ•เจธเจšเฉ‡เจ‚เจœ เจจเฉ‚เฉฐ Logstash เจ…เจคเฉ‡ Kibana เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจนเฉˆเฅค

ELK เจธเจŸเฉˆเจ• เจตเจฟเฉฑเจš เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจธเจฎเจเจฆเจพเจฐเฉ€ เจจเจพเจฒ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจ…เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจฒเจพเจธเจŸเจฟเจ• เจตเจฟเฉฑเจš เจชเจฒเฉ‡เจธเจฎเฉˆเจ‚เจŸ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจœเจฟเจธ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ•เจฟเจฌเจพเจจเจพ เจตเจฟเฉฑเจš เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃเจพ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆเฅค

เจธเฉˆเจŸเจฟเฉฐเจ—

เจฆเฉ‹ เจชเฉœเจพเจตเจพเจ‚ เจฆเฉ‡ เจธเจผเจพเจฎเจฒ เจนเจจ:

  • OpenJDK เจชเฉˆเจ•เฉ‡เจœ เจจเฉ‚เฉฐ เจ‡เฉฐเจธเจŸเจพเจฒ เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพเฅค
  • เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจชเฉˆเจ•เฉ‡เจœ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพเฅค

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)

เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจชเฉˆเจ•เฉ‡เจœ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ

เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจ เจจเจพเจฒ เจ†เจฐเจ•เจพเจˆเจต เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ‹ เจ‡เฉฑเจฅเฉ‹เจ‚. เจ†เจฐเจ•เจพเจˆเจต เจจเฉ‚เฉฐ เจกเจฟเจธเจ• เจฆเฉ‡ เจฐเฉ‚เจŸ เจคเฉฑเจ• เจ…เจจเจชเฉˆเจ• เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจ…เจจเจชเฉˆเจ• เจ•เจฐเฉ‹ C:Program Files เจ‡เจน เจ‡เจธเจฆเฉ€ เจ•เฉ€เจฎเจค เจจเจนเฉ€เจ‚ เจนเฉˆ, เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจ‡เจจเจ•เจพเจฐ เจ•เจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค เจซเจฟเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉ‹เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ jvm.options Java เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฒเจˆ RAM เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจซเจฟเจ•เจธเฅค เจฎเฉˆเจ‚ เจธเจฐเจตเจฐ เจฆเฉ‡ เจ…เฉฑเจงเฉ‡ เจฐเฉˆเจฎ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚เฅค เจœเฉ‡เจ•เจฐ เจ‡เจธ เจตเจฟเฉฑเจš เจฌเฉ‹เจฐเจก เจ‰เฉฑเจคเฉ‡ 16 GB RAM เจนเฉˆ, เจคเจพเจ‚ เจกเจฟเจซเฉŒเจฒเจŸ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจนเจจ:

-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}

Logstash เจชเฉ‹เจฐเจŸ 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: (เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจ•เจคเจพเจฐ เจชเฉฐเจจเฉ‡ เจฆเจพ เจ†เจ•เจพเจฐ, เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจฎเฉเฉฑเจฒ 64mb เจนเฉˆ)เฅค
  • queue.drain: (เจธเฉฑเจš/เจ—เจฒเจค - เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ•เจคเจพเจฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃเจพ เจธเจฎเจฐเฉฑเจฅ/เจ…เจฏเฉ‹เจ— เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจธเจฐเจตเจฐ เจฌเฉฐเจฆ เจนเฉ‹เจฃ เจฆเฉ€ เจ—เจคเฉ€ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเจพ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เจฐเฉ‡เจ—เจพ)เฅค
  • queue.max_events: (เจ•เจคเจพเจฐ เจตเจฟเฉฑเจš เจ‡เจตเฉˆเจ‚เจŸเจพเจ‚ เจฆเฉ€ เจ…เจงเจฟเจ•เจคเจฎ เจธเฉฐเจ–เจฟเจ†, เจกเจฟเจซเฉŒเจฒเจŸ 0 เจนเฉˆ (เจฌเฉ‡เจ…เฉฐเจค))เฅค
  • queue.max_bytes: (เจฌเจพเจˆเจŸ เจตเจฟเฉฑเจš เจ…เจงเจฟเจ•เจคเจฎ เจ•เจคเจพเจฐ เจฆเจพ เจ†เจ•เจพเจฐ, เจกเจฟเจซเฉŒเจฒเจŸ - 1024mb (1gb))เฅค

เจœเฉ‡เจ•เจฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ queue.max_events ะธ queue.max_bytes, เจซเจฟเจฐ เจœเจฆเฉ‹เจ‚ เจ‡เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ— เจฆเจพ เจฎเฉเฉฑเจฒ เจชเฉ‚เจฐเจพ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจธเฉเจจเฉ‡เจนเฉ‡ เจ•เจคเจพเจฐ เจตเจฟเฉฑเจš เจธเจตเฉ€เจ•เจพเจฐ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเฉ‡ เจฌเฉฐเจฆ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจธเจฅเจพเจˆ เจ•เจคเจพเจฐเจพเจ‚ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเฉ‹ เจ‡เฉฑเจฅเฉ‡.

เจ•เจคเจพเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ logstash.yml เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ:

queue.type: persisted
queue.max_bytes: 10gb

เจตเจฟเจตเจธเจฅเจพ

เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจคเจฟเฉฐเจจ เจญเจพเจ— เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจฒเฉŒเจ—เจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจชเฉœเจพเจตเจพเจ‚ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ: เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ (เจ‡เจจเจชเฉเจŸ เจธเฉˆเจ•เจธเจผเจจ), เจชเจพเจฐเจธเจฟเฉฐเจ— (เจซเจฟเจฒเจŸเจฐ เจธเฉˆเจ•เจธเจผเจจ) เจ…เจคเฉ‡ เจ‡เจฒเจพเจธเจŸเจฟเจ• (เจ†เจŠเจŸเจชเฉเฉฑเจŸ เจธเฉˆเจ•เจธเจผเจจ) เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฃเจพเฅค เจนเฉ‡เจ เจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจนเจฐเฉ‡เจ• 'เจคเฉ‡ เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจตเจฟเจšเจพเจฐ เจ•เจฐเจพเจ‚เจ—เฉ‡.

เจ‡เฉฐเจชเฉเฉฑเจŸ

เจ…เจธเฉ€เจ‚ เจซเจพเจˆเจฒเจฌเฉ€เจŸ เจเจœเฉฐเจŸเจพเจ‚ เจคเฉ‹เจ‚ เจ•เฉฑเจšเฉ‡ เจฒเฉŒเจ—เจธ เจฆเฉ‡ เจจเจพเจฒ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€ เจธเจŸเฉเจฐเฉ€เจฎ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ‡เจน เจ‡เจน เจชเจฒเฉฑเจ—เจ‡เจจ เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ‡เจจเจชเฉเจŸ เจญเจพเจ— เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:

input {
  beats {
    port => 5044
  }
}

เจ‡เจธ เจธเฉฐเจฐเจšเจจเจพ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจชเฉ‹เจฐเจŸ 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 {
  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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹