[Logstash] 로그스태시와 파일비트의 기본 개념

Q·2023년 3월 5일
0

ELK

목록 보기
3/10

1. 로그스태시 파일비트 개요

데이터 수집(파일비트, 로그스태시) -> 인덱싱(엘라스틱서치) -> 시각화(키바나 로그스태시는 데이터의 전처리와 후처리를 담당한다

  • 오픈 소스로써 서버 측 데이터를 처리하는 파이프 라인이다.
  • 다양한 소스에서 동시에 데이터를 수집하여 반환 한다.
  • 그 다음 자주 사용하는 Elasticsearch에게 전달 한다.

위에서는 Elasticsearch에게 데이터를 전달 한다고 하였지만, 실제 실무에서 사용이 되는 것을 보면 다양한 서비스에 이벤트 데이터를 전달할 수 있다.

2. 로그스태시 파이프라인

로그스태시의 input, filter, output은 커스터마이징 하는 것이 까다롭다.
또한 파이프라인의 환경은 yaml 파일을 통해 수정한다.

  • Input

    • 데이터를 실제로 입력 받는 영역이다.
    • Logstash로 데이터를 가져온다.
  • Filter

    • Logstash 파이프 라인의 중간 처리 장치.
  • Output

    • Filter를 통해 가공 되어진 데이터를 출력하는 영역이다.

✅ 2-1. 로그스태시의 입력(Input)

Filebeats, Rebbitmq, Redis, Salesforce
모든 소스, 사이즈 및 형태의 데이터를 수집한다

데이터는 여러 시스템에서 다양한 모습으로 산발적으로 보관된 경우가 많다. Logstash는 다양한 입력(Input)을 지원하여 여러 공통 소스로부터 로그 수집이 가능하다. 즉, 로그, 메트릭, 웹 애플리케이션, 데이터 저장소 및 다양한 AWS 서비스를 연속 스트리밍 형태로 간편하게 수집할 수 있다.

✅ 2-2. 로그스태시의 필터(Filter)

로그스태시의 필터이벤트를 분석하고 명명된 필드를 식별하여 이를 공통적으로 구조화된 형식으로 변환한다. 또한 Logstash는 형식이나 복잡성에 상관 없이 데이터를 동적으로 변환하고 준비 해둔다.

✅ 2-3. 로그스태시의 출력(Output)

Logstash는 원하는 곳으로 데이터를 라우팅(Routing) 할 수 있는 다양한 출력을 지원한다. 때문에 여러 저장소로 데이터를 다운스트림 하는 유연성도 확보할 수 있다.

✅ 2-4. 로그스태시의 파이프라인 구조

💡 2-4-1. Input

input {
  file { # plugin
    codec => json
    path => "c:/logs/*.log"
  }
}

💡 2-4-2. filter

filter {
  geoip { # plugin
    database => "./GeoLite2-City.mmdb"
    source => "ip"
  }
}

💡 2-4-3. output

ouput {
  stdout { # plugin
    codec => dots {}
  }

  elasticsearch { # plugin
    index => "apache_elastic_example"
    template => "./apache_template.json"
    template_name => "apache_elastic_example"
    template_overwrite => true
  }
}
  • 위에서 보다시피 대표적으로 input -> filter -> output 순으로 진행이 된다.

3. 로그스태시의 플러그인

✅ 3-1. 로그스태시의 플러그인 리스트

위 사진을 보면 input, filter, output에 해당하는 플러그인 리스트들을 나열 하였다.
필요한 경우 해당 링크를 참고하여 적용하자.

✅ 3-2. 로그스태시 플러그인 분석

로그스태시 플러그인

Input
  - Files
  - Syslog
  - SQL Queries
  - HTTP request
  - Elasticsearch
  - Beats
  - Metrics systems
  - And More..

Filter
  - log 파싱
  - 데이터 확장
  - 태그 추가
  - And More..

Output
  - Elasticsearch
  - Data 보관소 (ex : Amazon S3)
  - Alterting & Monitoring system
  - And more..

✅ 3-3. input

Logstash로 데이터 수집

  • file : tail -0F와 매우 비슷하게 시스템의 파일에서 읽음
  • syslog : syslog 메시지 및 구문 분석을 위해 잘 알려진 514번 포트를 수신
  • redis : redis 채널과 redis 목록을 사용하여 redis 서버에서 데이터를 읽음
  • beat : filebeat에서 보낸 이벤트를 처리

✅ 3-4. filter

Logstash 파이프 라인의 중간 처리 장치

  • grok : 임의의 텍스트를 구성하여 구조화되지 않은 로그 데이터 구문을 분석
  • mutate : 이벤트 필드에서 일반적인 변환 수행, 이벤트 데이터의 수정 및 제거
  • drop : 이벤트를 완전히 삭제
  • clone : 이벤트를 복사
  • geoip : IP 주소의 지리적 위치에 대한 정보 추가

✅ 3-5. output

최종 단계로 이벤트는 여러 출력 사용 가능

  • elasticsearch : Elasticsearch에 데이터 저장
  • file : 디스크 파일 형태로 저장
  • graphite : Graphite에 데이터 전송, 통계 저장 및 그래프 표현을 위한 오픈 소스
  • statsd : statsd에 이벤트 데이터 전송

✅ 3-6. codec

인코딩 방식

  • json : JSON 형식의 데이터를 인코딩하거나 디코딩
  • multiline : 자바 stack tract와 같은 여러 줄 이벤트 단일 이벤트로 병합

✅ 3-7. input: file plugin

# foo.conf
input {
  file { # ⚡ plugin
    path => "C:/logstash-2.3.1/logstash-tutorial-dataset"
    start_position => "beginning"
    ignore_older => 0
  }
}
output {
  stdout {}
  file {
    path => "C:/output.txt"
  }
}
  • path : 경로
  • start_position : 시작 위치

✅ 3-8. input: beats plugin

input {
  beats { # ⚡ plugin
    port => 5044 # logstash port
    host => "0.0.0.0"
  }
}

여러개의 filebeat로부터 데이터를 수집하여 로그스태시로 전달

  • port : 로그스태시 포트
  • host : 외부 접근 허용 범위

✅ 03-9. filter: grok plugin

# 원하는 형식(pattern)
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043
input {
  file {
    path => "/var/log/http.log" # 해당 경로에서 파일 읽는다
  }
}
filter {
  grok { # ⚡ plugin
    match => {
      "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
    }
  }
}
  • match : 정규표현식처럼 패턴을 줘서 가공 처리 가능

✅ 3-10. filter: geoip

input {
  file {
    path => "D:/sample.log"
    start_position => "beginning"
  }
}
filter {
  grok {
    match => {
      "message" => "%{COMMONAPACHELOG}"
    }
  }
  geoip { # ⚡ plugin
    source => "[apache2][access][remote_ip]"
    target => "[apache2][access][geoip]"
  }
}
  • source : 어떤 데이터를 IP로 보낼지 지정
  • target : geoip라는 공간에 저장

✅ 3-11. output: elasticsearch

output {
  elasticsearch { # ⚡ plugin
    hosts => localhost
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}
  • hosts : 엘라스틱서치 서버가 어디에 있는지 정의 가능
  • manage_template : 기본적인 매핑 지원(true/false)
  • index : 사용자가 원하는 형태의 인덱스 이름이 있다면 그 형태를 지정

4. 파일 비트

경량 로그 데이터 수집기

  • 일반적인 형식의 로그 데이터 수집, 파싱, 시각화를 단일 명령어로 사용 가능.
  • 가능한 내부 모듈
    • Apache
    • Nginx
    • System
    • MySQL
    • And More..
  • Elasticsearch의 Ingest Node 파이프라인과 Kibana 대시보드 자동 생성

참고

profile
Data Engineer

0개의 댓글