Elastic Stack · 10 min read · Nov 25, 2025

우분투 18.04 LTS에 Elastic Stack 설치하는 방법

Elasticsearch는 Java로 개발된 Lucene 기반의 오픈 소스 검색 엔진입니다. HTTP 대시보드 웹 인터페이스(Kibana)를 갖춘 분산형 다중 테넌트 전체 텍스트 검색 엔진을 제공합니다. 데이터는 JSON 문서 스키마로 쿼리되고 검색되며 저장됩니다. Elasticsearch는 로그 파일을 포함한 모든 종류의 텍스트 문서를 검색하는 데 사용할 수 있는 확장 가능한 검색 엔진입니다. Elasticsearch는 ‘Elastic Stack’ 또는 ELK Stack의 핵심입니다.

Logstash는 이벤트 및 로그를 관리하기 위한 오픈 소스 도구입니다. 데이터 수집을 위한 실시간 파이프라인을 제공합니다. Logstash는 로그 데이터를 수집하고, 데이터를 JSON 문서로 변환한 후 Elasticsearch에 저장합니다.

Kibana는 Elasticsearch를 위한 오픈 소스 데이터 시각화 도구입니다. Kibana는 멋진 대시보드 웹 인터페이스를 제공합니다. Elasticsearch의 데이터를 관리하고 시각화할 수 있습니다. 아름다울 뿐만 아니라 강력합니다.

이 튜토리얼에서는 서버 로그 모니터링을 위해 우분투 18.04 서버에 Elastic Stack을 설치하고 구성하는 방법을 보여드리겠습니다. 그런 다음 우분투 18.04 및 CentOS 7 클라이언트 서버에 ‘Elastic beats’를 설치하고 구성하는 방법을 보여드리겠습니다.

전제 조건

  • 3대 서버 - ‘elk-master’로 4GB RAM/메모리의 우분투 18.04 - 10.0.15.10
  • ‘elk-client01’로 512MB/1GB RAM/메모리의 우분투 18.04 - 10.0.15.21
  • ‘elk-client02’로 512MB/1GB RAM/메모리의 CentOS 7.5 - 10.0.15.22
  • 루트 권한

우리가 할 일은?

  1. Elastic Stack 설치 1. Java 설치
  2. ElasticSearch 설치 및 구성
  3. Kibana 설치 및 구성
  4. Kibana를 위한 Nginx를 리버스 프록시로 설치 및 구성
  5. Logstash 설치 및 구성
  6. 우분투 18.04에 Filebeat 설치 및 구성
  7. CentOS 7.5에 Filebeat 설치 및 구성
  8. 테스트

1단계 - Elastic Stack 설치

이 첫 번째 단계에서는 ‘elk-master’ 서버에 ‘Elastic Stack’을 설치하고 구성할 것입니다. 따라서 이 단계의 모든 명령과 단계를 ‘elk-master’ 서버에서만 실행하십시오. Elasticsearch, Logstash shipper 및 Nginx 웹 서버와 함께 Kibana 대시보드를 포함하여 Elastic Stack의 각 구성 요소를 설치하고 구성할 것입니다.

Java 설치

Elastic Stack 배포를 위해 Java가 필요합니다. Elasticsearch는 Java 8을 요구합니다. Oracle JDK 1.8을 사용하는 것이 권장되며, PPA 저장소에서 Java 8을 설치할 것입니다.

‘software-properties-common’ 및 ‘apt-transport-https’ 패키지를 설치한 후 PPA ‘webupd8team’ Java 저장소를 추가합니다. 아래의 ‘apt install’ 및 ‘add-apt-repository’ 명령을 실행하십시오.

sudo apt install software-properties-common apt-transport-https -y  
sudo add-apt-repository ppa:webupd8team/java -y

이제 java8-installer를 설치합니다.

sudo apt install oracle-java8-installer -y

설치가 완료되면 Java 버전을 확인합니다.

java -version

Java 1.8이 시스템에 설치되었습니다.

다음으로 Java 환경을 구성합니다. 아래 명령을 사용하여 Java 바이너리 파일을 확인합니다.

update-alternatives --config java

그리고 ‘ /usr/lib/jvm/java-8-oracle ‘ 디렉토리에 Java 바이너리 파일이 있습니다.

이제 ‘profile.d’ 디렉토리 아래에 ‘java.sh’ 프로파일 파일을 생성합니다.

vim /etc/profile.d/java.sh

아래의 Java 환경 구성을 붙여넣습니다.

