Π― ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΊΠ°Π· ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡ 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
ΠΏΡΠ°Π²ΠΊΠΈ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Java. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠ»ΠΈ Ρ Π½Π΅Π³ΠΎ Π½Π° Π±ΠΎΡΡΡ 16 ΠΠ± ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²ΠΊΠΈ, ΡΠΎ ΠΊΠ»ΡΡΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
-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!
ΠΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ
Π‘ΠΎΡ ΡΠ°Π½Π½ΠΎΡΡΡ Π»ΠΎΠ³ΠΎΠ² ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Persistent Queues.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π‘Ρ Π΅ΠΌΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π»ΠΎΠ³ΠΎΠ²: input β queue β filter + output.
ΠΠ»Π°Π³ΠΈΠ½ input ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π»ΠΎΠ³ΠΎΠ², Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Logstash, ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΡΠΈΠ»ΡΡΡ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ output. ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΎΡ output ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π»ΠΎΠ³Π° 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
, ΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ Persistent Queues ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΡΡΠΈ logstash.yml, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅ΠΉ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ:
queue.type: persisted
queue.max_bytes: 10gb
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Logstash ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡ ΡΠ°ΡΡΠ΅ΠΉ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΡ Π·Π° ΡΠ°Π·Π½ΡΠ΅ ΡΠ°Π·Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π»ΠΎΠ³ΠΎΠ²: ΠΏΡΠΈΡΠΌ (ΡΠ΅ΠΊΡΠΈΡ input), ΠΏΠ°ΡΡΠΈΠ½Π³ (ΡΠ΅ΠΊΡΠΈΡ filter) ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π² Elastic (ΡΠ΅ΠΊΡΠΈΡ output). ΠΠΈΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· Π½ΠΈΡ .
Input
ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Ρ ΡΡΡΡΠΌΠΈ Π»ΠΎΠ³Π°ΠΌΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΎΡ Π°Π³Π΅Π½ΡΠΎΠ² filebeat. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΌΡ ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π² ΡΠ΅ΠΊΡΠΈΠΈ input:
input {
beats {
port => 5044
}
}
ΠΠΎΡΠ»Π΅ ΡΠ°ΠΊΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Logstash Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΠΏΠΎΡΡ 5044, ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡ
ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΡΠ΅ΠΊΡΠΈΠΈ filter. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°Π½Π°Π» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ² ΠΎΡ filebit Π·Π°Π²Π΅ΡΠ½ΡΡΡ Π² SSL. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΠ»Π°Π³ΠΈΠ½Π° beats Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ
Filter
ΠΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ Π»ΠΎΠ³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ 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 ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
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
Π»ΠΎΠ³Π° 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
Π ΡΠ»ΡΡΠ°Π΅ Ρ Π»ΠΎΠ³Π°ΠΌΠΈ ΡΡΡΠΊΠΈΠ½Π³Π° Π·Π°Π΄Π°ΡΠ° ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ 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
Π‘Π΅ΠΊΡΠΈΡ 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}"
}
}
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ:
How to install OpenJDK 11 on Windows? Download Logstash Elastic uses depricated option UseConcMarkSweepGC #36828 NSSM Persistent Queues Beats input plugin Logstash Dude, where’s my chainsaw? I need to dissect my logs Dissect filter plugin Conditionals Mutate filter plugin Date filter plugin Elasticsearch output plugin
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com