αž™αžΎαž„αž‡αžΆαž˜αž·αžαŸ’αžαž“αžΉαž„ ELK αž“αž·αž„ ExchangeαŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2

αž™αžΎαž„αž‡αžΆαž˜αž·αžαŸ’αžαž“αžΉαž„ ELK αž“αž·αž„ ExchangeαŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2

αžαŸ’αž‰αž»αŸ†αž”αž“αŸ’αžαžšαžΏαž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž˜αž·αžαŸ’αžαž—αž€αŸ’αžαž· Exchange αž“αž·αž„ ELK (αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αŸ…αž‘αžΈαž“αŸαŸ‡) αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžšαŸ†αž›αžΉαž€αž’αŸ’αž“αž€αžαžΆ αž€αžΆαžšαžšαž½αž˜αž•αŸ’αžŸαŸ†αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αžŠαŸ„αž™αž˜αž·αž“αžŸαŸ’αž‘αžΆαž€αŸ‹αžŸαŸ’αž‘αžΎαžšαŸ” αž›αžΎαž€αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“ Exchange αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Logstash αž“αž·αž„αžŸαž˜αžΆαžŸαž’αžΆαžαž» Kibana αŸ”

Logstash αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž„αŸ‹ ELK αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαŸ„αž™αž†αŸ’αž›αžΆαžαžœαŸƒ αž“αž·αž„αžšαŸ€αž”αž…αŸ†αž–αž½αž€αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Elastic αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž―αž€αžŸαžΆαžš αžŠαŸ„αž™αžˆαžšαž›αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž•αŸ’αžŸαŸαž„αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ Kibana αŸ”

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹

αž˜αžΆαž“αž–αžΈαžšαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ–

  • αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αž‰αŸ’αž…αž”αŸ‹ OpenJDK αŸ”
  • αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αž‰αŸ’αž…αž”αŸ‹ Logstash αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αž‰αŸ’αž…αž”αŸ‹ OpenJDK

αž€αž‰αŸ’αž…αž”αŸ‹ OpenJDK αžαŸ’αžšαžΌαžœαžαŸ‚αž‘αžΆαž‰αž™αž€ αž“αž·αž„αž–αž“αŸ’αž›αžΆαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αžαžαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžš $env:Path αž“αž·αž„ $env:JAVA_HOME αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš WindowsαŸ–

αž™αžΎαž„αž‡αžΆαž˜αž·αžαŸ’αžαž“αžΉαž„ ELK αž“αž·αž„ ExchangeαŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2

αž™αžΎαž„αž‡αžΆαž˜αž·αžαŸ’αžαž“αžΉαž„ ELK αž“αž·αž„ ExchangeαŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2

αžαŸ„αŸ‡αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αŸ†αžŽαŸ‚ JavaαŸ–

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 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Java αŸ” αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αž•αŸ’αžαž›αŸ‹αž’αž“αž»αžŸαžΆαžŸαž“αŸαž±αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž“αŸƒ RAM αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αžΆαž“ RAM 16 GB αž“αŸ…αž›αžΎαž™αž“αŸ’αžαž αŸ„αŸ‡αž“αŸ„αŸ‡ αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αžΊαŸ–

-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 αž‡αžΆαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ Windows αŸ” αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž‰αŸ’αž…αž”αŸ‹ αž’αž·αž“αŸ” αž’αŸαžŸαŸ” ធេ:

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: (αž…αŸ†αž“αž½αž“αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžš αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αžΊ 0 (αž‚αŸ’αž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹))αŸ”
  • queue.max_bytes: (αž‘αŸ†αž αŸ†αž‡αž½αžšαž’αžαž·αž”αžšαž˜αžΆαž‚αž·αžαž‡αžΆαž”αŸƒ, αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ - 1024mb (1gb))αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ queue.max_events ΠΈ queue.max_bytesαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαžΆαžšαžˆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž™αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžš αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžˆαžΆαž“αžŠαž›αŸ‹αŸ” αž˜αžΎαž›β€‹αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžβ€‹αž’αŸ†αž–αžΈ Persistent Queues αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž•αŸ’αž“αŸ‚αž€αž“αŸƒ logstash.yml αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‡αž½αžšαŸ–

