본문 바로가기
서버구축 (WEB,DB)

Logstash 설치 및 기본 이벤트 Stashing 테스트 가이드

by 날으는물고기 2025. 2. 25.

Logstash 설치 및 기본 이벤트 Stashing 테스트 가이드

Ubuntu 기반에서 Logstash를 설치하고 간단한 파이프라인을 테스트하고, Filebeat를 통해 로그를 수집하여 Logstash에서 파싱한 후 Elasticsearch로 전송합니다. Logstash의 기본 설정부터 Filebeat와 연계하여 로그를 처리하고 Elasticsearch 및 Kibana에서 데이터를 확인하는 방법입니다.

1. Logstash 설치

Ubuntu에서 Logstash를 설치하는 단계입니다. 다음 명령어를 실행하여 Logstash를 설치합니다.

1.1 Elasticsearch GPG 키 추가

Elasticsearch 패키지를 안전하게 설치하기 위해 GPG 키를 추가합니다.

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

1.2 Elasticsearch APT 저장소 추가

APT 패키지 관리자가 Elasticsearch 패키지를 찾을 수 있도록 저장소를 추가합니다.

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

1.3 Logstash 설치

APT 저장소를 업데이트한 후 Logstash를 설치합니다.

sudo apt update
sudo apt install logstash

2. Logstash 실행 및 기본 테스트 파이프라인 설정

Logstash가 정상적으로 설치되었는지 확인하고 기본 테스트를 수행하는 방법입니다.

2.1 Logstash 실행 디렉토리 이동

Logstash가 설치된 기본 경로로 이동합니다. 보통 /usr/share/logstash 디렉토리 안에 있습니다.

cd /usr/share/logstash

2.2 간단한 파이프라인 실행

stdin에서 입력을 받고 stdout으로 출력하는 간단한 파이프라인을 실행합니다.

sudo bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'

설정 구성 요소

  • input { stdin { } } : 표준 입력(stdin)에서 데이터를 수신합니다.
  • output { stdout { codec => rubydebug } } : 표준 출력(stdout)에 구조화된 포맷으로 데이터를 출력합니다.

2.3 "Pipeline main started" 메시지 확인

Logstash가 실행되면 "Pipeline main started" 메시지가 나타나며, 명령어 입력 대기 상태가 됩니다.

3. 이벤트 테스트

3.1 "hello world" 입력

터미널에서 직접 메시지를 입력하여 Logstash가 정상적으로 동작하는지 확인합니다.

hello world

3.2 출력 결과 확인

입력한 메시지가 변환되어 출력되는지 확인합니다.

{
  "@timestamp": "2024-10-08T08:30:14.405Z",
  "message": "hello world",
  "host": "your-host-name",
  "@version": "1"
}

3.3 Logstash 종료

CTRL + D를 눌러 Logstash를 종료합니다.

4. 추가 설정

이제 Logstash의 기본 작동을 확인했으니, 좀 더 복잡한 파이프라인을 설정하여 실제 환경에 맞는 입력 소스(파일, 데이터베이스 등)와 필터(데이터 변환, 구조화), 출력(Elasticsearch, 파일 등)을 설정할 수 있습니다.

5. Filebeat를 이용한 로그 수집 및 전송

Logstash와 함께 Filebeat를 사용하여 로그를 수집하고 처리하는 방법입니다.

5.1 Filebeat 설치

다음 명령어를 사용하여 Filebeat를 다운로드하고 설치합니다.

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.x-amd64.deb
sudo dpkg -i filebeat-8.x-amd64.deb

5.2 Filebeat 설정

Filebeat 설정 파일을 수정하여 로그 파일을 수집하고 Logstash로 전송하도록 구성합니다.

sudo vim /etc/filebeat/filebeat.yml

설정 예제

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /path/to/file/logstash-tutorial.log

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

5.3 Filebeat 실행

설정을 완료한 후 Filebeat를 실행합니다.

sudo filebeat setup
sudo service filebeat start

6. Logstash 파이프라인 설정

Filebeat에서 수집된 로그를 Logstash에서 처리하도록 설정합니다.

6.1 Logstash 설정 파일 생성

Logstash 파이프라인 설정 파일을 생성합니다. Logstash 기본 디렉토리에서 first-pipeline.conf 파일을 생성합니다.

sudo vim /etc/logstash/conf.d/first-pipeline.conf

설정 예제

input {
  beats {
    port => 5044  # Filebeat가 데이터를 보내는 포트
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }  # Apache 로그를 파싱하는 패턴
  }
  geoip {
    source => "clientip"  # 클라이언트 IP 주소를 기반으로 지리적 위치 정보 추가
  }
}

output {
  stdout { codec => rubydebug }  # 디버깅을 위해 stdout에 출력
  elasticsearch {
    hosts => ["localhost:9200"]  # Elasticsearch로 데이터 전송
  }
}

이 설정 파일은 Filebeat로부터 수신한 Apache 웹 로그 데이터를 grok 필터를 통해 파싱하고, geoip 필터를 사용하여 IP 주소의 지리적 위치 정보를 추가한 후, Elasticsearch에 저장합니다.