#Set JAVA_HOME
JAVA_HOME="/usr/lib/jvm/java-8-oracle"
export JAVA_HOME
PATH=$PATH:$JAVA_HOME
export PATH

저장하고 종료합니다.

파일을 실행 가능하게 만들고 구성 파일을 로드합니다.

chmod +x /etc/profile.d/java.sh  
source /etc/profile.d/java.sh

이제 아래 명령을 사용하여 Java 환경을 확인합니다.

echo $JAVA_HOME

그리고 Java 디렉토리가 ‘ /usr/lib/jvm/java-8-oracle ‘ 디렉토리에 위치해 있음을 확인합니다.

Java 구성

Elasticsearch 설치

Java를 설치한 후 Elastic Stack의 첫 번째 구성 요소인 Elasticsearch를 설치합니다.

Elastic Stack 키를 추가하고 시스템에 Elastic 저장소를 추가합니다.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -  
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

이제 저장소를 업데이트하고 아래 명령을 사용하여 Elasticsearch 패키지를 설치합니다.

sudo apt update  
sudo apt install elasticsearch -y

설치가 완료되면 ‘/etc/elasticsearch’ 디렉토리로 이동하여 구성 파일 ‘elasticsearch.yml’을 편집합니다.

cd /etc/elasticsearch/  
vim elasticsearch.yml

‘network.host’ 줄의 주석을 제거하고 값을 ‘localhost’로 변경한 후 Elasticsearch 포트 구성을 위해 ‘http.port’ 줄의 주석을 제거합니다.

network.host: localhost
http.port: 9200

저장하고 종료합니다.

이제 Elasticsearch 서비스를 시작하고 시스템 부팅 시마다 시작되도록 활성화합니다.

systemctl start elasticsearch  
systemctl enable elasticsearch

이제 Elasticsearch가 실행 중이며, netstat 명령과 curl 명령을 사용하여 확인합니다.

netstat -plntu  
curl -XGET 'localhost:9200/?pretty'

이제 Elasticsearch 버전 ‘6.2.4’가 기본 포트 ‘9200’에서 실행 중임을 확인할 수 있습니다.

Elasticsearch 포트 확인

Elasticsearch 설치가 완료되었습니다.

Kibana 대시보드 설치 및 구성

두 번째 구성 요소는 Kibana 대시보드입니다. Elastic 저장소에서 Kibana 대시보드를 설치하고 Kibana 서비스를 로컬호스트 주소에서 실행되도록 구성합니다.

아래의 apt 명령을 사용하여 Kibana 대시보드를 설치합니다.

sudo apt install kibana -y

이제 ‘/etc/kibana’ 디렉토리로 이동하여 구성 파일 ‘kibana.yml’을 편집합니다.

cd /etc/kibana/  
vim kibana.yml

‘서버 포트’, ‘서버 호스트’ 및 ‘elasticsearch.url’ 줄의 주석을 제거합니다.

server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

저장하고 종료합니다.

이제 Kibana 서비스를 시작하고 시스템 부팅 시마다 시작되도록 활성화합니다.

sudo systemctl enable kibana  
sudo systemctl start kibana

Kibana 대시보드가 이제 ‘localhost’ 주소와 기본 포트 ‘5601’에서 실행 중입니다. 아래의 netstat 명령을 사용하여 확인합니다.

netstat -plntu

Kibana 설치

Kibana 대시보드 설치가 완료되었습니다.

Kibana를 위한 Nginx를 리버스 프록시로 설치 및 구성

이 튜토리얼에서는 Kibana 대시보드를 위한 리버스 프록시로 Nginx 웹 서버를 사용할 것입니다.

시스템에 Nginx 및 ‘apache2-utils’ 패키지를 설치합니다.

sudo apt install nginx apache2-utils -y

설치가 완료되면 ‘/etc/nginx’ 구성 디렉토리로 이동하여 ‘kibana’라는 이름의 새로운 가상 호스트 파일을 생성합니다.

cd /etc/nginx/  
vim sites-available/kibana

아래의 Nginx 가상 호스트 구성을 붙여넣습니다.

