
ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌ ΡΠ°Π·ΠΊΠ°Π·Π° ΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡΡΠΆΠ° Exchange ΠΈ ELK (Π½Π°ΡΠ°Π»ΠΎ ). ΠΠ°ΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π±Π΅Π· ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅. Π’ΠΎΠ·ΠΈ ΠΏΡΡ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Exchange Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Logstash ΠΈ Kibana.
Logstash Π² ΡΡΠ΅ΠΊΠ° ELK ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ ΡΡΡ
Π½Π°ΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π·Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π² Elastic ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ, Π½Π° Π±Π°Π·Π° Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Kibana.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅
Π‘ΡΡΡΠΎΠΈ ΡΠ΅ ΠΎΡ Π΄Π²Π° Π΅ΡΠ°ΠΏΠ°:
- ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° OpenJDK.
- ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Logstash.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° OpenJDK
ΠΠ°ΠΊΠ΅ΡΡΡ OpenJDK ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ ΠΈ ΡΠ°Π·Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΡΡΡ Π΄ΠΎ ΡΠ°Π·ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ $env:Path ΠΈ $env:JAVA_HOME Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Windows:


ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° 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 , ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠΈ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Π·Π° Java ΠΏΡΠΎΡΠ΅ΡΠ°. ΠΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° ΡΡΡΠ²ΡΡΠ°. ΠΠΊΠΎ Π½Π° Π½Π΅Π³ΠΎ ΠΈΠΌΠ° 16 ΠΠ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
-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
Π‘Π»ΡΠΆΠ±Π° "logstash" ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°!
ΠΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ
ΠΠ°ΠΏΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΏΡΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΡΡΠ²ΡΡ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΠΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΈ ΠΠΏΠ°ΡΠΊΠΈ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ
Π‘Ρ Π΅ΠΌΠ°ΡΠ° Π·Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ°ΡΠΊΠΈΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅: input β queue β filter + output.
Input ΠΏΠ»ΡΠ³ΠΈΠ½ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, Π·Π°ΠΏΠΈΡΠ²Π° Π³ΠΈ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅.
Π‘ΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΠΎΡ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΎΡ Logstash, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΠ΅Π· ΡΠΈΠ»ΡΡΠΈΡΠ΅ ΠΈ output ΠΏΠ»ΡΠ³ΠΈΠ½Π°. ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ output Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³, Logstash ΠΈΠ·ΡΡΠΈΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ ΠΎΡ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°. ΠΠΊΠΎ Logstash Π±ΡΠ΄Π΅ ΡΠΏΡΡΠ½, Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π·Π° ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅, ΠΎΡΡΠ°Π²Π°Ρ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΈ Logstash ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ ΡΡΡ Π½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈ ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
Π Π΅Π³ΡΠ»ΠΈΡΠ° ΡΠ΅ Ρ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π² ΡΠ°ΠΉΠ»Π° C:Logstashconfiglogstash.yml:
queue.type: (Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ βpersistedΠΈmemory (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅)).path.queue: (ΠΏΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΎΠΏΠ°ΡΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π² C:Logstashqueue).queue.page_capacity: (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°, ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ β 64mb).queue.drain: (true/false β Π²ΠΊΠ»ΡΡΠ²Π°/ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° ΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Logstash. ΠΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° Π±ΡΠ΄Π΅ Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° ΠΏΡΡΠΊΠΎ ΡΠ΅ ΡΠ΅ ΠΎΡΡΠ°Π·ΠΈ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΡΠ²ΡΡΠ°).queue.max_events: (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ ΡΡΠ±ΠΈΡΠΈΡ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°, ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ β 0 (Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ)).queue.max_bytes: (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π² Π±Π°ΠΉΡΠΎΠ²Π΅, ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ β 1024mb (1gb)).
ΠΠΊΠΎ ΡΠ° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈ queue.max_events ΠΈ queue.max_bytes, ΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° ΠΏΡΠ΅ΡΡΠ°Π²Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π²ΡΡΠΊΠ° ΠΎΡ ΡΠ΅Π·ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΈΡΠ΅ ΠΠΏΠ°ΡΠΊΠΈ ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ .
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°ΡΡ ΠΎΡ logstash.yml, ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠ° Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°:
queue.type: persisted
queue.max_bytes: 10gb
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Logstash ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΡΠΈ ΡΠ°ΡΡΠΈ, ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅: ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ (ΡΠ΅ΠΊΡΠΈΡ input), ΠΏΠ°ΡΡΠΈΠ½Π³ (ΡΠ΅ΠΊΡΠΈΡ filter) ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π² Elastic (ΡΠ΅ΠΊΡΠΈΡ output). ΠΠΎ-Π΄ΠΎΠ»Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²ΡΡΠΊΠ° ΠΎΡ ΡΡΡ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
ΠΡ ΠΎΠ΄
ΠΡ ΠΎΠ΄ΡΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Ρ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠ΅ ΠΎΡ Π°Π³Π΅Π½ΡΠΈ filebeat. Π’ΠΎΠ·ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ ΡΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π² ΡΠ΅ΠΊΡΠΈΡ input:
input {
beats {
port => 5044
}
}
Π‘Π»Π΅Π΄ ΡΠ°ΠΊΠ°Π²Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Logstash Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΠ»ΡΡΠ° ΠΏΠΎΡΡΠ° 5044, ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΡΠ΅ΠΊΡΠΈΡ filter. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π²ΠΈΠ΅ΡΠ΅ ΠΊΠ°Π½Π°Π»Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΎΡ filebeat Π² 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 ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
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 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° , Π·Π°ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΡΠΎΡΠΈΠΌ ΠΏΠ»ΡΠ³ΠΈΠ½Π° dissect Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ ΠΊΡΠΌ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ΠΈ Ρ filebeat ΡΠ°Π³Π° 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Π½Π° Tracking. - Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅ΡΠ°Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅, Π° Π½Π΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π·Π°ΠΏΠΈΡ Π½Π° ΡΡΡΠ²ΡΡΠ°.
- ΠΠΎΠ»Π΅
recipient-addressΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½Π½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π½Π°Π»ΠΈΠ· Ρ ΠΏΡΠ΅Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΏΠΈΡΠΌΠ°ΡΠ°.
ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΌΠ°Π³ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅.
ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΠ»ΠΎΠ²ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°
ΠΠ»Π°Π³ΠΈΠ½ΡΡ dissect ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡ convert_datatype, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎ ΠΏΠΎΠ»Π΅ Π² ΡΠΈΡΡΠΎΠ² ΡΠΎΡΠΌΠ°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ°:
dissect {
β¦
convert_datatype => { "time-taken" => "int" }
β¦
}
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΌΠ½ΠΈ, ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΏΠΎΠ»Π΅ΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° ΡΠΎΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ. Null-ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΠ»Π΅ΡΠΎ Π½Π΅ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΎΡ ΠΎΠΏΡΠΈΡΡΠ° ΠΈ Π²ΠΎΠ΄ΡΡ Π΄ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΡΠ°ΠΊΠΈΠ½Π³ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ convert, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° 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 ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° date ΠΈ time ΡΡΠ΅Π· ΠΏΠ»Π°Π³ΠΈΠ½Π° mutate, Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π²Π° Π·ΠΎΠ½Π° ΠΈ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠΎΠ·ΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅ΡΠ°Ρ Π² timestamp ΡΡΠ΅Π· ΠΏΠ»Π°Π³ΠΈΠ½Π° date:
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 ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΡΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΊΡΠΌ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅. ΠΡΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² 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}"
}
}
ΠΠΎΠ»Π΅Π·Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