6.2 Logstash 설정 테스트

설정 파일이 제대로 작성되었는지 확인하기 위해 Logstash 설정을 테스트합니다.

sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/first-pipeline.conf --config.test_and_exit

오류가 없으면 다음 단계로 진행할 수 있습니다.

6.3 Logstash 실행

이제 Logstash를 실행하여 Filebeat로부터 로그를 받아 처리합니다.

sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/first-pipeline.conf --config.reload.automatic

7. Elasticsearch 데이터 확인

Filebeat가 로그를 수집하고, Logstash가 이를 파싱하며, Elasticsearch에 데이터를 저장하는지 확인하는 단계입니다.

7.1 Elasticsearch에 데이터 저장 확인

Elasticsearch에 Apache 로그가 저장되었는지 확인하려면, Elasticsearch에 쿼리를 보내보세요. 다음 명령을 사용해 Logstash가 정상적으로 데이터를 전달했는지 확인합니다.

curl -XGET 'localhost:9200/logstash-*/_search?pretty&q=response=200'

이 쿼리는 response=200인 로그를 검색합니다. 결과로 여러 히트를 반환해야 합니다.

7.2. Kibana에서 데이터 시각화

만약 Kibana를 사용 중이라면, Kibana에서 Filebeat 데이터를 시각화할 수 있습니다. Kibana의 "Discover" 탭에서 Filebeat로 수집된 로그를 검색하고 분석할 수 있습니다.

 

이를 통해 Ubuntu에서 Logstash를 설치하고 기본적인 이벤트를 처리하여 Filebeat를 통해 로그를 수집하고 Logstash에서 필터링한 후 Elasticsearch로 데이터를 전송할 수 있습니다. 이를 바탕으로 다양한 로그 소스를 수집하여 보다 정교한 분석 환경을 구축할 수 있습니다. 추가적으로 Grok 필터를 활용하여 로그를 세분화하고, GeoIP를 적용하여 IP 기반 위치 분석을 수행하는 등의 고급 설정도 적용할 수 있습니다. 이 설정을 바탕으로 더 복잡한 로그 파싱 작업을 구성하고, 다양한 로그 소스를 수집해 Elasticsearch로 분석할 수 있습니다.

 

추가로, Logstash를 사용하여 파일 내용을 Elasticsearch에 전송하는 일회성 테스트를 간편하게 명령어로 실행할 수 있는 방법입니다. Logstash의 -e 옵션을 사용하여 명령줄에서 직접 파이프라인을 구성하고 실행합니다.

Logstash를 통한 파일 내용을 Elasticsearch로 전송하기 위한 기본 명령어 구성

파일의 내용을 읽어서 Elasticsearch로 보내기 위해서는 input, filter(선택 사항), output 플러그인을 설정해야 합니다. 이 과정을 한 번에 명령어로 실행할 수 있습니다.

1. 테스트할 로그 파일 준비

먼저 테스트할 로그 파일을 준비하세요. 예를 들어 /tmp/test.log 파일에 간단한 테스트 내용을 추가합니다.

echo "This is a test log entry" > /tmp/test.log

2. Logstash 명령어 실행

다음 명령어를 사용하여 Logstash를 실행해 파일 내용을 Elasticsearch에 전송합니다.

sudo /usr/share/logstash/bin/logstash -e '
input {
  file {
    path => "/tmp/test.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"  # 파일 상태를 기록하지 않도록 설정하여 매번 처음부터 읽음
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]  # Elasticsearch 호스트 주소
    index => "logstash-test"  # 저장할 인덱스 이름
  }
  stdout { codec => rubydebug }  # 결과를 stdout에도 출력 (디버깅 용도)
}
'
  • file input 플러그인은 파일을 읽어옵니다. path는 읽어올 파일의 경로입니다.
  • start_position => "beginning"은 파일을 처음부터 읽도록 지정합니다.
  • sincedb_path => "/dev/null"은 Logstash가 파일을 읽은 상태를 기록하지 않도록 설정합니다. 이렇게 하면 매번 파일을 처음부터 읽습니다.
  • elasticsearch output 플러그인은 데이터를 Elasticsearch로 전송합니다. hosts에는 Elasticsearch 서버 주소를, index에는 데이터를 저장할 인덱스 이름을 지정합니다.
  • stdout { codec => rubydebug }는 로그 데이터를 콘솔에 출력하는 옵션으로, 데이터를 구조화된 형태로 볼 수 있습니다.

4. 결과 확인

Elasticsearch에 데이터가 전송되었는지 확인하려면, 다음 명령어를 사용하여 데이터를 조회할 수 있습니다.

curl -XGET 'localhost:9200/logstash-test/_search?pretty'

이 명령어는 logstash-test 인덱스에 저장된 데이터를 출력합니다.

 

파일의 내용이 잘 전송되었다면, 필요한 대로 Logstash 파이프라인을 조정하거나 로그 수집 작업을 자동화할 수 있습니다.

이 방법을 사용하면 일회성으로 파일 내용을 Elasticsearch에 전송하고 결과를 빠르게 확인할 수 있습니다.

728x90

댓글