ELK stack

[ELK] 8. Logstash 실행 및 filter 설정

천뿌니 2022. 6. 29. 20:43
728x90

Logstash

2022.06.21 - [ELK stack] - [ELK] 1. Elastic Stack

 

[ELK] 1. Elastic Stack

필자는 파이썬(python, numpy, pandas, matplotlib, plotly)을 활용한 데이터 전처리, 피처 엔지니어링, 모델링을 진행한 경험이 다수 있지만, 서비스 단계에서 사용하는 데이터 파이프라인은 경험해보지 못

wnstjrdl.tistory.com

커맨더 라인으로 logstash 실행

  • Mac, Unix & Linux 

  • Windows

 

파이프라인 구성

 

logstash 실행을 위한 2가지 방법 (with configurations)

  • -e : Set configurations in command line

  • -f : If configurations are set in a file (ex. pipeline.conf)

 

 

시작하기 전

  • 로컬에서 elasticsearch와 kibana 실행
  • config/logstash.yml 편집 - config.reload.automatic: true
  • [파일 이름].conf 만들고, input과 output 설정

 

 

logstash 실행

 

 

logstash로 간단한 메시지 보내서 확인

  • tcp 9900 포트를 사용해 'hello logstash' 텍스트 보내기

  • 출력 로그를 확인

 

 

weblog 데이터를 다운로드하고 logstash로 보내기

  • 출력 로그 확인

 

 

logstash tcp -> stdout

input {
	tcp {
		port => 9900
	}
}

output {
	stdout { }
}

 

logstash tcp -> elasticsearch

input {
	tcp {
		port => 9900
	}
}

output {
	elasticsearch {
		hosts => [{ip주소:9200}]
		user => "elastic"
		password => "cjswnstjr"
	}
}
  • elasticsearch에서 확인 -> GET _cat/indices
  • elasticsearch에서 데이터 검색 -> GET logstash-*/_search
  • logstash 기본 tcp -> filter -> stdout

 

logstash tcp -> filter -> elasticsearch

1. grok 패턴으로 파싱(예제 아파치 로그 데이터 - https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns - COMBINEDAPACHELOG) - 정규식을 이용하여 정형화 -> 여러 개의 field 생성
2. geoip 파싱 -> geoip 필드에 여러 geo 정보 확인
3. useragent 파싱 -> user os, 환경 등 여러 개의 필드 생성
4. mutate : convert -> grok 필드 결과에서 bytes 필드가 텍스트라서 integer로 변경해줘야 함
5. @timestamp는 현재 logstash가 실행된 시간, 우리는 log가 만든 시간에 대한 처리가 더 필요함. timestamp 필드에 있지만 텍스트 타입이 아닌 날짜 타입으로 바꿔줘야 함. -> date 필터
6. output을 elasticsearch로 변경, stdout도 같이 해도 됨.

input {
	tcp {
		port => 9900
	}
}
filter {
	grok {
		match => { "message" => "%{COMBINEDAPACHELOG}" }  -- 1
	}
	geoip {
		source => "clientip" -- 2
	}
	useragent {           -- 3
		source => "agent"
		target => "useragent"
	}
	mutate {                --- 4
		convert => {
			"bytes" => "integer"
		}
	}
	date {         --- 5
		match => {"timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
		target => "logdate"
	}
}
output {    ----- 6
	stdout { }
	elasticsearch {
		hosts => [{ip주소:9200}]
		user => "elastic"
		password => "cjswnstjr"
	}
}
  • 기존 로그 삭제 : DELETE logstash*
  • logstash 확인 : GET _cat/indices
  • 검색 : GET logstash*/_search

elasticsearch output

 

 

마무리

이번 포스팅은 logstash 실행과 filter에 대해서 알아보았습니다. filter 옵션은 위에서 설명한 거보다 많은 옵션들이 있어서 공식 문서를 참고하시면 되겠습니다.

다음 포스팅은 filebeat - logstash - elasticsearch로 이어지는 파이프라인에 대해 기록하겠습니다. 감사합니다.

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

 

Filter plugins | Logstash Reference [8.3] | Elastic

 

www.elastic.co