Exchange์ ELK ์น๊ตฌ๋ฅผ ์ฌ๊ท๋ ๋ฐฉ๋ฒ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๊ณ์ํฉ๋๋ค.
ELK ์คํ์ Logstash๋ ๋ก๊ทธ๋ฅผ ์ง๋ฅ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ๋ฌธ์ ํ์์ผ๋ก Elastic์ ๋ฐฐ์นํ ์ ์๋๋ก ์ค๋นํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Kibana์์ ๋ค์ํ ์๊ฐํ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
์ค์น
๋ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- OpenJDK ํจํค์ง ์ค์น ๋ฐ ๊ตฌ์ฑ
- Logstash ํจํค์ง ์ค์น ๋ฐ ๊ตฌ์ฑ
OpenJDK ํจํค์ง ์ค์น ๋ฐ ๊ตฌ์ฑ
OpenJDK ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ํน์ ๋๋ ํฐ๋ฆฌ์ ์์ถ์ ํ์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๋๋ ํฐ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ Windows ์ด์ ์ฒด์ ์ $env:Path ๋ฐ $env:JAVA_HOME ๋ณ์์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
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 ํ๋ก์ธ์ค์ RAM ํ ๋น์ ๋ด๋นํ๋ ์์ ์ฌํญ์
๋๋ค. ์๋ฒ RAM์ ์ ๋ฐ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ณด๋์ 16GB 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๋ฅผ ์์ ํ๊ธฐ ์์ํ๊ณ ๋ก๊ทธ๋ฅผ ์์ ํ ๋ ํํฐ ์น์
์ ์ค์ ์ ๋ฐ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ SSL์ filebit์์ ๋ก๊ทธ๋ฅผ ์์ ํ๊ธฐ ์ํด ์ฑ๋์ ๋ํํ ์ ์์ต๋๋ค. 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
ํธ์ง ์์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ถ์์ ํ์ฉํ์ง ์๋ ํ๋์ ๊ฑด์ค ํ์ฅ์ฒ๋ผ ๋ณด์ผ ๊ฒ์ ๋๋ค.
์ด์ ๋ก๊ทธ ์ฒ๋ฆฌ ํ๋ก์ธ์ค์ ์ฝ๊ฐ์ ๋ง๋ฒ์ ์ถ๊ฐํ ์๊ฐ์ ๋๋ค.
์ซ์ ํ๋ ๋ณํ
ํด๋ถ ํ๋ฌ๊ทธ์ธ์๋ ์ต์
์ด ์์ต๋๋ค convert_datatype
, ํ
์คํธ ํ๋๋ฅผ ๋์งํธ ํ์์ผ๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
dissect {
โฆ
convert_datatype => { "time-taken" => "int" }
โฆ
}
์ด ๋ฐฉ๋ฒ์ ํ๋์ ํ์คํ ๋ฌธ์์ด์ด ํฌํจ๋ ๊ฒฝ์ฐ์๋ง ์ ํฉํ๋ค๋ ์ ์ ๊ธฐ์ตํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด ์ต์ ์ ํ๋์ Null ๊ฐ์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉฐ ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค.
๋ก๊ทธ๋ฅผ ์ถ์ ํ๋ ค๋ฉด ์ ์ฌํ ๋ณํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. recipient-count
ะธ total-bites
๋น์ด ์์ ์ ์์ต๋๋ค. ์ด ํ๋๋ฅผ ๋ณํํ๋ ค๋ฉด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค
mutate {
convert => [ "total-bytes", "integer" ]
convert => [ "recipient-count", "integer" ]
}
receive_address๋ฅผ ๊ฐ๋ณ ์์ ์๋ก ๋ถํ
์ด ๋ฌธ์ ๋ mutate ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์๋ ์์ต๋๋ค.
mutate {
split => ["recipient_address", ";"]
}
ํ์์คํฌํ ๋ณ๊ฒฝ
๋ก๊ทธ ์ถ์ ์ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฝ๊ฒ ํด๊ฒฐ๋ฉ๋๋ค. timestamp
ํ๋์์ ํ์ํ ํ์์ผ๋ก ๋ ์ง ๋ฐ ์๊ฐ date-time
:
date {
match => [ "date-time", "ISO8601" ]
timezone => "Europe/Moscow"
remove_field => [ "date-time" ]
}
IIS ๋ก๊ทธ์ ๊ฒฝ์ฐ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํด์ผ ํฉ๋๋ค. date
ะธ time
mutate ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ํ์ํ ์๊ฐ๋๋ฅผ ๋ฑ๋กํ๊ณ ์ด ํ์์คํฌํ๋ฅผ 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}"
}
}
์ ์ฉํ ๋งํฌ :
Windows์ OpenJDK 11์ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๋ก๊ทธ์คํ์ ๋ค์ด๋ก๋ Elastic์์๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ต์ UseConcMarkSweepGC #36828์ ์ฌ์ฉํฉ๋๋ค. NSSM ์ง์ ๋๊ธฐ์ด Beats ์ ๋ ฅ ํ๋ฌ๊ทธ์ธ Logstash ์ผ, ๋ด ์ ๊ธฐํฑ์ ์ด๋ ์์ง? ๋ด ๋ก๊ทธ๋ฅผ ๋ถ์ํด์ผ ํด์ ํด๋ถ ํํฐ ํ๋ฌ๊ทธ์ธ ์กฐ๊ฑด๋ถ ํํฐ ํ๋ฌ๊ทธ์ธ ๋ณํ ๋ ์ง ํํฐ ํ๋ฌ๊ทธ์ธ Elasticsearch ์ถ๋ ฅ ํ๋ฌ๊ทธ์ธ
์ถ์ฒ : habr.com