JangGeonWu
janggeonwu97
JangGeonWu
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • SQLD (21)
    • 개인 공부용 (17)
    • Django (9)
    • Tableau (6)
    • ElasticSearch (8)
    • 빅데이터 엔지니어 (5)
    • Spring 퀵 스타트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개인 공부 기록용 블로그

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
JangGeonWu

janggeonwu97

로그스태시(Logstash) 기본
ElasticSearch

로그스태시(Logstash) 기본

2022. 11. 21. 16:02

1. 로그스태시 소개 및 특징

로그스태시는 플러그인 기반의 오픈소스 데이터 처리 파이프라인 도구다.

데이터 수집을 위해서 별도의 어플리케이션을 생성하는 것보다 로그스태시 사용이 추천된다.

 

로그스태시 특징은 아래와 같다.

  • 플러그인 기반: 로그스태시의 파이프라인을 구성하는 각 요소들은 전부 플러그인 형태로 만들어져 있다. 기본으로 제공되는 플러그인 외에도 수많은 커뮤니티 플러그인을 사용할 수 있다.
  • 모든 형태의 데이터 처리: 기본 제공되는 플러그인들의 조합만으로도 대다수의 데이터 소스에서 json, xml 등 구조화된 텍스트 뿐 아니라 다양한 형태의 데이터를 입력받아 가공한 다음에 저장이 가능하다. 특히, 이벤트 데이터(시간에 따라 발생하는 데이터)를 처리하는 데 최적화되어 있다.
  • 성능: 자체적으로 내장되어 있는 메모리와 파일 기반의 큐를 사용해 처리 속도와 안정성이 높다. 또한 인덱싱할 도큐먼트의 수와 용량을 종합적으로 고려해 벌크 인덱싱을 수행할 뿐 아니라, 파이프라인 배치 크기 조정을 통해 병목현상을 방지하고 성능을 최적화할 수 있다.
  • 안정성: 엘라스틱서치의 장애 상황에 대응하기 위한 재시도 로직이나 오류가 발생한 도큐먼트를 따로 보관하는 데드 레터 큐(Dead Letter Queue)를 내장한다. 파일 기반의 큐를 사용할 경우에는 뜻하지 않은 로그스태시의 장애 상황에서도 도큐먼트 유실을 최소화할 수 있다.

...일단 로그스태시의 특징은 위와 같다.

솔직히 로그를 가공한다는 것만 알았지, 위처럼 유용한 도구인줄은 몰랐다.

 

2. 로그스태시 실행

https://janggeonwu97.tistory.com/72

 

엘라스틱 설치 다시시도

저번 엘라스틱서치 실무가이드 기반으로 환경설정할 때 잘 안되서... 이번에는 아예 '윈도우' 운영체제에 맞는 엘라스틱 스택: 개발부터 운영까지 책을 기반으로 환경설정을 해보려고 한다. https

janggeonwu97.tistory.com

 

로그스태시 설치 및 실행은 여기에 있다.

위 페이지에서는 아래와 같이 입력했는데

.\bin\logstash.bat -e "input { stdin { } } output { stdout { } }"

책에서는 아래와 같이 --log.level error을 추가했던 걸 이제 알았다.

.\bin\logstash.bat -e "input { stdin { } } output { stdout { } }" --log.level error

 

--log.level error는 로그 중 error 레벨 미만의 로그는 감추는 설정이라고 한다.

 

--log.level error 안붙였을 때
--log.level error 붙였을 때

로그스태시에서 제공하는 로그 레벨은 다음 표와 같다고 한다.

로그 레벨 설명
fatal 시스템 동작을 멈출 정도의 심각한 오류 발생 시 나타나는 로그들
error 시스템 동작을 멈추지는 않지만 오류가 발생할 때 나타나는 로그들
warn 잠재적인 오류를 포함하는 경고성 로그들
info 진행 상황이나 상태 변경 등의 정보를 알기 위한 로그들
debug 개발 과정에서 디버깅을 하기 위한 로그들
trace 시스템 진행 과정 추적을 위한 로그들

위에서 보면 알겠지만, WARN과 INFO가 생략된 것을 볼 수 있다.

즉, error 로그 레벨은 스크린샷이 길어지는 것을 막기 위해서 추가한 옵션이라 볼 수 있다.

 

3. 파이프라인

로그스태시의 가장 중요한 부분이 파이프라인이다.

 

파이프라인은 데이터를 입력받아 실시간으로 변경하고 이를 다른 시스템에 전달하는 역할을 하는 로그스태시의 핵심 기능이다.

 

파이프라인은 입력(input), 필터(filter), 출력(output)이라는 세 가지 구성요소로 이뤄진다. 필터는 옵션이고, 입출력은 당연히 필수다.

 

파이프라인 실행 순서

입력은 소스로부터 데이터를 받아들이는 모듈, 필터는 입력으로 들어오는 데이터를 원하는 형태로 가공하는 모듈, 마지막으로 출력은 데이터를 외부로 전달하는 모듈이다.

 

우리가 위에서 작성한 이 코드도 하나의 파이프라인이다.

.\bin\logstash.bat -e "input { stdin { } } output { stdout { } }"

표준 입력(키보드)을 받아 표준 출력(모니터)에 보여주는 간단한 파이프라인이다.

로그스태시 결과

로그스태시 결과는 JSON 형태인데, @version이나 @timestamp는 로그스태시가 만든 필드로 혹시라도 사용자가 만든 필드와의 충돌을 대비해서 앞에 @ 기호가 있다.

message, host 필드는 데이터와 시스템 사용자를 나타낸다. 이는 수집을 통해 얻어진 정보다.

 

간단한 파이프라인일 경우 방금처럼 콘솔에서 직접 작성할 수 있지만, 작업의 이력 관리를 위해서는 pipelines.yml이나 파이프라인 설정 파일을 만들어 로그스태시를 동작하는 것이 좋다.

 

파이프라인 기본 템플릿은 다음과 같다.

input {
	{입력 플러그인}
}

filter {
	{필터 플러그인}
}

output {
	{출력 플러그인}
}

 

이제, 각각의 플러그인에 대해 알아보자.

 

4. 입력

로그스태시는 파일, 통계, 웹, 데이터베이스, 스트림 등 다양한 형태의 데이터를 인식할 수 있고, 이를 쉽게 처리하기 위해서 다양한 입력 플러그인들이 존재한다.

예를 들어 특정 파일은 파일 플러그인을, 실시간 트윗은 트위터 플러그인을 통해서 가져올 수 있다.

다음은 '자주 사용하는 입력 플러그인'들이다.

  • file: 리눅스의 tail -f 명령처럼, 파일을 스트리밍하며 이벤트를 읽어 들인다.
  • syslog: 네트워크를 통해 전달되는 syslog를 수신한다.
  • kafka: 카프카의 토픽에서 데이터를 읽어 들인다.
  • jdbc: JDBC 드라이버로 지정한 일정마다 쿼리를 실행해 결과를 읽어 들인다.

 

파일 플러그인은 시스템의 특정 파일을 읽어올 수 있도록 구현된 플러그인이다.

 

로그스태시가 설치된 config 폴더에 logstash-test.conf라는 이름으로 설정파일을 만들어보자.

logstash-test.conf 파일위치. logstash-sample을 그대로 복사해서 생성

그리고, 아래와 같이 입력 플러그인을 적용해보자.

input { file { path => "C:/elasticsearch-7.10.1/logs/elasticsearch.log" start_position => "beginning" } } output { stdout { } }

입력으로 파일 플러그인을, 출력으로는 표준 출력 플러그인을 사용했다.

파일 플러그인에는 여러 옵션이 있는데, path는 읽어 들일 파일 위치를 결정한다.

 

위 플러그인은 'elasticsearch.log' 파일을 읽는 것으로 설정했는데, 파일에 로그가 쌓이면 실시간으로 elasticsearch.log 파일의 변경을 감지해서 읽어 들인다.

 

start_position은 최초 파일을 발견했을 때 파일을 읽을 위치로, 파일의 시작부터 읽을지 끝부분부터 새로운 라인만 읽어 들일지 정할 수 있다.

 

이제, 실시간으로 출력되는 elasticsearch.log를 수집하기 위해서 먼저 엘라스틱서치를 실행하고 로그스태시를 실행해보자.

.\bin\logstash.bat -f .\config\logstash-test.conf

여기서 -f 옵션은 설정 파일이나 폴더를 지정하는 옵션으로, 방금 만든 logstash-test.conf를 파이프라인 설정에 사용하게 된다.

