기술 가이드

CentOS 8에 Elastic Stack(Elasticsearch, Logstash, Kibana) 설치 및 Filebeat 구성 가이드

8 min read 로그/모니터링 업데이트됨 18 Oct 2025
CentOS 8에 Elastic Stack 설치 및 Filebeat 구성
CentOS 8에 Elastic Stack 설치 및 Filebeat 구성

소개

Elasticsearch는 Java 기반의 오픈소스 검색 엔진으로 Lucene을 기반으로 개발되었습니다. 분산형이면서 멀티테넌트(full-text) 검색을 제공하며 JSON 문서를 사용해 데이터를 조회하고 저장합니다. Elasticsearch는 로그 파일을 포함한 다양한 텍스트 문서 검색에 적합하며 Elastic Stack(이전 명칭 ELK Stack)의 핵심 구성 요소입니다.

Logstash는 이벤트와 로그를 처리하는 오픈소스 파이프라인 도구입니다. 실시간으로 데이터를 수집하고 JSON 문서로 변환한 뒤 Elasticsearch로 전송할 수 있습니다.

Kibana는 Elasticsearch용 데이터 시각화 도구입니다. 웹 대시보드를 통해 Elasticsearch 데이터를 관리하고 시각화할 수 있습니다.

이 튜토리얼에서는 CentOS 8 서버에 Elastic Stack을 설치하고 설정하는 전체 과정을 설명합니다. 또한 Ubuntu와 CentOS 클라이언트에 Filebeat를 설치하여 로그를 수집하고 Logstash로 포워딩하는 방법도 다룹니다.

중요: 이 가이드는 실습용 예시 구성입니다. 운영 환경에서는 추가적인 보안(인증서, 방화벽, 역할 기반 접근 제어) 및 리소스 튜닝이 필요합니다.

주요 용어 1줄 요약

  • Elasticsearch: 분산 검색 엔진(문서 저장·조회).
  • Logstash: 로그/이벤트 파이프라인(입력→필터→출력).
  • Kibana: Elasticsearch 데이터 시각화 대시보드.
  • Filebeat: 가벼운 로그 수집기(클라이언트 에이전트).

지원되는 환경(이 튜토리얼 예시)

  • elk-master: CentOS 8 (64-bit) · RAM 4GB
  • client01: CentOS 8 (64-bit) · RAM 1GB
  • client02: Ubuntu 18.04 (64-bit) · RAM 1GB

이 가이드에서 수행할 작업

  • Elastic 리포지터리 추가(Elastic 공식)
  • Elasticsearch 설치 및 기본 구성
  • Kibana 설치 및 기본 구성
  • Nginx를 이용한 Kibana 리버스 프록시 및 기본 인증 설정
  • Logstash 설치 및 beats 입력·grok 필터·Elasticsearch 출력 구성
  • Filebeat 설치(클라이언트) 및 Logstash로 전달 설정
  • 테스트 및 대시보드 연결

단계 1 — Elastic 리포지터리 추가

먼저 CentOS 8 서버(elk-master)에 Elastic의 GPG 키와 리포지터리를 추가합니다. 이를 통해 Elasticsearch, Logstash, Kibana, Beats 패키지를 dnf로 설치할 수 있습니다.

다음 명령으로 GPG 키를 가져옵니다.

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

그 다음 ‘/etc/yum.repos.d’ 디렉터리로 이동해 ‘elasticsearch.repo’ 파일을 생성합니다.

cd /etc/yum.repos.d/
vim elasticsearch.repo

다음 내용을 붙여 넣습니다.

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

저장 후 dnf로 리포지터리 목록을 확인합니다.

dnf repolist

DNF 리포지터리 목록 출력 스크린샷

Notes: 리포지터리를 추가하면 Elastic 제품을 시스템에 설치할 준비가 됩니다.


단계 2 — Elasticsearch 설치 및 기본 구성

이제 Elasticsearch를 설치하고 간단히 구성합니다. 운영 환경에서는 클러스터 설정과 메모리/디스크 튜닝을 별도로 계획해야 합니다.

설치 명령:

sudo dnf install elasticsearch -y

설치 후 구성 파일은 ‘/etc/elasticsearch/elasticsearch.yml’입니다.

