Logstash를 윈도우에 설치하고 기본동작을 하는 테스트를 진행합니다.
1. Logstash 설치
2. Http 로 데이터를 수신받기위한 설정
3. Logstash 실행
4. curl 데이터 전송 및 수신 확인
5. 기본적인 filter 기능 확인 및 테스트 진행
1. Logstash 설치
Elastic - Logstash 공식 홈페이지에서 다운로드
https://www.elastic.co/kr/downloads/logstash
Download Logstash Free | Get Started Now
Download Logstash or the complete Elastic Stack (formerly ELK stack) for free and start collecting, searching, and analyzing your data with Elastic in minutes....
www.elastic.co
압축파일을 적당한 위치에 풀어서 설치한다
# 설치 경로
D:\dev\logstash-8.17.2
2. Http 로 데이터를 수신받기위한 설정
나중에 정식적인 형태로는 ./config/pipelines.yml 파일을 작성하여 파이프라인을 생성해야합니다
하지만 현재는 기본동작을 처리하기위해 간단하게 작업을 진행 예정
먼저 파이프라인설정을 하는 설정파일을 생성.
설정파일 경로 : ./config/conf.d/input_event.conf
해당 파일내용을 작성
input {
# HTTP 서버를 띄워 데이터를 수신한다. (port 만 따로 지정)
http {
port => 8888
codec => json_lines
}
}
output {
# 디버깅을 위한 설정
# 표준 출력에서 json 을 보기 좋게 표시해 준다.
stdout {
codec => rubydebug
}
}
port 를 8888로 지정하고 http 데이터를 수신하는 모듈을 작성
3. Logstash 실행
이제 해당 설정파일로 logstash 를 실행
윈도우에서 작업중이므로 powershell 를 활용
# 설치경로로 이동
PS C:\>
PS C:\> d:
PS D:\> cd dev
PS D:\dev> cd .\logstash-8.17.2\
# 실행
PS D:\dev\logstash-8.17.2> .\bin\logstash.bat -f .\config\conf.d\input_event.conf
이것저것 로그가 올라오고 Pipelines running 이라는 메시지가 보이면 정상 확인.
4. curl 데이터 전송 및 수신 확인
이제 json data를 전송해본다. 새로운 창을 띄우고 다음 명령어를 실행
curl http://localhost:8888 -contenttype "application/json" -method post -body '{
"id": "1",
"name": "bab"
}'
powershell 명령어 이므로 리눅스 명령어와는 조금 다른 형태입니다.(주의)
전송하고 나면 실행중이던 logstash에 수신한 데이터가 출력됩니다.
{
"@timestamp" => 2025-02-12T07:03:13.600094500Z,
"id" => "1",
"user_agent" => {
"original" => "Mozilla/5.0 (Windows NT; Windows NT 10.0; ko-KR) WindowsPowerShell/5.1.26100.2161"
},
"url" => {
"domain" => "localhost",
"port" => 8888,
"path" => "/"
},
"name" => "bab",
"host" => {
"ip" => "0:0:0:0:0:0:0:1"
},
"event" => {
"original" => "{\n \"id\": \"1\",\n \"name\": \"bab\"\n}"
},
"@version" => "1"
}
(쓸대없는 로그가 있을 수 있음)
보낸데이터에서 logstash 가 추가적으로 만드는 데이터가 포함되어서 로그가 출력됩니다.
5. 기본적인 filter 기능 확인 및 테스트 진행
이제 logstash 의 기본적인 filter기능을 테스트해봅니다.
filter 에서 제공하는 여러 플러그인을 사용하여 수정이 가능합니다.
여기서는 mutate 를 사용하여 불필요한 컬럼을 지우는 작업을 해보겠습니다.
(플러그인에 대한 자세한 설명은 따로 작성하겠습니다.)
전송한 데이터만 출력하기 위해 나머지 데이터를 모두 지우겠습니다.
설정파일 경로 : ./config/conf.d/input_event.conf
input {
# HTTP 서버를 띄워 데이터를 수신한다. (port 만 따로 지정)
http {
port => 8888
codec => json_lines
}
}
filter {
# HTTP POST 요청으로 아닐 경우 drop 처리한다.
if [http][method] != "POST" {
drop {}
}
# 불필요한 필드를 삭제
mutate {
remove_field => ["@timestamp", "user_agent", "url", "host", "@version", "http"]
}
}
output {
# 디버깅을 위한 설정
# 표준 출력에서 json 을 보기 좋게 표시해 준다.
stdout {
codec => rubydebug
}
}
기존 내용에 filter 를 추가한 후 logstash 를 재시작합니다
그리고 다시 curl로 데이터를 전송합니다.
{
"event" => {
"original" => "{\n \"id\": \"1\",\n \"name\": \"bab\"\n}"
},
"name" => "bab",
"id" => "1"
}
동일한 데이터를 전송했지만 filter 기능으로 인하여 출력되는 내용을 변경하였습니다.
logstash 의 기본 동작을 테스트 해보았습니다.
추가적으로
input 내용을 작성하여 어디서 데이터를 받을것인지 작성하고
filter 내용을 작성하여 데이터를 가공 후에
output 내용을 작성하여 어디로 전달하는지 작성을 하면 됩니다.