αααα»αααααααΏααααααααα»αα’αααΈαααααααααΎααα·αααααααα· 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 αααααααΆαααΈαααα ααααα·αααΎααΆααΆα RAM 16 GB αα
ααΎααααα ααααα ααααΆααα
α»α
ααααΆαααΎαααΊα
-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
αααααΆαααα ααΆααααααααΌαααΆαααα½ααααα
αααα»ααα½α αα
αααααααααααααααΆααααααααΆαααααααααΌαααΆαααΆααααα ααΎαβαααααααααβα’αααΈ Persistent Queues
α§ααΆα αααααααααααα logstash.yml ααα½ααα»αααααΌααααα»αααΆαααα‘αΎααα½αα
queue.type: persisted
queue.max_bytes: 10gb
ααΆααααααααΌα
ααΆαααααααα ααΆαααααααα Logstash ααΆααααααΆααΆαααΈααααα αααααα½ααα»αααααΌαα ααααααααΆααααΆααααααααααΆααααΆαααααΎαααΆααααααα ααα»α αΌαα ααΆαααα½α (ααααααααα αΌα) ααΆαααα (αααααααααα) αα·αααΆααααααΌααα ααΆαα Elastic (ααααααααααα)α ααΆααααααβαααβααΎαβααΉαβαα·αα·αααβα±ααβααΆααααβα αααΆααβα’αααΈβαα½αααΆβααΈαα½αα α
αααα αΌα
ααΎαααα½αααΆαααααααΈαα αΌαααΆαα½αααΉααααααα ααα»αα ααΈααααΆααααΆα filebeat α ααΆααΊααΆαααααα·ααΈαααα½αααααααααΎααααα αΆααα αααα»αααααααααα αΌαα
input {
beats {
port => 5044
}
}
αααααΆααααΈααΆαααααααα
ααΆααααααααααα Logstash α
αΆααααααΎαααααΆααα
ααα 5044 α αΎααα
αααααα½ααααααα ααα» ααααΎαααΆααα½αααΆααΆαααΆααααααααααααααααααα ααΎα
αΆαααΆα
α α’αααα’αΆα
αα»αααΆααααααααΆααααΆαααα½ααααααα ααα»ααΈ filebit αααα»α SSLα ααΌαα’αΆαααααααα’αααΈααΆαααααααααααα·ααΈαααα½α beats
ααααα
αααααα ααα»α’αααααααΆααα’ααααααα½αα±ααα
αΆααα’αΆαααααααααααΆααααααΎαααΆαααα Exchange αααααΎαααΊαα
αααα»ααααααα csv ααΆαα½αααΉαααΆααααααΆααα·αααααΆαα
αααα»αα―αααΆααααααα ααα»αααα½αα―αα αααααΆααααΆααα·ααΆα csv records 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" }
β¦
}
ααΆααΊααΆαααααα αα αΆαααΆαα·ααΈααΆααααααααααΊααααααααααα»αααααααααα·αααΎααΆααα·αααΆααΉαααΆααααααα½αα αααααΎααα·αααααΎαααΆαααααα Null ααΈααΆα α αΎααααααααΈααΎαααααα½αα
αααααΆαααααααα ααα»ααΆαααΆα ααΆααΆααΆααααααΎαααΆααα»αααααΎαα·ααΈααΆααααααααααααααααααααααΆ α
αΆααααΆααααΈααΆα 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 logs ααΎαααΉαααααΌαααΆααααα
αΌααα·ααααααααΆα 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 Dude, ααΎα αααααΆαααααααααα»ααα α―ααΆ? αααα»αααααΌαααΆαααααααααααα ααα»αααααααα»α ααααααααααα·ααΈαααα½αααααα ααααΆαααΆα ααααΆααααααΌααααααα·ααΈαααα½αααααα αααααα·ααΈαααα½ααααααααΆαααα·α αααα αααααα·ααΈαααα½ααααααα Elasticsearch
ααααα: www.habr.com