server {
    listen 80;
 
    server_name elastic-stack.io;
 
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;
 
    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

저장하고 종료합니다.

다음으로 Kibana 대시보드에 접근하기 위한 새로운 기본 인증 웹 서버를 생성합니다. 아래와 같이 htpasswd 명령을 사용하여 기본 인증을 생성합니다.

sudo htpasswd -c /etc/nginx/.kibana-user elastic  
Type the elastic user password

Kibana 가상 호스트를 활성화하고 모든 Nginx 구성을 테스트합니다.

ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/  
nginx -t

오류가 없음을 확인한 후 Nginx 서비스를 시작하고 시스템 부팅 시마다 시작되도록 활성화합니다.

systemctl enable nginx  
systemctl restart nginx

Kibana 대시보드를 위한 Nginx 설치 및 구성은 완료되었습니다.

Nginx 구성

Logstash 설치 및 구성

이 가이드의 Elastic Stack의 마지막 구성 요소는 ‘Logstash’입니다. Logstash를 설치하고 구성하여 클라이언트 소스에서 서버 로그를 중앙 집중화하고, 모든 데이터를 필터링 및 변환한 후 스태시(Elasticsearch)로 전송합니다.

Logstash를 설치하기 전에 서버의 OpenSSL 버전을 확인하십시오.

openssl version -a

이 가이드에서는 OpenSSL ‘1.0.2o’를 사용할 것입니다. OpenSSL 버전 1.1.2를 여전히 사용하고 있다면 Logstash 및 Filebeat SSL 연결에서 오류가 발생할 것입니다.

아래의 apt 명령을 사용하여 Logstash를 설치합니다.

sudo apt install logstash -y

설치가 완료되면 클라이언트 Filebeat에서 Logstash 서버로 로그 데이터 전송을 안전하게 하기 위해 SSL 인증서 키를 생성합니다.

vim을 사용하여 ‘/etc/hosts’ 파일을 편집합니다.

vim /etc/hosts

아래 구성을 추가합니다.

10.0.15.10  elk-master  elk-master

저장하고 종료합니다.

이제 Logstash 구성 디렉토리 ‘/etc/logstash’ 아래에 새로운 SSL 디렉토리를 생성하고 해당 디렉토리로 이동합니다.

mkdir -p /etc/logstash/ssl  
cd /etc/logstash/

아래와 같이 openssl 명령을 사용하여 Logstash용 SSL 인증서를 생성합니다.

openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

Logstash용 SSL 인증서 파일이 ‘/etc/logstash/ssl’ 디렉토리에 생성되었습니다.

다음으로 Logstash용 새로운 구성 파일을 생성합니다. Filebeat에서 입력 파일로 사용할 ‘filebeat-input.conf’, syslog 처리를 위한 ‘syslog-filter.conf’, Elasticsearch 출력을 정의하기 위한 ‘output-elasticsearch.conf’ 파일을 생성합니다.

Logstash 구성 디렉토리로 이동하여 ‘conf.d’ 디렉토리에 ‘filebeat-input.conf’라는 새로운 구성 파일을 생성합니다.

cd /etc/logstash/  
vim conf.d/filebeat-input.conf

아래의 구성을 붙여넣습니다.

input {
  beats {
    port => 5443
    type => syslog
    ssl => true
    ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
    ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
  }
}

저장하고 종료합니다.

Syslog 처리 로그 데이터에 대해 ‘grok’이라는 필터 플러그인을 사용하여 syslog 파일을 구문 분석합니다.

‘ syslog-filter.conf’라는 새로운 구성을 생성합니다.

vim conf.d/syslog-filter.conf

아래의 구성을 붙여넣습니다.

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

저장하고 종료합니다.

Elasticsearch 출력을 위해 ‘output-elasticsearch.conf’라는 구성 파일을 생성합니다.

vim conf.d/output-elasticsearch.conf

아래의 구성을 붙여넣습니다.

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

저장하고 종료합니다.

이 작업이 완료되면 Logstash 서비스를 시작하고 시스템 부팅 시마다 시작되도록 활성화합니다.

sudo systemctl enable logstash  
sudo systemctl start logstash

Logstash 활성화 및 시작

아래의 netstat 및 systemctl 명령을 사용하여 Logstash 서비스를 확인합니다.

netstat -plntu  
systemctl status logstash

Logstash 서비스가 이제 실행 중입니다. 공용 IP 주소에서 포트 ‘5443’로 실행되고 있습니다.

포트 확인

Elastic Stack 설치가 완료되었습니다.

2단계 - 우분투 18.04에 Filebeat 설치 및 구성

이 단계에서는 Elastic Beats 데이터 배송기 ‘Filebeat’를 설치하여 우분투 18.04 클라이언트 ‘elk-client01’을 구성합니다.

시스템에 Filebeat를 설치하기 전에 ‘/etc/hosts’를 편집하고 Logstash 인증서 파일 ‘logstash-forwarder.crt’를 ‘elk-client01’ 서버로 다운로드해야 합니다.

vim 편집기를 사용하여 ‘/etc/hosts’ 파일을 편집합니다.

vim /etc/hosts

아래 구성을 붙여넣습니다.

10.0.15.10      elk-master      elk-master

저장하고 종료합니다.

scp 명령을 사용하여 Logstash 인증서 파일 ‘logstash-forwarder.crt’를 복사합니다.

scp root@elk-master:/etc/logstash/ssl/logstash-forwarder.crt .

Filebeat 설치

다음으로 Elastic Beats ‘Filebeat’를 설치하기 위해 Elastic 키를 추가하고 Elastic 저장소를 추가합니다.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -  
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

저장소를 업데이트하고 아래의 apt 명령을 사용하여 ‘filebeat’ 패키지를 설치합니다.

sudo apt update  
sudo apt install filebeat -y

설치가 완료되면 ‘/etc/filebeat’ 디렉토리로 이동하여 구성 파일 ‘filebeat.yml’을 편집합니다.

cd /etc/filebeat/  
vim filebeat.yml

이제 ‘enabled’ 줄의 값을 ‘true’로 변경하여 Filebeat 프로스펙터를 활성화합니다.

  enabled: true

Logstash 서버로 전송할 시스템 로그 파일을 정의합니다. 이 가이드에서는 ssh 로그 파일 ‘auth.log’와 syslog 파일을 추가합니다.

  paths:
    - /var/log/auth.log
    - /var/log/syslog

기본 ‘elasticsearch’ 출력을 주석 처리하고 아래와 같이 Logstash 출력 줄의 주석을 제거하여 Logstash에 대한 출력을 설정합니다.

output.logstash:
  # The Logstash hosts
  hosts: ["elk-master:5443"]
  ssl.certificate_authorities: ["/etc/filebeat/logstash-forwarder.crt"]

저장하고 종료합니다.

다음으로 ‘filebeat.reference.yml’ 파일을 편집하여 Filebeat 모듈을 활성화하고 ‘syslog’ 모듈을 활성화합니다.

vim filebeat.reference.yml

아래와 같이 Filebeat에 대한 syslog 시스템 모듈을 활성화합니다.

- module: system
  # Syslog
  syslog:
    enabled: true

저장하고 종료합니다.

Logstash 인증서 파일 ‘logstash-forwarder.crt’를 ‘/etc/filebeat’ 디렉토리로 복사합니다.

cp ~/logstash-forwarder.crt /etc/filebeat/logstash-forwarder.crt

Filebeat 설치 및 구성이 완료되었습니다. 이제 Filebeat 서비스를 시작하고 시스템 부팅 시마다 시작되도록 활성화합니다.

systemctl start filebeat  
systemctl enable filebeat

아래 명령을 사용하여 Filebeat 서비스를 확인합니다.

systemctl status filebeat  
tail -f /var/log/filebeat/filebeat

Filebeat 배송기가 우분투 18.04 서버에서 실행 중입니다.

Filebeat 실행 중

3단계 - CentOS 7.5에 Filebeat 설치 및 구성

이 단계에서는 Elastic Beats 데이터 배송기 ‘Filebeat’를 설치하여 CentOS 7.5 클라이언트 ‘elk-client02’를 구성합니다.

시스템에 Filebeat를 설치하기 전에 ‘/etc/hosts’를 편집하고 Logstash 인증서 파일 ‘logstash-forwarder.crt’를 ‘elk-client02’ 서버로 다운로드해야 합니다.

vim을 사용하여 ‘/etc/hosts’ 파일을 편집합니다.

vim /etc/hosts

아래 구성을 붙여넣습니다.

10.0.15.10      elk-master      elk-master

저장하고 종료합니다.

scp 명령을 사용하여 Logstash 인증서 파일 ‘logstash-forwarder.crt’를 복사합니다.

scp root@elk-master:/etc/logstash/ssl/logstash-forwarder.crt .

CentOS에서 Filebeat 설치

다음으로 Elastic Beats ‘Filebeat’를 설치하기 위해 Elastic 키를 추가하고 Elastic 저장소를 추가합니다.

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  
   
cat < /etc/yum.repos.d/elastic.repo  
[elasticsearch-6.x]  
name=Elasticsearch repository for 6.x packages  
baseurl=https://artifacts.elastic.co/packages/6.x/yum  
gpgcheck=1  
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch  
enabled=1  
autorefresh=1  
type=rpm-md  
EOF

아래의 yum 명령을 사용하여 Filebeat를 설치합니다.

yum install filebeat -y

설치가 완료되면 ‘/etc/filebeat’ 디렉토리로 이동하여 구성 파일 ‘filebeat.yml’을 편집합니다.

cd /etc/filebeat/  
vim filebeat.yml

이제 ‘enabled’ 줄의 값을 ‘true’로 변경하여 Filebeat 프로스펙터를 활성화합니다.

  enabled: true

Logstash 서버로 전송할 시스템 로그 파일을 정의합니다. 이 가이드에서는 ssh 로그 파일 ‘auth.log’와 syslog 파일을 추가합니다.

  paths:
    - /var/log/secure
    - /var/log/messages

기본 ‘elasticsearch’ 출력을 주석 처리하고 아래와 같이 Logstash 출력 줄의 주석을 제거하여 Logstash에 대한 출력을 설정합니다.

output.logstash:
  # The Logstash hosts
  hosts: ["elk-master:5443"]
  ssl.certificate_authorities: ["/etc/filebeat/logstash-forwarder.crt"]

저장하고 종료합니다.

다음으로 ‘filebeat.reference.yml’ 파일을 편집하여 Filebeat 모듈을 활성화하고 ‘syslog’ 모듈을 활성화합니다.

vim filebeat.reference.yml

아래와 같이 Filebeat에 대한 syslog 시스템 모듈을 활성화합니다.

- module: system
  # Syslog
  syslog:
    enabled: true

저장하고 종료합니다.

Logstash 인증서 파일 ‘logstash-forwarder.crt’를 ‘/etc/filebeat’ 디렉토리로 복사합니다.

cp ~/logstash-forwarder.crt /etc/filebeat/logstash-forwarder.crt

Filebeat 설치 및 구성이 완료되었습니다. 이제 Filebeat 서비스를 시작하고 시스템 부팅 시마다 시작되도록 활성화합니다.

systemctl start filebeat  
systemctl enable filebeat

아래 명령을 사용하여 Filebeat 서비스를 확인합니다.

systemctl status filebeat  
tail -f /var/log/filebeat/filebeat

Filebeat 배송기가 CentOS 7.5 서버에서 실행 중입니다.

Filebeat 실행 중

4단계 - 테스트

웹 브라우저를 열고 Elastic Stack 도메인 이름을 입력합니다. 제 도메인은 ‘elastic-stack.io’입니다.

Kibana 대시보드에 대한 기본 인증의 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.

사용자 이름 ‘elastic’과 비밀번호를 입력합니다.

이제 아름다운 Kibana 대시보드를 확인할 수 있으며, 오른쪽의 ‘인덱스 패턴 설정’ 버튼을 클릭합니다.

Kibana 대시보드

‘filebeat-*’ 인덱스 패턴을 정의하고 ‘다음 단계’ 버튼을 클릭합니다.

Filebeat 정의

‘시간 필터 필드 이름’으로 ‘@timestamp’를 선택하고 ‘인덱스 패턴 생성’을 클릭합니다.

인덱스 생성

그리고 filebeat 인덱스 패턴이 생성되었습니다.

Filebeat 인덱스 패턴 생성됨

다음으로 각 클라이언트 서버 ‘elk-client01’ 우분투 시스템과 ‘elk-client02’ CentOS 시스템에서 SSH 로그인 실패에 대한 로그 정보를 가져오려고 합니다.

Kibana 대시보드 내에서 ‘발견’ 메뉴를 클릭하여 모든 서버 로그를 가져옵니다.

‘beat.hostname’을 ‘elk-client01’ 서버로 설정하고, ‘source’를 ‘/var/log/auth.log’ 파일로 설정하면 아래와 같은 결과를 얻을 수 있습니다.

로그 결과

그리고 아래는 ‘auth.log’ 파일에서 SSH 실패 비밀번호에 대한 샘플 로그 세부정보입니다.

SSH 로그인 실패

‘elk-client02’ CentOS 서버의 경우, ‘beat.hostname’을 ‘elk-client02’ 서버로 설정하고, ‘source’를 ‘/var/log/secure’ 파일로 설정하면 아래와 같은 결과를 얻을 수 있습니다.

서버 2에 대한 보고서

그리고 아래는 ‘secure’ 파일에서 SSH 실패 비밀번호에 대한 샘플 로그 세부정보입니다.

로그 보고서

Elastic Stack 및 Elastic Beat ‘Filebeat’ 설치 및 구성이 성공적으로 완료되었습니다.

참고

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.