cd /etc/elasticsearch/
vim elasticsearch.yml

기본 테스트용 구성으로 다음 항목을 주석 해제하고 값 변경합니다.

network.host: 127.0.0.1
http.port: 9200

운영에서는 network.host를 노드 IP 또는 0.0.0.0(주의)로 설정하고 방화벽/인증을 함께 구성해야 합니다.

선택(힙 메모리 튜닝): JVM 힙 사이즈를 서버 메모리에 맞춰 조정합니다.

vim /etc/elasticsearch/jvm.options

예시(테스트 환경은 512MB):

-Xms512m
-Xmx512m

시스템 데몬을 리로드하고 Elasticsearch를 부팅 시 자동 시작하도록 설정합니다.

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Elasticsearch 시작 스크린샷

Elasticsearch가 로컬 주소(127.0.0.1)와 포트 9200으로 동작하는지 확인합니다.

curl -XGET 'http://127.0.0.1:9200/?pretty'

Elasticsearch 연결 테스트 결과

중요: 운영 환경에서는 보안(Transport Layer Encryption, 인증서, X-Pack 보안 또는 Elastic Stack의 보안 기능)을 반드시 활성화하세요.


단계 3 — Kibana 설치 및 구성

Kibana는 Elasticsearch 데이터를 시각화하는 대시보드입니다. 기본적으로 웹 인터페이스는 5601 포트를 사용합니다.

설치 명령:

sudo dnf install kibana -y

설정 파일: ‘/etc/kibana/kibana.yml’

cd /etc/kibana/
vim kibana.yml

테스트 구성 예시(로컬 바인딩):

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

Kibana를 부팅 시 자동 시작하도록 설정하고 실행합니다.

sudo systemctl enable kibana
sudo systemctl start kibana

Kibana 설치 스크린샷

서비스 상태와 포트 리스닝을 확인합니다.

systemctl status kibana
netstat -plntu

Kibana 상태 확인 스크린샷

중요: 기본 구성은 로컬 바인딩입니다. 외부에서 접근하려면 서버 바인딩 및 인증(리버스 프록시 + 기본 인증 또는 Elastic 보안)을 고려하세요.


단계 4 — Nginx로 Kibana에 대한 리버스 프록시 설정

Kibana에 직접 공개하지 않고 Nginx를 리버스 프록시로 앞단에 두어 인증 및 TLS 처리를 담당하게 할 수 있습니다. 이 예시는 기본 인증을 사용한 단순한 설정입니다.

Nginx 설치:

sudo dnf install nginx httpd-tools -y

Nginx 구성 파일 생성:

cd /etc/nginx/conf.d/
vim kibana.conf

예제 구성(호스트명은 환경에 맞게 변경):

