ELK 스택 환경 구성 및 로그 처리 최적화

Elasticsearch 서비스 관리

프로세스 확인

실행 중인 Elasticsearch 인스턴스를 확인하려면 다음 명령어를 사용합니다.

ps -ef | grep elasticsearch

버전 정보 조회

노드의 상태와 버전을 확인하기 위해 REST API를 호출합니다.

curl -X GET "localhost:9200/"

서비스 시작 (비루트 사용 권장)

보안상의 이유로, Elasticsearch는 root 계정으로 실행하지 않는 것이 원칙입니다. 별도의 전용 사용자를 생성하여 운영하는 것이 바람직합니다.

  1. 설치 디렉터리 이동:
    cd /home/elk/elasticsearch-7.17.5
  2. 기본 실행:
    ./bin/elasticsearch
  3. 커스텀 설정 파일 지정:
    ./bin/elasticsearch -Epath.conf=/home/elk/config

백그라운드 실행 방법

  • 단순 백그라운드 실행:
    ./bin/elasticsearch &
  • nohup을 이용한 영구 실행:
    nohup ./bin/elasticsearch > es.log 2>&1 &

Kibana 구성 및 실행

systemd 기반 실행

RPM 또는 DEB 패키지 설치 시 systemd 서비스가 자동 등록됩니다.

sudo systemctl start kibana

주요 경로:

  • 설정 디렉터리: /etc/kibana
  • 설치 위치: /usr/share/kibana

Tarball 방식 실행

  1. 디렉터리 진입:
    cd /usr/local/src/kibana-7.17.5
  2. 설정 파일 확인:
    cat config/kibana.yml
  3. ES 연결 주소 설정:
    elasticsearch.hosts: ["http://localhost:9200"]
  4. 백그라운드 실행:
    nohup ./bin/kibana > logs/kibana.log 2>&1 &
  5. 접속 테스트: 브라우저에서 http://서버IP:5601 접속

Logstash 배포 및 설정

Tar 압축 파일 실행

  1. 디렉터리 이동:
    cd /usr/local/src/logstash-7.17.5
  2. 구성 파일 편집:
    vim config/pipeline.conf
  3. 샘플 파이프라인 예시:
input {
  beats {
    port => 5044
  }
}

filter {
  if [log_source] == "wms-app" {
    grok {
      match => { "message" => "%{TIMESTAMP_ISO8601:app_timestamp} \[%{DATA:thread_id}\] %{LOGLEVEL:level} %{NOTSPACE:class_name} - %{GREEDYDATA:log_message}" }
    }
    date {
      match => [ "app_timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ]
      target => "@timestamp"
      timezone => "Asia/Seoul"
    }
  }
}

output {
  if [env] == "development" {
    elasticsearch {
      hosts => ["110.211.211.49:9200"]
      index => "app-dev-%{+YYYY.MM.dd}"
    }
  } else {
    elasticsearch {
      hosts => ["110.211.211.114:9200"]
      index => "app-prod-%{+YYYY.MM.dd}"
    }
  }
}
  1. 실행 명령:
nohup ./bin/logstash -f config/pipeline.conf &

RPM 기반 설치 및 관리

  • 패키지 설치:
    sudo yum localinstall logstash-7.17.5.rpm
  • 서비스 제어:
    sudo systemctl start logstash
    sudo systemctl enable logstash
    sudo systemctl status logstash
  • 로그 모니터링:
    tail -f /var/log/logstash/logstash-plain.log

Filebeat과 연동된 로그 수집 구조

Java 기반 WMS 애플리케이션의 로그를 Filebeat → Logstash → Elasticsearch → Kibana 순서로 전달합니다.

Filebeat 설정 예제 (/etc/filebeat/filebeat.yml)

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/wms/application.log
  fields:
    log_source: wms-app
    env: development

output.logstash:
  hosts: ["localhost:5044"]

Logstash 입력 설정

input {
  beats {
    port => 5044
  }
}

배포 후 점검 항목

  • 모든 서비스 상태 확인:
    systemctl status filebeat logstash kibana
  • 포트 사용 여부 확인:
    netstat -tlnp | grep -E '(5044|9200|5601)'
  • Filebeat 구성 오류 검증:
    filebeat test config
  • Elasticsearch에 인덱스 생성 여부 확인:
    curl 'localhost:9200/_cat/indices?v'

로깅 타임스탬프 정합성 확보

로그 내부의 타임스탬프([2023-12-30 14:13:17.067])를 Elasticsearch의 @timestamp 필드로 사용하기 위해 Logstash의 date 필터를 활용합니다.

grok {
  match => { "message" => "\[%{TIMESTAMP_ISO8601:raw_timestamp}\].*%{LOGLEVEL:level}.*" }
}
date {
  match => [ "raw_timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ]
  target => "@timestamp"
  timezone => "Asia/Seoul"
}

오래된 로그 파일 정리 스크립트

30일 이상 지난 압축 로그 파일을 자동 삭제합니다.

find /home/elk/elasticsearch-7.17.5/logs \
  -name "*.log.gz" -o -name "*.json.gz" \
  -mtime +30 -exec rm -f {} \;

Kibana에서의 시각화 구성

  1. Management > Index Patterns에서 wms-* 패턴 등록
  2. Visualize Library에서 차트 유형 선택 (예: Bar, Line, Pie)
  3. 데이터 소스로 방금 생성한 인덱스 패턴 지정
  4. Aggregation 설정 (예: terms aggregation by level, date histogram)
  5. 저장 후 Dashboard에 추가

태그: ELK Stack elasticsearch Logstash Kibana filebeat

6월 14일 23:45에 게시됨