elasticsearch.log 파일이 업데이트될 때마다 출력 플러그인의 stdout에 의해서 위와 같은 로그들이 보이게 된다.

일반적으로 message에 적힌 구문을 분석해서 의미있는 데이터로 변환하는 역할을 필터 플러그인이 해야 하며, 이른 로그스태시의 가장 중요한 업무라 볼 수 있다.

 

 5. 출력

입력 다음은 필터인데 왜 출력이 왔냐?면, 필터에는 내용이 많아서 따로 다루기 위해서이다;

 

암튼 출력 플러그인은 아래와 같다.

출력 플러그인 설명
elasticsearch bulk API를 이용해서 엘라스틱서치에 인덱싱을 수행한다
file 지정한 파일의 새로운 줄에 데이터를 기록한다
kafka 카프카 토픽에 데이터를 기록한다.

우리는 ELK 스택을 다루니, 당연히 엘라스틱서치에 결과를 전송할 것이다.

 

파일을 아래와 같이 수정하자.

input { file { path => "C:/logstash-7.10.1/config/filter-example.log" start_position => "beginning" sincedb_path => "nul" } } output { file{ path => "C:/logstash-7.10.1/config/output.json" } elasticsearch{ index => "output" } }

우선, file은 path 옵션에 저장할 위치에 기록함을 의미하고, elasticsearch는 output이라는 인덱스에 기록함을 의미한다.

 

이때, elasticsearch에서 (위처럼) 인덱스명을 설정할 수도 있고, 호스트 URL이나 라우팅 같은 다양한 옵션을 사용할 수 있다.

옵션 설명
hosts 이벤트를 전송할 엘라스틱서치의 주소
index 이벤트를 인덱싱할 대상 인덱스
document_id 인덱싱될 문서의 아이디를 직접 지정할 수 있는 옵션
user/password 엘라스틱서치에 보안 기능이 활성화되어 있을 때 인증을 위한 사용자 이름과 비밀번호
pipeline 엘라스틱서치에 등록된 인제스트 파이프라인을 활용하기 위한 옵션
template
template_name
로그스태시에서 기본 제공되는 인덱스 템플릿 외에, 커스텀 템플릿을 사용하기 위한 옵션, template에는 정의한 인덱스 템플릿 파일의 경로를, template_name에는 엘라스틱서치에 어떤 이름으로 등록할지를 설정할 수 있다.

 

이제 실행해볼건데... 여기서 --log.level을 error로 지정하면 출력 로그를 볼 수 없으므로, 이 옵션을 사용하지 않도록 한다.

또, 실행하기 전에 엘라스틱서치가 켜있는지도 확인해두자.

.\bin\logstash.bat -f .\config\logstash-test.conf

이제, 엘라스틱서치에 로그가 저장되었는지 알아보자.

 

로그를 보면 [logstash.outputs.elasticsearch]라는 구분자의 로그들을 확인할 수 있다. 실제 인덱스에 저장이 잘 되어있는지 확인하기 위해서 output 인덱스를 찾아보자.

 

 

한번, output 인덱스의 내용을 조회해보자

그리고, 위에서 file에 기록하기로 했는데, config 폴더에 output.json 파일을 확인해보자

편의상 config에 모든 입출력파일을 모두 모았으나, 실제 작업시에는 결과 파일은 다른 곳에 넣자.

아무튼, output의 내용을 확인해보자.

이것으로, logstash의 기본과 입력 및 출력에 대해 간단히 살펴보았다.

 

'ElasticSearch' 카테고리의 다른 글

개인기록 - 오타교정 및 자동완성  (0) 2022.11.15
엘라스틱서치 오타 교정, 자동 완성 등 구현  (0) 2022.11.14
엘라스틱서치, 검색  (0) 2022.11.10
인덱스 템플릿과 분석기  (0) 2022.11.09
엘라스틱서치 기본  (0) 2022.11.09
    'ElasticSearch' 카테고리의 다른 글
    • 개인기록 - 오타교정 및 자동완성
    • 엘라스틱서치 오타 교정, 자동 완성 등 구현
    • 엘라스틱서치, 검색
    • 인덱스 템플릿과 분석기
    JangGeonWu
    JangGeonWu

    티스토리툴바