ΠŸΡ€ΠΈΡΡ‚Π΅Π»ΡΡ‚Π²ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ELK ΠΈ Exchange. Част 2

ΠŸΡ€ΠΈΡΡ‚Π΅Π»ΡΡ‚Π²ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ELK ΠΈ Exchange. Част 2

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌ Ρ€Π°Π·ΠΊΠ°Π·Π° си Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ° Exchange ΠΈ ELK (Π½Π°Ρ‡Π°Π»ΠΎ Ρ‚ΡƒΠΊ). Напомням, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ комбинация Π±Π΅Π· ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ голямо количСство Π»ΠΎΠ³ΠΎΠ²Π΅. Π’ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° настроим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Exchange с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ Logstash ΠΈ Kibana.

Logstash Π² стСка ELK сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ тяхната ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π² Elastic ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, Π½Π° Π±Π°Π·Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Kibana.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅

Π‘ΡŠΡΡ‚ΠΎΠΈ сС ΠΎΡ‚ Π΄Π²Π° Π΅Ρ‚Π°ΠΏΠ°:

  • Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ ΠΈ настройка Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° OpenJDK.
  • Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ ΠΈ настройка Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Logstash.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ ΠΈ настройка Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° OpenJDK

ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ OpenJDK трябва Π΄Π° бъдС ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ ΠΈ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° дирСктория. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡŠΡ‚ΡΡ‚ Π΄ΠΎ Ρ‚Π°Π·ΠΈ дирСктория трябва Π΄Π° бъдС Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ $env:Path ΠΈ $env:JAVA_HOME Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Windows:

ΠŸΡ€ΠΈΡΡ‚Π΅Π»ΡΡ‚Π²ΠΎΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ 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 , отговарящи Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° 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 услуга. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° NSSM:

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 ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Ρ‚Ρ€ΠΈ плъгина: dissect, 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:

mutate {
  convert => [ "total-bytes", "integer" ]
  convert => [ "recipient-count", "integer" ]
}

РаздСлянС Π½Π° recipient_address Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈ

Π’Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½Π° ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠ»Π°Π³ΠΈΠ½Π° mutate:

mutate {
  split => ["recipient_address", ";"]
}

ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° врСмСвия ΠΏΠ΅Ρ‡Π°Ρ‚

ΠŸΡ€ΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° Ρ‚Ρ€Π°ΠΊΠΈΠ½Π³, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½Π° лСсно с ΠΏΠ»Π°Π³ΠΈΠ½Π° date, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС запишС Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ 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 сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ»Π°Π³ΠΈΠ½ elasticsearch, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС посочва адрСса Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½ΡŠΡ‚ Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° индСкса Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° формирования Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster