ΠΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΠΌ ΠΌΠΎΡΠ°ΡΠ° ΠΏΡΠΈΠΊΠ°Π·Π½Π° Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ Π΄ΡΡΠΆΠ°Ρ 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 ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΠ°Π²Π°. ΠΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΎΠ΄ 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
: (ΡΠΎΡΠ½ΠΎ/Π½Π΅ΡΠΎΡΠ½ΠΎ - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°/ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π·Π°ΠΏΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠ΅Π΄ΠΎΡ ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈ 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 (ΠΈΠ·Π»Π΅Π·Π΅Π½ Π΄Π΅Π»). ΠΠΎΠ΄ΠΎΠ»Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ ΡΠ΅ΠΊΠΎΡ ΠΎΠ΄ Π½ΠΈΠ².
ΠΠ½Π΅ΡΠ΅ΡΠ΅
ΠΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈΠΎΡ ΠΏΡΠ΅Π½ΠΎΡ ΡΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ ΠΎΠ΄ Π°Π³Π΅Π½ΡΠΈΡΠ΅ Π·Π° ΡΠ°ΡΠ»Π±ΠΈΡ. Π’ΠΎΠΊΠΌΡ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ Π³ΠΎ ΠΏΠΎΡΠΎΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅:
input {
beats {
port => 5044
}
}
ΠΠΎ ΠΎΠ²Π°Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°, Logstash Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° Π΄Π° ΡΠ° ΡΠ»ΡΡΠ° ΠΏΠΎΡΡΠ°ΡΠ° 5044 ΠΈ ΠΊΠΎΠ³Π° ΠΏΡΠΈΠΌΠ° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ, Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΡΠΏΠΎΡΠ΅Π΄ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° Π΄Π΅Π»ΠΎΡ Π·Π° ΡΠΈΠ»ΡΡΠΈ. ΠΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π·Π°Π²ΠΈΡΠΊΠ°ΡΠ΅ ΠΊΠ°Π½Π°Π»ΠΎΡ Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΎΠ΄ Π±ΠΈΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ 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
), ΠΊΠΎΡ ΡΠΎΠ΄ΡΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΠΈΡ ΠΎΠ΄ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅, ΠΊΠΎΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΎΠ΄ ΠΊΠΎΡΠ° ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ.
ΠΠ° ΠΈΠ·Π»Π΅Π·ΠΎΡ ΠΎΠ΄ ΡΠ°Π·Π°ΡΠ° Π½Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅, ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ Π²ΠΎ ΠΏΡΠ²ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΡΠ²Π°ΡΠ΅, ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π·Π° Π²ΠΈΠ·ΡΠ΅Π»ΠΈΠ·Π°ΡΠΈΡΠ° Π²ΠΎ ΠΠΈΠ±Π°Π½Π°. ΠΠ΅ Π½ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ²Π° ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ:
- ΠΡΠΌΠ΅ΡΠΈΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅ΠΊΡΡ, ΡΡΠΎ Π³ΠΈ ΡΠΏΡΠ΅ΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Π½ΠΈΠ². ΠΠΌΠ΅Π½ΠΎ, ΠΏΠΎΠ»ΠΈΡΠ°ΡΠ°
time-taken
ΠΠ½Π΅Π²Π½ΠΈΠΊ Π½Π° IIS, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΠΎΠ»ΠΈΡΠ°recipient-count
ΠΈtotal-bites
Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ. - Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΡ ΡΠ΅ Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΊΠΎΠ³Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½, Π° Π½Π΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΊΠΎΠ³Π° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ.
- ΡΡΠΎΠ»Π±
recipient-address
ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΊΠ°ΠΊΠΎ Π΅Π΄Π½ΠΎ Π³ΡΠ°Π΄ΠΈΠ»ΠΈΡΡΠ΅, ΠΊΠΎΠ΅ Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π°Π½Π°Π»ΠΈΠ·Π° Π·Π° Π±ΡΠΎΠ΅ΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π±ΡΠΊΠ²ΠΈΡΠ΅.
ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΌΠ°Π»ΠΊΡ ΠΌΠ°Π³ΠΈΡΠ° Π²ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅.
ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π½ΡΠΌΠ΅ΡΠΈΡΠΊΠΈ ΠΏΠΎΠ»ΠΈΡΠ°
ΠΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΡΠ° ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡΠ° 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}"
}
}
ΠΠΎΡΠΈΡΠ½ΠΈ Π²ΡΡΠΊΠΈ:
ΠΠ°ΠΊΠΎ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ OpenJDK 11 Π½Π° Windows? ΠΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅ Logstash ΠΠ»Π°ΡΡΠΈΠΊ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄Π·Π΅ΠΌΠ΅Π½Π° ΠΎΠΏΡΠΈΡΠ° UseConcMarkSweepGC #36828 ΠΠ‘Π‘Π ΠΠΎΡΡΠΎΡΠ°Π½ΠΈ ΡΠ΅Π΄ΠΈΡΠΈ ΠΡΠΈΠΊΠ»ΡΡΠΎΠΊ Π·Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ Beats ΠΠΎΠ³ΡΡΠ°Ρ ΠΏΡΠΈΡΠ°ΡΠ΅Π»Π΅, ΠΊΠ°Π΄Π΅ ΠΌΠΈ Π΅ ΠΌΠΎΡΠΎΡΠ½Π°ΡΠ° ΠΏΠΈΠ»Π°? Π’ΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΡΠ΅ΡΠΈΡΠ°ΠΌ ΠΌΠΎΠΈΡΠ΅ ΡΡΡΠΏΡΠΈ ΠΡΠΈΠΊΠ»ΡΡΠΎΠΊ Π·Π° ΡΠΈΠ»ΡΠ΅Ρ Π·Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ²Π°ΡΠ΅ Π£ΡΠ»ΠΎΠ²ΠΈ ΠΡΡΠΈΡΠ°Ρ Π³ΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ Π·Π° ΡΠΈΠ»ΡΠ΅Ρ ΠΡΠΈΠΊΠ»ΡΡΠΎΠΊ Π·Π° ΡΠΈΠ»ΡΠ΅Ρ Π·Π° Π΄Π°ΡΡΠΌ ΠΠ·Π»Π΅Π·Π΅Π½ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ Elasticsearch
ΠΠ·Π²ΠΎΡ: www.habr.com