ELK 구축 실습
ELK(ElasticSearch, Logstash, Kibana)?
ELK Stack
ELK란 ElasticSearch, Logstash, Kibana의 앞글자를 따서 만들어진 용어이다. ELK Stack은 다양한 시스템과 애플리케이션에서 로그를 집계하고 이를 분석 및 시각화하여 분석할 수 있게 해준다
ELK Stack 역할
ELK Stack의 각 역할은 아래와 같다.
- ElasticSearch
- 저장 및 검색
- Logstash
- 로그 수집, 가공, 전달
- Kibana
- 시각화 및 관리
- Beats
- File, Windows Event, Network Packet 등 다양한 항목을 수집할 수 있는 경량화된 수집기
ElasticSearch 설치
1
2
3
4
5
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-8.17.3-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-8.17.3-linux-x86_64.tar.gz
cd elasticsearch-8.17.3/
ElasticSearch 다운로드 및 압축 해제 후 아래 명령어를 통해 실행할 수 있다.
1
./bin/elasticsearch
ElasticSearch 실행 후 curl 을 통해 9200 포트로 요청을 보내보면 아래처럼 Empty reply from server로 출력된다.
1
2
curl -X GET 10.0.0.191:9200
curl: (52) Empty reply from server
이는 X-Pack 이라는 ElasticSearch 확장 모듈로 인해 SSL 통신 및 인증 기능이 기본적으로 적용이 되어있기 때문에 발생한다. 정상적으로 응답을 얻기 위해서는 아래처럼 SSL 통신 및 기본 계정인 elastic 계정으로 인증을 진행해야 한다.
※ 패스워드를 재설정 하기 위해서는 ./bin/elasticsearch-reset-password 통해서 초기화 진행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl -k -X GET https://elastic:[REDACTED]@10.0.0.191:9200
{
"name" : "heogi-ubuntu",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "Ljq8L-k6T2yRFXScyWb1MA",
"version" : {
"number" : "8.17.3",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "a091390de485bd4b127884f7e565c0cad59b10d2",
"build_date" : "2025-02-28T10:07:26.089129809Z",
"build_snapshot" : false,
"lucene_version" : "9.12.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
Elasticsearch 서비스 등록
Elasticsearch 설치 후 서비스 등록을 위해 elasticsearch.service을 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$vim /lib/systemd/system/elasticsearch.service
[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=elastic
Group=elastic
ExecStart=/usr/local/ELK/elasticsearch-8.17.3/bin/elasticsearch
Restart=always
LimitNOFILE=65535
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
Kibana 설치
Kibana 설치를 위해 공식 문서 가이드를 따라 설치를 진행한다.
1
2
3
4
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.17.3-linux-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-8.17.3-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c
tar -xzf kibana-8.17.3-linux-x86_64.tar.gz
cd kibana-8.17.3/
Kibana 다운로드 및 압축 해제 후 아래 명령어를 통해 실행할 수 있다.
1
./bin/kibana
Kibana 서비스 등록
Kibana 설치 후 서비스 등록을 위해 kibana.service을 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$vim /lib/systemd/system/kibana.service
[Unit]
Description=Elasticsearch Kibana
Documentation=https://www.elastic.co/kr/products/kibana
Wants=network-online.target
After=network-online.target
[Service]
Environment=KIBANA_HOME=/usr/local/ELK/kibana-8.17.3
Environment=KIBANA_PATH_CONF=/usr/local/ELK/kibana-8.17.3/config
ExecStart=/usr/local/ELK/kibana-8.17.3/bin/kibana --allow-root
RestartSec=3
[Install]
WantedBy=multi-user.target
Kibana 실행 후 localhost:5061 로 접속해보면 아래와 같은 화면을 확인할 수 있다. 
Logstash 설치
logstash 설치를 위해 공식 문서 가이드를 따라 설치를 진행한다.
1
2
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.17.4-linux-x86_64.tar.gz
tar -xzf logstash-8.17.4-linux-x86_64.tar.gz
Logstash 서비스 등록
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# /etc/systemd/system/logstash.service
[Unit]
Description=logstash
[Service]
Type=simple
User=elastic
Group=elastic
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/logstash
EnvironmentFile=-/etc/sysconfig/logstash
# 뒷 부분에 f 옵션으로 위에서 만들어준 설정 파일로 실행되도록 지정해준다.
ExecStart=/usr/local/ELK/logstash-8.17.4/bin/logstash "--path.settings" "/etc/logstash" -f /etc/logstash/logstash-sample.conf
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384
# When stopping, how long
# Keep in mind that SIGKILL on a process can cause data loss.
TimeoutStopSec=infinity
[Install]
WantedBy=multi-user.target
logstash는 input {} 플러그인으로 수집할 로그에 대한 설정을 하고 , filter {} 를 통해 수집한 로그에 대한 전처리를 진행하며 output {} 을 통해 수집한 로그를 특정 목적지로 전송하도록 설정한다.
각 플러그인에 대한 설정 값은 아래 문서에 정리가 되어있다.
- https://www.elastic.co/docs/reference/logstash/plugins