server {
    listen 80;

    server_name elk.hakase-labs.io;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;

    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

기본 인증 사용자 파일 생성(예: hakase 대신 운영 사용자로 변경):

sudo htpasswd -c /etc/nginx/.kibana-user hakase
TYPE YOUR PASSWORD

Nginx 설정 테스트 및 서비스 시작:

nginx -t
sudo systemctl enable nginx
sudo systemctl start nginx

Nginx 설정 스크린샷

권장: 실제 운영에서는 TLS(HTTPS)를 적용하세요. Let’s Encrypt나 사설 PKI를 사용해 Nginx에서 SSL을 종단시키고 강력한 암호화 설정을 사용하세요.


단계 5 — Logstash 설치 및 파이프라인 구성

Logstash는 여러 입력(beats, syslog 등)을 받아 필터(grok, date 등)를 거쳐 Elasticsearch로 출력하는 역할을 합니다.

설치:

sudo dnf install logstash -y

Logstash도 JVM 힙을 환경에 맞게 조정합니다.

cd /etc/logstash/
vim jvm.options

예시:

-Xms512m
-Xmx512m

Logstash 구성은 ‘/etc/logstash/conf.d/‘ 아래에 나뉘어진 파일들로 작성합니다. 먼저 beats 입력을 위한 ‘input-beat.conf’를 생성합니다.

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

내용:

input {
  beats {
    port => 5044
  }
}

syslog 메시지를 파싱하기 위한 grok 필터(예: ‘syslog-filter.conf’):

vim 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 output-elasticsearch.conf

내용(예시):

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

Logstash 서비스를 부팅 시 시작하도록 설정하고 실행합니다.

sudo systemctl enable logstash
sudo systemctl start logstash

Logstash 설정 스크린샷

Logstash가 포트 5044로 수신 중인지 확인합니다.

systemctl status logstash
netstat -plntu

Logstash 상태 스크린샷

중요: grok 패턴은 로그 형식에 따라 달라집니다. 형식이 다른 로그에는 별도의 grok 패턴이나 multiline 설정을 사용하세요.


단계 6 — Filebeat 설치(클라이언트) 및 구성

Filebeat는 클라이언트 쪽에서 로그 파일을 수집해 Logstash 또는 Elasticsearch로 전송하는 경량 에이전트입니다. 아래는 CentOS 8과 Ubuntu 18.04에 Filebeat를 설치하는 방법과 Logstash로 전송하도록 구성하는 절차입니다.

CentOS 8에 Filebeat 설치

리포지터리 추가 및 GPG 키 가져오기(이미 마스터에 추가했다면 클라이언트에도 동일하게 수행):

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

리포지터리 파일 생성:

cd /etc/yum.repos.d/
vim elasticsearch.repo

내용(마스터와 동일):

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Filebeat 설치:

sudo dnf install filebeat -y

설치 완료 화면 예시:

Filebeat 설치 스크린샷

Ubuntu 18.04에 Filebeat 설치

먼저 apt-transport-https 설치:

sudo apt install apt-transport-https -y

GPG 키와 리포지터리 추가:

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

패키지 인덱스 갱신 후 Filebeat 설치:

sudo apt update
sudo apt install filebeat -y

설치 스크린샷 예시:

Ubuntu에서 apt-transport-https 설치 스크린샷

Filebeat 구성

Filebeat 메인 설정 파일은 ‘/etc/filebeat/filebeat.yml’입니다. 기본적으로 직접 Elasticsearch로 전송하도록 설정되어 있으므로 Logstash로 전송하도록 변경해야 합니다.

cd /etc/filebeat/
vim filebeat.yml

Elasticsearch 출력 주석 처리(비활성화):

#output.elasticsearch:
  # Array of hosts to connect to.
  #  hosts: ["127.0.0.1:9200"]

Logstash 출력 활성화 및 Logstash 호스트 지정(예시 IP는 환경에 맞게 변경):

output.logstash:
  # The Logstash hosts
  hosts: ["10.5.5.25:5044"]

Filebeat 모듈 목록을 확인하고 ‘system’ 모듈을 활성화합니다.

filebeat modules list
filebeat modules enable system

활성화된 모듈 설정은 ‘modules.d/system.yml’에 생성됩니다. 이 파일을 편집해 로그 파일 경로를 운영체제에 맞게 지정합니다.

cd /etc/filebeat/
vim modules.d/system.yml

CentOS(예시):

  # Syslog
  syslog:
    enabled: true
    var.paths: ["/var/log/messages"]

  # Authorization logs
  auth:
    enabled: true
    var.paths: ["/var/log/secure"]

Ubuntu(예시):

  # Syslog
  syslog:
    enabled: true
    var.paths: ["/var/log/syslog"]

  # Authorization logs
  auth:
    enabled: true
    var.paths: ["/var/log/auth.log"]

Filebeat 서비스 등록 및 시작:

sudo systemctl enable filebeat
sudo systemctl start filebeat

서비스 상태 확인:

systemctl status filebeat

CentOS 결과 예시:

CentOS에서 Filebeat 서비스 상태 스크린샷

Ubuntu 결과 예시:

Ubuntu에서 Filebeat 서비스 상태 스크린샷

이제 Filebeat가 Logstash(예시 IP: 10.5.5.12)로 로그를 전송하면 Logstash가 이를 처리해 Elasticsearch에 색인합니다.


단계 7 — 테스트 및 Kibana에서 데이터 확인

브라우저에서 Kibana에 접속합니다(예: http://elk.hakase-labs.io/). Nginx를 설정한 경우 기본 인증으로 보호됩니다.

로그인 후 Kibana 대시보드로 이동해 Filebeat가 생성한 인덱스 패턴을 연결합니다.

  1. Connect to your Elasticsearch index 클릭
  2. index pattern에 filebeat-* 입력 후 Next step 클릭
  3. 타임 필드로 @timestamp 선택 후 Create index pattern 클릭

Kibana 로그인 화면 스크린샷

Kibana 대시보드 스크린샷

Discover 메뉴에서 로그가 수집되는지 확인합니다.

Filebeat 인덱스 생성 스크린샷

로그 예시(클라이언트별):

CentOS 8 로그:

CentOS 8 로그 스크린샷

Ubuntu 로그:

Ubuntu 로그 스크린샷

성공적으로 로그가 표시되면 기본 설치 및 구성 과정이 완료된 것입니다.


운영·보안 권장 사항

중요: 이 튜토리얼의 기본 구성은 학습/테스트 목적입니다. 운영 환경에 적용하기 전에 다음 항목을 반드시 검토하세요.

  • 네트워크 보안: Elasticsearch 및 Logstash 포트는 내부 네트워크에서만 접근 가능하도록 방화벽으로 제한하세요.
  • 인증 및 권한: Elastic Security(X-Pack) 기능 또는 리버스 프록시 기반 인증을 사용해 사용자 인증을 구성하세요.
  • TLS 암호화: Elasticsearch 클러스터 내 통신(transport)과 Kibana 웹 인터페이스(Browser↔Kibana)는 TLS로 암호화하세요.
  • 리소스 튜닝: JVM 힙 사이즈, 디스크 I/O, 인덱스 수명주기(ILM)를 설정해 디스크 부족 사태를 예방하세요.
  • 로그 보존 정책: 인덱스 수명주기 관리(ILM)로 오래된 로그를 삭제 또는 압축하세요.
  • 모니터링: Metricbeat, Heartbeat 등으로 Elastic Stack 자체를 모니터링하세요.

문제 해결 체크리스트

  • Elasticsearch가 시작되지 않음: 로그 파일(/var/log/elasticsearch/) 확인, jvm.options의 힙 사이즈가 시스템 메모리보다 큰지 확인.
  • Kibana 접속 불가: Kibana 로그(/var/log/kibana/) 확인, Nginx 리버스 프록시가 올바른 포트를 프록시하는지 확인.
  • Filebeat가 Logstash로 전송하지 않음: Filebeat 로그(/var/log/filebeat/) 확인, Logstash의 포트(5044) 리스닝 여부 확인, 방화벽 규칙 확인.
  • Logstash 필터가 메시지를 파싱 못함: grok debugger(온라인)으로 패턴을 검증하거나 Logstash의 stdout { codec => rubydebug }로 테스트.

대체 접근 방식과 고려사항

  • 직접 Elasticsearch로 보내기: Filebeat에서 직접 Elasticsearch로 전송하면 Logstash 필터 단계가 필요 없을 때 더 간단합니다. 단, 필터링/파싱/복잡한 변환이 필요한 경우 Logstash가 유리합니다.
  • Fluentd/Fluent Bit 사용: 일부 환경에서는 Filebeat 대신 Fluentd(또는 경량형 Fluent Bit)를 사용해 로그를 수집·전송합니다. 이들 도구는 플러그인 생태계가 강력합니다.
  • 관리형 서비스 사용: Elastic Cloud 같은 관리형 Elasticsearch 서비스를 사용하면 설치·운영 부담을 줄일 수 있습니다.

역할 기반 체크리스트(간단)

  • 시스템 엔지니어: 서버 패키지 설치, 방화벽/OS 보안 설정, JVM/메모리 튜닝.
  • 플랫폼 엔지니어: Logstash 파이프라인 설계, 인덱스 매핑·템플릿 관리, ILM 정책 설정.
  • 보안 엔지니어: TLS 인증서 발급·관리, Kibana 접근 제어, 감사(Audit) 설정.
  • 애플리케이션 팀: 애플리케이션 로그 포맷 표준화, 필요한 대시보드/알람 요구사항 전달.

간단한 SOP(설치·롤백 흐름)

  1. 백업: 기존 구성 파일과 중요한 데이터(파일, 인덱스 템플릿)를 백업합니다.
  2. 설치: 리포지터리 추가 → 패키지 설치 → 기본 구성 적용 → 서비스 시작.
  3. 검증: 각 서비스 상태 확인 → 포트 리스닝 확인 → Kibana 연결 및 인덱스 생성 확인.
  4. 모니터링 설정: Metricbeat를 사용해 Elastic 성능 모니터링.
  5. 롤백(필요 시): systemctl stop <서비스> → 패키지 제거 또는 이전 구성 복원 → 서비스 재시작.

테스트 케이스 및 수용 기준

  • Filebeat에서 전송한 로그가 10초 이내에 Logstash를 거쳐 Elasticsearch에 색인되는가?
  • Kibana Discover에서 인덱스 패턴 생성 후 최근 로그가 표시되는가?
  • Logstash가 입력된 syslog 형식을 올바르게 파싱하여 필드(syslog_message, syslog_program 등)를 생성하는가?
  • 각 서비스가 시스템 재부팅 후 자동으로 시작되는가?

보안 하드닝 체크(권장 항목)

  • Elasticsearch 내부 통신: transport.tls.enabled 활성화 및 노드간 인증서 사용.
  • Kibana: 리버스 프록시에서 HTTPS 적용 및 최소한의 접근 제어.
  • Logstash: beats input에 IP 화이트리스트 적용(필요 시).
  • Filebeat: 최신 버전 유지, 최소 권한으로 실행.

1줄 용어집

  • Elastic Stack: Elasticsearch + Logstash + Kibana + Beats 집합.
  • Beat: 로그/메트릭 수집 에이전트(예: Filebeat, Metricbeat).
  • Grok: 로그 패턴 매칭을 위한 Logstash 플러그인.

카운터-예시: 이 구성이 실패할 수 있는 상황

  • 고부하 환경에서 단일 노드 Elasticsearch(힙 메모리 부족)는 색인 지연 및 노드 다운을 초래할 수 있습니다.
  • 다양한 로그 형식(예: JSON, 멀티라인 스택트레이스)을 하나의 grok 패턴으로 처리하면 파싱 실패가 발생할 수 있습니다.
  • 외부에서 Elasticsearch 포트를 직접 노출하면 데이터 유출 및 악성 인덱싱 공격에 취약합니다.

마이그레이션 팁(버전/환경 전환)

  • Elasticsearch 버전 업그레이드는 API/매핑 호환성을 확인하세요. 주요 버전(예: 6→7)에서는 매핑과 템플릿 변경이 필요할 수 있습니다.
  • Filebeat/Logstash 플러그인 버전 호환성을 확인하고 테스트 클러스터에서 검증하세요.

짧은 발표용 문장(100–200자)

CentOS 8 서버에 Elastic Stack(Elasticsearch, Logstash, Kibana)을 설치하고 Filebeat로 클라이언트 로그를 수집해 중앙에서 시각화하는 방법을 단계별로 안내합니다. 리버스 프록시, 인증, 기본 보안 권장 사항까지 다룹니다.


참고 자료


요약

  • 이 가이드는 CentOS 8 환경에서 Elastic Stack을 설치하고 Filebeat로 로그를 수집해 Kibana에서 확인하는 전체 흐름을 설명합니다.
  • 운영 환경에서는 TLS·인증·리소스 튜닝 등 추가 보안·성능 작업이 필요합니다.
  • 문제 발생 시 로그 확인과 grok 패턴 검증으로 원인을 좁히세요.
공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Mac 복구 디스크 백업 및 부팅용 복구디스크 만들기
macOS

Mac 복구 디스크 백업 및 부팅용 복구디스크 만들기

Nautilus에서 확장자별로 파일 정렬하는 법
우분투

Nautilus에서 확장자별로 파일 정렬하는 법

명령 프롬프트로 인터넷 문제 진단 및 성능 개선
네트워크

명령 프롬프트로 인터넷 문제 진단 및 성능 개선

Windows에서 OneDrive 자동 실행 끄기: 5가지 방법
Windows

Windows에서 OneDrive 자동 실행 끄기: 5가지 방법

원격 PC로 파일 전송: RDP·AnyDesk 실전 가이드
기술 가이드

원격 PC로 파일 전송: RDP·AnyDesk 실전 가이드

OnePlus Pad 멀티태스킹 사용법 — 분할·플렉시블·듀얼
가이드

OnePlus Pad 멀티태스킹 사용법 — 분할·플렉시블·듀얼