ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌ ΠΈΡΡΠΎΡΠΈΡΡΠ° ΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΡΠΏΡΠΈΡΡΠ΅Π»ΡΠ²Π°ΠΌ Ρ Exchange ΠΈ ELK (Π½Π°ΡΠ°Π»ΠΎΡΠΎ
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
ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° RAM Π·Π° Java ΠΏΡΠΎΡΠ΅ΡΠ°. ΠΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ RAM Π½Π° ΡΡΡΠ²ΡΡΠ°. ΠΠΊΠΎ ΠΈΠΌΠ° 16 GB RAM Π½Π° Π±ΠΎΡΠ΄Π°, ΡΠΎΠ³Π°Π²Π° ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ°:
-Xms1g
-Xmx1g
ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈ Ρ:
-Xms8g
-Xmx8g
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΡΠ΅Π΄Π° -XX:+UseConcMarkSweepGC
. ΠΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π°
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
: (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 ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΡΠΈ ΡΠ°ΡΡΠΈ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ°Π·ΠΈ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅: ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ (ΡΠ΅ΠΊΡΠΈΡ Π·Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅), Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ (ΡΠ΅ΠΊΡΠΈΡ Π·Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅) ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π΄ΠΎ Elastic (ΡΠ΅ΠΊΡΠΈΡ Π·Π° ΠΈΠ·Ρ ΠΎΠ΄). ΠΠΎ-Π΄ΠΎΠ»Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΡΠ±Π»ΠΈΠ·ΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ .
ΠΡ ΠΎΠ΄
ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊ ΡΡΡ ΡΡΡΠΎΠ²ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ filebeat Π°Π³Π΅Π½ΡΠΈ. Π’ΠΎΠ²Π° Π΅ ΡΠΎΠ·ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΡΠΎΡΠ²Π°ΠΌΠ΅ Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° Π·Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅:
input {
beats {
port => 5044
}
}
Π‘Π»Π΅Π΄ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Logstash Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΠ»ΡΡΠ° ΠΏΠΎΡΡ 5044 ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΡΠΈΠ»ΡΡΡΠ½Π°ΡΠ° ΡΠ΅ΠΊΡΠΈΡ. ΠΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ±Π²ΠΈΠ΅ΡΠ΅ ΠΊΠ°Π½Π°Π»Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ filebit Π² SSL. ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½Π° beats
ΡΠΈΠ»ΡΡΡ
ΠΡΠΈΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠΎΠΈΡΠΎ Exchange Π³Π΅Π½Π΅ΡΠΈΡΠ°, ΡΠ° Π² csv ΡΠΎΡΠΌΠ°Ρ Ρ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π² ΡΠ°ΠΌΠΈΡ Π»ΠΎΠ³ ΡΠ°ΠΉΠ». ΠΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° csv Π·Π°ΠΏΠΈΡΠΈ, Logstash Π½ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΡΠΈ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ:
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΉ ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡ Π·Π°ΠΏΠΈΡ Π½Π° Π΄Π²Π° (ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΠΏΠ΅ΡΠ°Ρ Π² ΠΏΠΎΠ»Π΅ΡΠΎ), ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ:
β¦,"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
), ΠΊΠΎΠΉΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π·Π°ΠΏΠΈΡ ΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ.
ΠΠ° ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΎΡ Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ Π² ΠΏΡΡΠ²ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅, Π³ΠΎΡΠΎΠ²ΠΈ Π·Π° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π² Kibana. Π©Π΅ Π½ΠΈ Π»ΠΈΠΏΡΠ²Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- Π§ΠΈΡΠ»ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ° ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΊΠ°ΡΠΎ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΡΡ
. Π ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΠΈΠ²ΠΈΡΠ΅
time-taken
IIS Π΄Π½Π΅Π²Π½ΠΈΠΊ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°recipient-count
ΠΈtotal-bites
ΠΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. - ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΡ ΡΠ°ΠΉΠ» Π΅ Π±ΠΈΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½, Π° Π½Π΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π±ΠΈΠ» Π·Π°ΠΏΠΈΡΠ°Π½ ΠΎΡ ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°.
- ΠΠ±Π»Π°ΡΡ
recipient-address
ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ Π΅Π΄Π½Π° ΡΡΡΠΎΠΈΡΠ΅Π»Π½Π° ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π°Π½Π°Π»ΠΈΠ· Π·Π° ΠΏΡΠ΅Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΠΏΠΈΡΠΌΠ°.
ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΌΠ°Π³ΠΈΡ ΠΊΡΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΡΠ»ΠΎΠ²ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°
ΠΠ»ΡΠ³ΠΈΠ½ΡΡ dissect ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡ convert_datatype
, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎ ΠΏΠΎΠ»Π΅ Π² ΡΠΈΡΡΠΎΠ² ΡΠΎΡΠΌΠ°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
dissect {
β¦
convert_datatype => { "time-taken" => "int" }
β¦
}
Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΏΠΎΠ»Π΅ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π½ΠΈΠ·. ΠΠΏΡΠΈΡΡΠ° Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½ΡΠ»Π΅Π²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠ»Π΅ΡΠ° ΠΈ Ρ Π²ΡΡΠ»Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° 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
ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½Π° Π·Π° ΠΌΡΡΠΈΡΠ°Π½Π΅, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΡΠΎΠ²Π°ΡΠ° Π·ΠΎΠ½Π°, ΠΎΡ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, ΠΈ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅ΡΠ°Ρ Π² Π½Π΅Ρ 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}"
}
}
ΠΠΎΠ»Π΅Π·Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ:
ΠΠ°ΠΊ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌ OpenJDK 11 Π½Π° Windows? ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ Logstash Elastic ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΡΠ΅Π³Π»Π΅Π½Π° ΠΎΠΏΡΠΈΡ UseConcMarkSweepGC #36828 ΠΠ‘ΠΠ‘ ΠΠΎΡΡΠΎΡΠ½Π½ΠΈ ΠΎΠΏΠ°ΡΠΊΠΈ ΠΠ»ΡΠ³ΠΈΠ½ Π·Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Beats Logstash ΠΠΈΡ, ΠΊΡΠ΄Π΅ ΠΌΠΈ Π΅ ΠΌΠΎΡΠΎΡΠ½ΠΈΡΡ ΡΡΠΈΠΎΠ½? Π’ΡΡΠ±Π²Π° Π΄Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΡΠ°ΠΌ ΠΌΠΎΠΈΡΠ΅ ΡΡΡΠΏΠΈ ΠΠ»ΡΠ³ΠΈΠ½ Π·Π° ΡΠΈΠ»ΡΡΡ Dissect ΡΡΠ»ΠΎΠ²Π½ΠΎΡΡΠΈΡΠ΅ ΠΠ»ΡΠ³ΠΈΠ½ Π·Π° ΠΌΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΠ»ΡΡΡ ΠΠ»ΡΠ³ΠΈΠ½ Π·Π° ΡΠΈΠ»ΡΡΡ Π·Π° Π΄Π°ΡΠ° ΠΠ»ΡΠ³ΠΈΠ½ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Elasticsearch
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com