queue.type: persisted
queue.max_bytes: 10gb

αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœ

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Logstash αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αžΆαž“αž”αžΈαž•αŸ’αž“αŸ‚αž€ αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž…αžΌαž›αŸ– αž€αžΆαžšαž‘αž‘αž½αž› (αž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž…αžΌαž›) αž€αžΆαžšαž‰αŸ‚αž€ (αž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αžšαž„) αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αžΆαž“αŸ‹ Elastic (αž•αŸ’αž“αŸ‚αž€αž›αž‘αŸ’αž’αž•αž›)αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜β€‹αž“αŸαŸ‡β€‹αž™αžΎαž„β€‹αž“αžΉαž„β€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž±αŸ’αž™β€‹αž€αžΆαž“αŸ‹αžαŸ‚β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž’αŸ†αž–αžΈβ€‹αž–αž½αž€αžœαžΆβ€‹αž“αžΈαž˜αž½αž™αŸ— αŸ”

αž”αž‰αŸ’αž…αžΌαž›

αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αž‘αŸ’αžšαžΈαž˜αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž†αŸ…αž–αžΈαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžš filebeat αŸ” αžœαžΆαž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αŸαŸ‡αžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž…αžΌαž›αŸ–

input {
  beats {
    port => 5044
  }
}

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡ Logstash αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αžαžΆαž”αŸ‹αž…αŸ’αžšαž€ 5044 αž αžΎαž™αž“αŸ…αž–αŸαž›αž‘αž‘αž½αž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž½αž€αžœαžΆαžαžΆαž˜αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸƒαž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αžšαž„αŸ” αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αžšαž»αŸ†αž†αžΆαž“αŸ‚αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‘αž‘αž½αž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž–αžΈ filebit αž€αŸ’αž“αž»αž„ SSLαŸ” αžŸαžΌαž˜αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ beats αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αžαž˜αŸ’αžšαž„

αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž’αžαŸ’αžαž”αž‘αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž› Exchange αž”αž„αŸ’αž€αžΎαžαž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ csv αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαžΆαž›αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžαŸ’αž›αž½αž“αž―αž„αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžœαž·αž—αžΆαž‚ csv records 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 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ αžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž•αŸ’αž‰αžΎβ€‹αžαŸ‚β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž αŸαžαž»β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€ filebeat αž‘αŸ…β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž‡αŸ†αž“αž½αž™ dissect αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” 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) αžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαžαž»αž…αžΌαž›αž–αžΈαž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž›αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“ αžŠαŸ‚αž›αž“αžΉαž„αž•αŸ’αž‘αž»αž€αžˆαŸ’αž˜αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ”

