แƒฉแƒ•แƒ”แƒœ แƒ•แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒแƒ‘แƒ— ELK-แƒ—แƒแƒœ แƒ“แƒ Exchange-แƒ—แƒแƒœ. แฒ›แƒ” -2 แƒœแƒแƒฌแƒ˜แƒšแƒ˜

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒแƒ‘แƒ— ELK-แƒ—แƒแƒœ แƒ“แƒ Exchange-แƒ—แƒแƒœ. แฒ›แƒ” -2 แƒœแƒแƒฌแƒ˜แƒšแƒ˜

แƒ›แƒ” แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘ แƒฉแƒ”แƒ›แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒก แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒ”แƒ‘แƒ˜ Exchange แƒ“แƒ ELK (แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒแƒฅ). แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒแƒ› แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฃแƒงแƒแƒงแƒ›แƒแƒœแƒแƒ“ แƒ“แƒแƒแƒ›แƒฃแƒจแƒแƒแƒก แƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ. แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ— แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ•แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— Exchange Logstash แƒ“แƒ Kibana แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ—แƒแƒœ.

Logstash ELK แƒกแƒขแƒ”แƒ™แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒšแƒ”แƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒแƒ“ แƒ“แƒแƒกแƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— Elastic-แƒจแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒกแƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒšแƒแƒ“, แƒ แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”แƒช แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ Kibana-แƒจแƒ˜ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ•แƒ˜แƒ–แƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ.

แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก

แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒ”แƒขแƒแƒžแƒ˜แƒกแƒ’แƒแƒœ:

  • OpenJDK แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ.
  • Logstash แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ.

OpenJDK แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ

OpenJDK แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒ“แƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ“แƒ แƒ’แƒแƒฎแƒกแƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ’แƒ–แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒแƒ— Windows แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก $env:Path แƒ“แƒ $env:JAVA_HOME แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒจแƒ˜:

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒแƒ‘แƒ— 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-แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜. แƒ—แƒฃ แƒ›แƒแƒก แƒแƒฅแƒ•แƒก 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 แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— 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: (แƒ แƒ˜แƒ“แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ–แƒแƒ›แƒ, แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก 64 แƒ›แƒ‘).
  • queue.drain: (true/false - แƒฉแƒแƒ แƒ—แƒแƒ•แƒก/แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ•แƒก แƒ แƒ˜แƒ’แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒแƒก Logstash-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒแƒ›แƒ“แƒ”. แƒแƒ  แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒ›แƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ•แƒแƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ˜แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ”แƒ–แƒ”).
  • queue.max_events: (แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ แƒ˜แƒ’แƒจแƒ˜, แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒแƒ แƒ˜แƒก 0 (แƒจแƒ”แƒฃแƒ–แƒฆแƒฃแƒ“แƒแƒ•แƒ˜)).
  • queue.max_bytes: (แƒ แƒ˜แƒ“แƒ˜แƒก แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ–แƒแƒ›แƒ แƒ‘แƒแƒ˜แƒขแƒ”แƒ‘แƒจแƒ˜, แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ - 1024 แƒ›แƒ‘ (1 แƒ’แƒ‘)).

แƒ—แƒฃ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ queue.max_events ะธ queue.max_bytes, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒจแƒ”แƒฌแƒงแƒ“แƒ”แƒ‘แƒ แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒแƒ› แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ›แƒ˜แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ. แƒจแƒ”แƒ˜แƒขแƒงแƒ•แƒ”แƒ— แƒ›แƒ”แƒขแƒ˜ แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒแƒฅ.

logstash.yml-แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ แƒ˜แƒ’แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ–แƒ”:

queue.type: persisted
queue.max_bytes: 10gb

แƒ แƒ”แƒ’แƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒ

Logstash-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒกแƒแƒ›แƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒœแƒ˜ แƒแƒ แƒ˜แƒแƒœ แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒแƒ–แƒ”แƒ‘แƒ–แƒ”: แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ (แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ), แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ (แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ) แƒ“แƒ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ Elastic-แƒจแƒ˜ (แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ). แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒฉแƒ•แƒ”แƒœ แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ›แƒแƒ—แƒ’แƒแƒœแƒก.

แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒš แƒœแƒแƒ™แƒแƒ“แƒก แƒ“แƒแƒฃแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒ— filebeat แƒแƒ’แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ”แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ— แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜:

input {
  beats {
    port => 5044
  }
}

แƒแƒ› แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ Logstash แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก 5044 แƒžแƒแƒ แƒขแƒ˜แƒก แƒ›แƒแƒกแƒ›แƒ”แƒœแƒแƒก แƒ“แƒ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒ›แƒแƒ— แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒแƒ— แƒแƒ แƒฎแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ‘แƒ˜แƒขแƒ˜แƒ“แƒแƒœ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ SSL-แƒจแƒ˜. แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒ›แƒ”แƒขแƒ˜ beats แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒแƒฅ.

แƒคแƒ˜แƒšแƒขแƒ แƒ˜

แƒงแƒ•แƒ”แƒšแƒ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช Exchange แƒฅแƒ›แƒœแƒ˜แƒก, แƒแƒ แƒ˜แƒก 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 แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ•แƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜ แƒ˜แƒงแƒ filebeat แƒขแƒ”แƒ’แƒ˜แƒ— dissect plugin-แƒจแƒ˜ 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 แƒ“แƒแƒ”แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ”แƒ‘แƒ แƒ”แƒ แƒ— แƒกแƒแƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒแƒกแƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ—แƒ แƒ“แƒแƒ—แƒ•แƒšแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก.

แƒ“แƒ แƒแƒ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒชแƒแƒขแƒ แƒ›แƒแƒ’แƒ˜แƒ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก.

แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒ—แƒ˜ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒชแƒ˜แƒ

dissect plugin-แƒก แƒแƒฅแƒ•แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ 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 {
  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" ]
}

แƒ’แƒแƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒก

แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ“ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ–แƒ”. แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