본문 바로가기
QA

키바나

by 오탄 2025. 10. 13.

1. ELK 스택 구성

    - Elasticsearch : 가장 핵심적인 검색 및 데이터 저장 엔진으로, 스택의 기반 역할

    - Logstash : 로그 데이터 수집과 파싱, 변환 역할을 하는 중간 처리기 역할

       * 파일비트는 DB나 클라우드 서비스 등 다양한 소스에서 데이터를 받을 수 없음.

    - Kibana : 최종적으로 데이터를 시각화하는 역할

       * 구성 흐름 : 데이터 수집 (Logstash) → 데이터 저장 및 검색 (Elasticsearch) → 데이터 시각화 (Kibana)

          •제품의 중요도와 역할 강조에 따라 Elasticsearch 가 가장 앞에 위치

       * Filebeat : 서버에서 로그를 수집해 전송 (경량 수집기)
          •Beats 제품군 중 하나로 Elastic Stack 에 Beats 포함.

 

2. 설치 과정

2.1. 환경 준비

        - Elasticsearch 와 logstash 는 Java 환경에서 실행

        - Docker 활용 권장(복잡한 설치 없이 컨테이너로 쉽게 환경 구축 가능)

2.2. Elasticsearch 설치

2.2.1. docker-compose yml 파일 준비

             * version 은 obsolete 됨.

           - "ES_JAVA_OPTS = -Xms512m -Xmx512m"
             •JVM 에 할당하는 최소와 최대 힙 메모리 크기를 제한

           - discover.type=single-node
             •Elasticsearch 를 단일 노드 모드로 실행

             •보통 개발용, 테스트용 > 클러스터 미구성 1대 노드 모든 역할(마스터, 데이터, 인제스트 등) 수행

                   * 클러스터 구성할 경우 해당 옵션 사용 안함. 운영환경에서는 보통 3대 이상 노드로 클러스터 구성(가용성, 안정성 보장)

           - volumes 의미
             •컨테이너 데이터의 영속성을 위한 저장 공간

           - logstash 가 2개의 포트를 사용하는 이유
             •5044: Beats 가 로그를 보내는 입력 포트

             •9600: Logstash 내부 상태 모니터링 등 메트릭을 제공하는 API 포트(출력 포트)

           - esdata: 
             •도커 볼륨 이름만 명시, 추가 설정이 없으므로 기본 설정으로 생성되고 관리됨.

             • Elasticsearch 컨테이너가 삭제되어도 데이터는 유지하도록 영속적인 저장 공간을 확보.

services:
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:8.7.1
        container_name: elasticsearch
        environment:
            - discovery.type=single-node
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ports:
            - "9200:9200"
        volumes:
            - esdata:/usr/share/elasticsearch/data
            - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        networks:
            - elk-network
    
    logstash:
        image: docker.elastic.co/logstash/logstash:8.7.1
        container_name: logstash
        ports:
            - "5044:5044"
            - "9600:9600"
        volumes:
            - ./logstash/pipeline/:/usr/share/logstash/pipeline

    kibana:
        image: docker.elastic.co/kibana/kibana:8.7.1
        container_name: kibana
        ports: 
            - "5601:5601"
        environment:
            elasticsearch.hosts: http://elasticsearch:9200
        networks:
            - elk-network
    
    filebeat:
        image: docker.elastic.co/beats/filebeat:8.7.1
        container_name: filebeat
        user: root
        volumes:
            - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
            - ./:/var/log:ro
        depends_on:
            - elasticsearch
        networks:
            - elk-network
        
volumes:
    esdata:

networks:
    elk-network:
        driver: bridge
docker app 실행 상태 > 터미널 > docker compose up 실행 

    * received plaintext http traffic on an https channel 이슈 발생

       - elasticsearch ssl 기능 종료 (개발용) 

    * logstash 종료

       - logstash.conf 파일 작성

       - logstash 제외 하고, filebeat 로 EK 스택 구성으로 변경

 

2.3. Filebeat 란?

        - ELK 스택을 구성하는 경량 로그 수집기

          (로그 파일을 수집 / 따라서 port 가 없고 network 설정이 존재함)

           * 동일한 docker compose 네트워크에 속하는 모든 컨테이너는 이름 또는 서비스 이름으로 통신

              (DNS 이름처럼)

              •elk-network 에 컨테이너들이 속해있어야 통신 가능

              •docker network ls > docker network inpect local_elk-network

                 (local_ 이 디폴트로 생성) 

              •filebeat.yml 작성 필요함.         

        - 수집한 로그를 Logstash (or elasticsearch) 로 전달

          •Prospector (현재는 Input): 읽을 로그 파일을 식별하는 역할
          Harvester: 각 로그 파일을 실제로 한 줄씩 읽어 처리
          Spooler: 읽은 로그를 일괄 수집해 목적지로 전달
          Registry 파일: 각 로그파일의 읽은 위치를 저장해 재시작 시 중복을 방지

 

2.4. 도커에서 Filebeat, Electricsearch, Kibana 실행

        - 로컬 웹서버에서 로그 파일을 생성 > Filebeat 가 로그파일 수집 > Elasticsearch 로 전달 > Kibana 에서 시각화 

        - 연결 확인 후 키바나 접속 > Stack management > Data Views 

 

2.4. 키바나

        -  이름 : 각 데이터 뷰를 구분할 수 있도록 만드는 고유한 레이블

        -  인덱스 패턴

           •Elasticsearch에 저장된 여러 로그 인덱스를 Kibana에서 하나의 검색 단위로 묶어 다루기 위한 메타데이터 설계도

           •실제 Elasticsearch 인덱스들은 여러 개 존재 가능

           •공통된 이름 규칙(예: filebeat-*)으로 여러 인덱스를 포괄

        -  타임스탬프(Timestamp field)

           •이벤트나 로그가 기록된 정확한 날짜와 시간 정보를 담고 있는 데이터 필드

           •로그가 언제 발생했는지를 추적, 검색, 시계열 분석하기 위해서 필수적으로 사용

        - 수집된 데이터를 기반으로 시각화할 수 있음.

'QA' 카테고리의 다른 글

성능 테스트  (0) 2025.10.15
로컬 환경 만들기  (0) 2025.10.14
포스트맨  (0) 2025.10.13
Jmeter  (0) 2025.10.13
VAN / PG 의 차이  (0) 2025.10.01