CentOS ํ๊ฒฝ์ Elastic Stack ๊ตฌ์ถํ๊ธฐ
by ๋๋ถ๋00. ์ค์ต ํ๊ฒฝ
Apache 2.0 License ๋ด์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ๋ง ํฌํจ๋ OSS ๋ฒ์ ์ ํ์ฉํ์ฌ ์ค์ตํ์์ต๋๋ค.
- CentOS 7.9
- Elasticsearch OSS 7.10.2
- Logstash OSS 7.10.2
- Kibana OSS 7.10.2
- Filebeat OSS 7.10.2
- Java 11
์ฌ๊ธฐ์๋ ๊ณต์ ํํ์ด์ง์์ ๋ค์ด๋ก๋ ๋ฐ์ ํ CentOS ์๋ฒ๋ก ํ์ผ์ ์ฎ๊ฒจ ์ค์นํ๋ ๋ฐฉ์์ผ๋ก ํ๊ฒฝ์ ๊ตฌ์ถํ์์ผ๋ฉฐ,
๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ๊ฒฝ ๊ตฌ์ถ์ ํ๊ณ ์ถ๋ค๋ฉด ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค.
01. Elasticsearch ํ๊ฒฝ ๊ตฌ์ถ
Elasticsearch ์ค์น
๊ณต์ ํํ์ด์ง์์
Elasticsearch RPM ๋ฒ์ ์ ๋ค์ด๋ก๋ ๋ฐ์ ํ, CentOS ์๋ฒ์ ์
๋ก๋ํฉ๋๋ค.
์๋ฒ์ ์ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด, ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด elasticsearch๋ฅผ ์ค์นํฉ๋๋ค.
sudo rpm --install elasticsearch-oss-7.10.2-x86_64.rpm
์ค์น๊ฐ ์๋ฃ๋๋ฉด, sudo service elasticsearch status
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํฉ๋๋ค.
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ ๋, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๊ฐ ํ๋ฉด์ ํ์ถ๋๋ฉด ์ ์ ์ค์น๋ ๊ฒ์ ๋๋ค.
โ elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://www.elastic.co
Elasticsearch ์คํ ๋ฐ ์ข ๋ฃ
Elasticsearch๋ฅผ rpm์ผ๋ก ์ค์นํ์๋ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ๊ณผ ์ข ๋ฃ๋ฅผ ํ ์ ์์ต๋๋ค.
# ์คํ
sudo -i service elasticsearch start
# ์ข
๋ฃ
sudo -i service elasticsearch stop
Elasticsearch๋ฅผ ์คํ ํ sudo service elasticsearch status
๋ช
๋ น์ด๋ก status๋ฅผ ํ์ธํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
โ elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2023-05-08 17:52:01 KST; 3s ago
Docs: https://www.elastic.co
Main PID: 14541 (java)
CGroup: /system.slice/elasticsearch.service
โโ14541 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=1...
May 08 17:51:53 buildagent002 systemd[1]: Starting Elasticsearch...
May 08 17:52:01 buildagent002 systemd[1]: Started Elasticsearch.
์คํ๋ Elasticsearch์์ ์ ์ ์๋ต์ด ์ค๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด, ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
curl -X GET localhost:9200?pretty
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ์ ์ฌํ ํํ์ JSON ์๋ต์ ํ์ธํ ์ ์์ต๋๋ค.
{
"name" : "buildagent002",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "SO3bsr3CSOC25BJzgpk9Qw",
"version" : {
"number" : "7.10.2",
"build_flavor" : "oss",
"build_type" : "rpm",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
02. Kibana ํ๊ฒฝ ๊ตฌ์ถ
Kibana ์ค์น
Elaticsearch์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณต์ ํํ์ด์ง์์ Kibana RPM ๋ฒ์ ์ ๋ค์ด๋ก๋ ๋ฐ์ ํ, CentOS ์๋ฒ์ ์ ๋ก๋ํฉ๋๋ค.
์๋ฒ์ ์ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด, ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด kibana๋ฅผ ์ค์นํฉ๋๋ค.
sudo rpm --install kibana-oss-7.10.2-x86_64.rpm
Kibana ์ค์ ํ๊ธฐ
ํ์ฌ ์ํ๋ก ์คํํ๋ฉด ์๋ฒ์์ ์คํํ Kibana ๋์๋ณด๋๋ฅผ ์ด์ด๋ณผ ์ ์์ผ๋ฏ๋ก,
Kibana ์ค์ ์ ๋ณ๊ฒฝํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋จผ์ , kibana ์ค์ ํ์ผ์ ์ด์ด์ค๋๋ค.
sudo vi /etc/kibana/kibana.yml
์ฐ์ , ์๋ฒ ์ธ๋ถ์์๋ ์ ์ํ ์ ์๋๋ก host๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
# ...
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
#server.host: "localhost"
server.host: "0.0.0.0"
# ...
๊ทธ๋ค์, elasticsearch๋ฅผ ์ฐ๊ฒฐํด ์ค๋๋ค. ํ์ฌ elasticsearch์ kibana๋ ๋์ผ ์๋ฒ์ ์์ผ๋ฏ๋ก localhost๋ก ํ์์ต๋๋ค.
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://localhost:9200"]
Kibana ์คํ ๋ฐ ์ข ๋ฃ
elasticsearch์ ์ ์ฌํ ํ์์ผ๋ก kibana๋ฅผ ์คํ ๋ฐ ์ข ๋ฃ๋ฅผ ํ ์ ์์ต๋๋ค.
# ์คํ
sudo -i service kibana start
# ์ข
๋ฃ
sudo -i service kibana stop
kibana ์คํ ํ {์๋ฒ IP}:5601
๋ก ์ ์ํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด kibana๊ฐ ์คํ๋ ์น ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ๊ฐ 127.2.3.4
๋ผ๊ณ ํ๋ฉด, 127.2.3.4:5601
๋ก ์ ์ํ๋ฉด ๋ฉ๋๋ค.
03. Logstash ํ๊ฒฝ ๊ตฌ์ถ
Logstash ์ค์น
Logstash๋ ๊ณต์ ํํ์ด์ง์์ RPM ๋ฒ์ ์ ๋ค์ด๋ก๋ํ ํ, CentOS ์๋ฒ์ ์ ๋ก๋ํ์ฌ ์ค์นํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ฒ์ ์ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด, ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด logstash๋ฅผ ์ค์นํฉ๋๋ค.
sudo rpm --install logstash-oss-7.10.2-x86_64.rpm
Logstash๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Java ์ค์น๊ฐ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ Java ์ค์น ๋ฐฉ๋ฒ์ ๋ํด์๋ ์๋ตํฉ๋๋ค. Java ์ค์น ์, ๊ณต์ ํํ์ด์ง์ ์ํฌํธ ๋งคํธ๋ฆญ์ค์์ logstash ๋ฒ์ ์ ๋ฐ๋ผ ์ง์ํ๋ Java ๋ฒ์ ์ ํ์ธํ ๋ค์ ์ค์นํ์๊ธธ ๋ฐ๋๋๋ค.
Logstash ์ค์
input.log
ํ์ผ์ ์ฝ์ด์ output.log
ํ์ผ์ ์ฐ๋๋ก ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ด ํ์ํฉ๋๋ค.
- ์ฝ์ ํ์ผ๊ณผ ํ์ผ์ด ์์นํ๋ ๋๋ ํฐ๋ฆฌ์ ๋ํด logstash๊ฐ ์ฝ๊ณ ์คํํ ์ ์๋ ๊ถํ์ด ํ์ํฉ๋๋ค.
- ์ธ ํ์ผ๊ณผ ํ์ผ์ด ์์นํ๋ ๋๋ ํฐ๋ฆฌ์ ๋ํด logstash๊ฐ ์ธ ์ ์๋ ๊ถํ์ด ํ์ํฉ๋๋ค.
์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ์ ํ์ผ์ /var/log/testlog
์ ์์ฑํ๊ณ ์ธ ํ์ผ์ /var/log/logstash
์ ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋จผ์ input ํ์ผ์ ์์ฑํฉ๋๋ค. vi
๋ช
๋ น์ด๋ฅผ ํตํด ํ์ผ์ ์ด๊ณ ๋ ๋ค์ esc
ํด๋ฆญ ํ :wq
๋ฅผ ์
๋ ฅํ๋ฉด ์์ฑ๋ฉ๋๋ค.
vi /var/log/testlog/input.log
๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ถํ์ ๋ณ๊ฒฝํด ์ค๋๋ค.
sudo chmod 777 /var/log/testlog/input.log
๊ทธ๋ค์, output ํ์ผ์ ์์ฑํฉ๋๋ค.
vi /var/log/logstash/output.log
๊ทธ๋ฆฌ๊ณ output ํ์ผ๋ก ์กฐ๊ฑด์ ๋ง๊ฒ ๊ถํ์ ๋ณ๊ฒฝํด ์ค๋๋ค.
sudo chown logstash:logstash /var/log/logstash/*.log
์ด์ ์ฝ๊ณ ์ธ ํ์ผ์ด ์์ฑ๋์์ผ๋, logstash ์ค์ ์ ์ถ๊ฐํด ์ค์๋ค!
sudo vi /etc/logstash/conf.d/test.conf
test๋ฅผ ์ํ test.conf
ํ์ผ์ ์ด์ด์ ์๋ ๋ด์ฉ์ ์
๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
input {
file {
path => "/var/log/testlog/input.log"
start_position => "beginning"
sincedb_path => "/dev/null"
ignore_older => 0
}
}
output {
file {
path => "/var/log/logstash/output.log"
}
}
output์ file์ด ์๋ elasticsearch๋ก ์ค์ ํ๋ ค๋ฉด ๋ค์๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ํ๋ฉด ๋ฉ๋๋ค.
output {
elasticsearch{
hosts => ["127.0.0.1:9200"]
index => "test-%{+YYYY.MM.dd}"
}
}
Logstash ์คํ ๋ฐ ์ข ๋ฃ
logstash๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ elasticsearch์ kibana์ ์ ์ฌํฉ๋๋ค.
# ์คํ
sudo -i service logstash start
# ์ข
๋ฃ
sudo -i service logstash stop
logstash๋ฅผ ์คํํ ๋ค์ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ์ค์๊ฐ์ผ๋ก ์์ด๋ log๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
tail -f /var/log/logstash/logstash-plain.log
๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธ๊ฐ ๋จ๋ฉด logstash ์คํ์ด ์๋ฃ๋ ๊ฒ์ ๋๋ค.
[2023-05-10T17:16:24,448][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"7.10.2", "jruby.version"=>"jruby 9.2.13.0 (2.5.7) 2020-08-03 9a89c94bcc OpenJDK 64-Bit Server VM 11.0.8+10 on 11.0.8+10 +indy +jit [linux-x86_64]"}
[2023-05-10T17:16:25,713][INFO ][org.reflections.Reflections] Reflections took 24 ms to scan 1 urls, producing 23 keys and 47 values
[2023-05-10T17:16:25,989][INFO ][logstash.javapipeline ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>1000, "pipeline.sources"=>["/etc/logstash/conf.d/test.conf"], :thread=>"#<Thread:0x50e1013f run>"}
[2023-05-10T17:16:26,470][INFO ][logstash.javapipeline ][main] Pipeline Java execution initialization time {"seconds"=>0.47}
[2023-05-10T17:16:26,607][INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"}
[2023-05-10T17:16:26,646][INFO ][filewatch.observingtail ][main][4dc77633e71bb984112a24ec0b874b2227768feace11807fb880a14efd3ebc20] START, creating Discoverer, Watch with file and sincedb collections
[2023-05-10T17:16:26,649][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2023-05-10T17:16:26,795][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
์ค์ ๋ก ๋์ํ๋์ง ํ
์คํธ๋ฅผ ํ๊ธฐ ์ํด, ์์์ ์์ฑํ input.log
ํ์ผ์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
echo "Hello World" >> input.log
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด output.log
ํ์ผ์ ์ด์ด ์ฝ์ด์จ ๋ด์ฉ์ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋ก๊ทธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
[2023-05-10T17:18:27,078][INFO ][logstash.outputs.file ][main][877769ce6ad911efbfb23c362b7171c3bffaf81f60c437ee02823cbf6e1ca9a8] Opening file {:path=>"/var/log/logstash/output.log"}
[2023-05-10T17:18:51,641][INFO ][logstash.outputs.file ][main][877769ce6ad911efbfb23c362b7171c3bffaf81f60c437ee02823cbf6e1ca9a8] Closing file /var/log/logstash/output.log
์ค์ ๋ก ์์ฑ๋์๋์ง vi /var/log/logstash/output.log
๋ฅผ ํตํด ํ์ผ์ ์ด์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด logstash์์ ์ถ๊ฐํ ๋ด์ฉ์ด ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
{"@version":"1","path":"/var/log/testlog/input.log","message":"Hello World","host":"buildagent002","@timestamp":"2023-05-10T08:18:26.927Z"}
04. Filebeat ํ๊ฒฝ ๊ตฌ์ถ
logstash๋ก ์ง์ ํ์ผ์ ์ฝ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, filebeat๋ฅผ ํตํด์ ํ์ผ์ ์ฝ์ ์๋ ์์ต๋๋ค.
filebeat๋ ํ์ผ์ ์ฝ๊ณ ์ ๋ฌํ๋ ๊ฒ์ ํฌํจํ์ฌ logstash ๋๋น ๋จ์ํ๊ณ ์ ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ด ๋ ๊ฐ๋ณ์ต๋๋ค. ์๋ฒ์์ ๋จ์ํ ํ์ผ์ ์ฝ์ด ์ ๋ฌํ๋ ๊ธฐ๋ฅ๋ง ํ์ํ๋ค๋ฉด logstash๋ฅผ ์ค์นํ๋ ๊ฒ๋ณด๋ค filebeat๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
Filebeat ์ค์น
Filebeat๋ ๊ณต์ ํํ์ด์ง์์ RPM ๋ฒ์ ์ ๋ค์ด๋ก๋ ๋ฐ์ ํ, CentOS ์๋ฒ์ ์ ๋ก๋ํ์ฌ ์ค์นํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ฒ์ ์ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด, ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด filebeat๋ฅผ ์ค์นํฉ๋๋ค.
sudo rpm --install filebeat-oss-7.10.2-x86_64.rpm
Filebeat ์ค์
Filebeat๋ฅผ ์คํ ๋ฐ ์ข ๋ฃํ๊ธฐ ์ , Filebeat๋ฅผ ํตํด ์์งํ ํ์ผ ๋ด์ฉ์ Logstash๋ก ์ ๋ฌํ๋๋ก ๊ตฌ์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ , ์ ๋ฌํ logfile์ ์์ฑํด ์ค๋๋ค. ์ด๋, logstash์์์ ๊ฐ์ด ํ์ผ์ ์คํํ ๊ถํ๋ ์ฃผ์ด์ผ ํฉ๋๋ค.
# ์์ฑ
vi /var/log/testlog/input2.log
# ๊ถํ ๋ถ์ฌ
sudo chmod 755 /var/log/testlog/input2.log
๊ทธ๋ค์ input.log ํ์ผ์ logstash๋ก ๋๊ธธ ์ ์๋๋ก filebeat.yml
์ ์์ ํด ๋ด
์๋ค.
๋จผ์ , ์ค์ ํ์ผ์ ์ด์ด์ค๋๋ค.
sudo vi /etc/filebeat/filebeat.yml
๊ทธ๋ค์, ์๋์ ๊ฐ์ด ์ค์ ํ์ผ์ ์์ฑํ์์ต๋๋ค.
# ...
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/testlog/input2.log
#- /var/log/*.log
# ...
multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'
multiline.negate: false
multiline.match: after
# ...
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
๊ฐ ์ค์ ์ ๋ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
filebeat.inputs
: filebeat๋ก ์์งํ๋ ค๋ ๋์์ ๋ํ ์ค์ type
: input type์ผ๋ก, log ๋ฟ๋ง ์๋๋ผ filestream, kafka, redis, S3, container ๋ฑ์ด ์กด์ฌํจenabled
: ์ค์ ํ input type์ ๋ํด ์์งํ ๊ฒ์ธ์ง ์ค์ (true : ์์ง, flase : ๋ฏธ์์ง)paths
: input type์ ๋ํ ๊ฒฝ๋ก ๋ฆฌ์คํธmultiline.pattern
: ์ฌ๋ฌ ์ค ์์ง ํจํด. ์ฌ๊ธฐ์๋ ๋ณต์กํ ์๋ฐ ๋ก๊ทธ์ ๋ง์ถฐ ์ค์ ํ์ต๋๋ค.multiline.negate
: false๋ก ์ค์ ์ pattern์ ์ผ์นํ๋ ์ฐ์๋ ์ค์ ๋ฉํฐ๋ผ์ธ์ผ๋ก ์ธ์ํ๋ฉฐ, true ์ค์ ์ pattern์ ์ผ์นํ์ง ์๋ ์ฐ์๋ ์ค์ ๋ฉํฐ ๋ผ์ธ์ผ๋ก ์ธ์multiline.match
: after๋ก ์ค์ ์ negate์ ๋ง์ถฐ ์์งํ ๋ฉํฐ ๋ผ์ธ์ ์ฑ๊ธ ๋ผ์ธ ๋ค์ ๋ถ์ด๊ณ , before๋ก ์ค์ ์ negate์ ๋ง์ถฐ ์์งํ ๋ฉํฐ ๋ผ์ธ์ ์ฑ๊ธ ๋ผ์ธ ์์ ๋ถ์
output.logstash
: filebeat๋ก ์์งํ ๋ด์ฉ์ ์ ๋ฌ๋ฐ์ ๋์์ ๋ํ ์ค์ ์ผ๋ก, ์ฌ๊ธฐ์๋ logstash๋ก ์ค์ . logstash ์ธ์ elasticsearch, kafka, redis, file ๋ฑ์ด ์กด์ฌhosts
: output ๋์ host ๋ชฉ๋ก- output ์ค์ ์ ํ ๋, logstash ์ธ์ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก output์ ๋ด๋ณด๋ด์ง ์์ผ๋ ค๋ฉด ์ฃผ์ ์ฒ๋ฆฌ ํด์ผ ํฉ๋๋ค. (e.g.
#output.elasticsearch #...
)
Logstash Input์ Filebeat๋ก ์ค์ - ๋ค์ค ํ์ดํ๋ผ์ธ
filebeat์ output์ logstash๋ก ์ค์ ํ์ผ๋ฏ๋ก, logstash์์ filebeat๋ฅผ ํตํด input์ ๋ฐ๋๋ก ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ๊ธฐ์กด์ file์ ํตํด ์ผ์ด์ค๋ ๋ถ๋ถ์ ์ ์งํ ์ฑ, beat์ ๋ํ ์ค์ ์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ค์ค ํ์ดํ๋ผ์ธ์ผ๋ก ์ค์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ค ํ์ดํ๋ผ์ธ ์ค์ ์ ์ํด pipelines.yml
์ ์ด์ด์ค๋๋ค.
sudo vi /etc/logstash/pipelines.yml
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ์ผ์ ์์ ํฉ๋๋ค.
#- pipeline.id: main
# path.config: "/etc/logstash/conf.d/*.conf"
- pipeline.id: test1
path.config: "/etc/logstash/conf.d/test.conf"
- pipeline.id: test2
path.config: "/etc/logstash/conf.d/test2.conf"
์ด์ , logstash์์ filebeat๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ก test2.conf
ํ์ผ์ ์์ฑํ์ฌ ์ค์ ํด ๋ด
์๋ค.
sudo vi /etc/logstash/conf.d/test2.conf
filebeat๋ฅผ ํตํ ์์ง์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
input {
beats{
port => 5044
}
}
output {
file {
path => "/var/log/logstash/output2.log"
}
}
๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ output2.log๋ ์์ฑํฉ๋๋ค. ์ด๋, logstash์์ ์ฝ์ ์ ์๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
# ์์ฑ
sudo vi /var/log/logstash/output2.log
# ๊ถํ ๋ถ์ฌ
sudo chown logstash:logstash /var/log/logstash/*.log
๊ทธ๋ค์ logstash๋ฅผ ์ฌ์์ํ๊ณ , file์ ํตํ ์ ๋ ฅ์ด ์ ์์ ์ผ๋ก ์ํ๋๋์ง ํ์ธํด ๋ด ์๋ค.
# ์ฌ์์
sudo -i service logstash restart
# input.log ํ์ผ ๋ด์ ๋ด์ฉ ์ถ๊ฐ
echo "multi pipeline test" >> input.log
# output.log ์ถ๋ ฅ
cat /var/log/logstash/output.log
# output.log ์ถ๋ ฅ ๊ฒฐ๊ณผ ๋ด์ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋์ด ์์
{"host":"buildagent002","@version":"1","message":"multi pipeline test","@timestamp":"2023-05-11T04:52:05.096Z","path":"/var/log/testlog/input.log"}
์ ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ์ผ๋ฏ๋ก ์ด์ filebeat๋ฅผ ์คํํ๊ณ ํ ์คํธ๋ฅผ ์งํํด ๋ด ์๋ค. ํด๋น ๋ด์ฉ์ ์๋์์ ํ์ธํ ์ ์์ต๋๋ค!
Filebeat ์คํ ๋ฐ ์ข ๋ฃ
๋ค๋ฅธ Elastic Stack ์ ํ๊ตฐ๊ณผ ์ ์ฌํ๊ฒ Filebeat๋ฅผ ์คํํ ์ ์์ต๋๋ค.
# ์คํ
sudo -i service filebeat start
# ์ข
๋ฃ
sudo -i service filebeat stop
๊ทธ๋ค์ ์๋ ๋ด์ฉ์ input2.log ๋ด์ ์ถ๊ฐํด ์ค๋๋ค.
echo -e "2023-05-11 13:54:30.123 ERROR [HomeController] I/O error on POST request for \"http://localhost:9090\"; Connect to failed; connect timed out\n at org.springframework\n at org.spring.framework\nCaused by: org.apache.http.conn\n at org.apache.http\n at org.apache.http\n ... 1 more" > input2.log
๊ทธ๋ค์ cat
๋ช
๋ น์ด๋ฅผ ํตํด output2.log๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํด ๋ณด๋ฉด, ์๋์ ๊ฐ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ํด๋น ๋ฐ์ดํฐ์ "message" ๋ถ๋ถ์ ๋ณด๋ฉด, ์
๋ ฅํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
# ํ์ผ ๋ด์ฉ ๋ณด๊ธฐ
cat /var/log/logstash/output2.log
# ์ถ๋ ฅ๋ ํ์ผ ๋ด์ฉ
{"@version":"1","log":{"offset":287,"flags":["multiline"],"file":{"path":"/var/log/testlog/input2.log"}},"tags":["beats_input_codec_plain_applied"],"host":{"name":"buildagent002","architecture":"x86_64","id":"52a8654f14a0436b88623af1d800154a","mac":["fa:16:3e:28:0e:d2"],"containerized":false,"ip":["10.5.187.114","fe80::f816:3eff:fe28:ed2"],"os":{"version":"7 (Core)","name":"CentOS Linux","codename":"Core","kernel":"3.10.0-1160.el7.x86_64","platform":"centos","family":"redhat"},"hostname":"buildagent002"},"@timestamp":"2023-05-11T05:09:42.525Z","input":{"type":"log"},"agent":{"version":"7.10.2","name":"buildagent002","id":"5da5758f-13a9-45f2-9ad4-f6028ba03886","type":"filebeat","ephemeral_id":"93a3c224-5490-4847-be02-80e6b7e01899","hostname":"buildagent002"},"cloud":{"machine":{"type":"8vCPU_RAM64GB_Disk100GB_huge"},"provider":"openstack","instance":{"id":"i-0000aaa1","name":"buildagent002.kr.hmgcloud.com"},"availability_zone":"Reserve-Zone"},"message":"2023-05-11 13:54:30.123 ERROR [HomeController] I/O error on POST request for \"http://localhost:9090\"; Connect to failed; connect timed out\n at org.springframework\n at org.spring.framework\nCaused by: org.apache.http.conn\n at org.apache.http\n at org.apache.http\n ... 1 more","ecs":{"version":"1.6.0"}}
์ฐธ๊ณ
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/rpm.html#install-rpm
- https://www.elastic.co/guide/en/kibana/7.10/rpm.html
- https://cjy6179.tistory.com/29
- https://www.elastic.co/guide/en/logstash/7.10/installing-logstash.html
- https://www.elastic.co/guide/en/logstash/7.10/dir-layout.html
- https://kangmyounghun.blogspot.com/2018/04/logstash-service.html
- https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html
- ์๋ผ์คํฑ ์คํ ๊ฐ๋ฐ๋ถํฐ ์ด์๊น์ง
'ELK' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Elasticsearch Cluster ์ค์ ํ๊ธฐ (0) | 2023.06.11 |
---|
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