αž“αŸ…β€‹αž–αŸαž›β€‹αž…αŸαž‰β€‹αž–αžΈβ€‹αžŠαŸ†αžŽαžΆαž€αŸ‹β€‹αž€αžΆαž›β€‹αžαŸ’αžšαž„ αž™αžΎαž„β€‹αž“αžΉαž„β€‹αž‘αž‘αž½αž›β€‹αž―αž€αžŸαžΆαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž”αŸ‰αžΆαž“αŸ‹αžŸαŸ’αž˜αžΆαž“β€‹αžŠαŸ†αž”αžΌαž„β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαŸ€αž˜β€‹αžαŸ’αž›αž½αž“β€‹αž‡αžΆβ€‹αžŸαŸ’αžšαŸαž…β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αž˜αžΎαž›β€‹αžƒαžΎαž‰β€‹αž“αŸ… KibanaαŸ” αž™αžΎαž„αž“αžΉαž„αž”αžΆαžαŸ‹αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  • αžœαžΆαž›αž›αŸαžαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž‡αžΆαž’αžαŸ’αžαž”αž‘ αžŠαŸ‚αž›αžšαžΆαžšαžΆαŸ†αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž›αžΎαž–αž½αž€αžœαžΆαŸ” αž–αŸ„αž›αž‚αžΊαžœαžΆαž›αžŸαŸ’αžšαŸ‚ time-taken αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» IIS αž€αŸαžŠαžΌαž…αž‡αžΆαžœαžΆαž› recipient-count ΠΈ total-bites αž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ”
  • αžαŸ’αžšαžΆαž–αŸαž›αžœαŸαž›αžΆαž―αž€αžŸαžΆαžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αžΉαž„αž˜αžΆαž“αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž“αŸ„αŸ‡αž‘αŸαŸ”
  • αžœαžΆαž› recipient-address αž“αžΉαž„αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαžŠαŸ’αž‹αžΆαž“αžŸαŸ†αžŽαž„αŸ‹αž˜αž½αž™ αžŠαŸ‚αž›αž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžœαž·αž—αžΆαž‚αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‘αž‘αž½αž›αžŸαŸ†αž”αž»αžαŸ’αžšαŸ”

αžœαžΆαžŠαž›αŸ‹αž–αŸαž›αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αžœαŸαž‘αž˜αž“αŸ’αžαžαž·αž…αžαž½αž…αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ‚αž…αŸ’αž“αŸƒαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ”

αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžœαžΆαž›αž›αŸαž

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ dissect αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αŸ” convert_datatypeαžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžœαžΆαž›αž’αžαŸ’αžαž”αž‘αž‘αŸ…αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αžŒαžΈαž‡αžΈαžαž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸαžŠαžΌαž…αž“αŸαŸ‡αŸ–

dissect {
  …
  convert_datatype => { "time-taken" => "int" }
  …
}

αžœαžΆαž‚αžΊαž˜αžΆαž“αžαŸ†αž›αŸƒαž…αž„αž…αžΆαŸ†αžαžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž‚αžΊαžŸαž˜αžšαž˜αŸ’αž™αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž›αž–αž·αžαž‡αžΆαž“αžΉαž„αž˜αžΆαž“αžαŸ’αžŸαŸ‚αž˜αž½αž™αŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαž˜αŸ’αž›αŸƒ Null αž–αžΈαžœαžΆαž› αž αžΎαž™αž”αŸ„αŸ‡αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž˜αž½αž™αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžαžΆαž˜αžŠαžΆαž“ αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž€αž»αŸ†αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžœαžΆαž› recipient-count ΠΈ total-bites αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‘αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžœαžΆαž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš:

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

αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ recipient_address αž‘αŸ…αž‡αžΆαž’αŸ’αž“αž€αž‘αž‘αž½αž›αž”αž»αž‚αŸ’αž‚αž›

αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž€αŸαž’αžΆαž…αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αžΆαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ mutateαŸ–

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

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αžšαžΆαž–αŸαž›αžœαŸαž›αžΆ

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αž‰αŸ’αž αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαŸ„αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αžŠαŸ‚αž›αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„αžœαž·αžŸαŸαž™αž“αŸαŸ‡αŸ” timestamp αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘ αž“αž·αž„αž–αŸαž›αžœαŸαž›αžΆαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αžΈαžœαžΆαž› date-time:

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

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ IIS logs αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžœαžΆαž› 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" ]
}

αž‘αž·αž“αŸ’αž“αž•αž›

αž•αŸ’αž“αŸ‚αž€αž›αž‘αŸ’αž’αž•αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‰αžΎαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ…αž’αŸ’αž“αž€αž‘αž‘αž½αž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž•αŸ’αž‰αžΎαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ… Elastic αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžŸαžšαžŸαŸƒαž–αž½αžšαŸ”αžŠαŸ‚αž›αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αž‚αŸ†αžšαžΌαžˆαŸ’αž˜αŸ„αŸ‡αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‰αžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαŸ–

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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