Post

ELK 구축 실습

ELK 구축 실습

ELK(ElasticSearch, Logstash, Kibana)?

|10xNaN|781x180

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
This post is licensed under CC BY 4.0 by the author.