brunch

You can make anything
by writing

C.S.Lewis

by 비즈스프링 Jul 13. 2022

Logstash – 실시간 데이터 수집 파이프라인

지난 포스트에서는 온라인 서비스에 기본 바탕이 되는 elasticsearch 에 대해서 알아보았는데요,

이번에는 실시간으로 수집된 데이터를 확인할 수 있게 해주는 파이프 라인 도구 “Logstash”에 대해 알아보겠습니다.

먼저 시작하기 전, 오픈소스로 사용되어져 있는 ELK에 대해 아래와 같이 정리해보도록 하겠습니다.


ELK 정의


Elasticsearch, Logstash, Kibana (출처 : elastic.co)


ELK는 Elasticsearch, Logstash 및 Kibana 의 오픈 소스 프로젝트의 앞 글자를 가져와 만든 단어입니다.

Elasticsearch는 검색 및 분석 엔진이며, Logstash는 데이터를 수집하는 동시에 변환하며 Elasticsearch 같은 “stash”로 전송하는 Server-side 의 Data 처리 Pipeline 역할을 하며, Kibana 는 사용자 Elasticsearch에서 Chart와 Graph를 이용해 데이터를 시각적으로 표현하고 있습니다.

비즈스프링에서는 엘라스틱 서치(Elasticsearch)를 활용하여 빠르게 실시간 데이터를 제공하고 있는데요. 이를 위해서는 로그 파일을 Logstash 로 실시간 인덱싱(indexing)을 해야 데이터를 확인 할 수 있습니다. 이와 관련해서 좀 더 자세히 알아보도록 하겠습니다.


ETL의 정의 -Extract , Transform, Load


ETL은 추출,변환, 로드를 뜻하며 데이터 엔지니어링을 통해 데이터를 추출 , 데이터를 유의미한 리소스로 변환하기 위해 최종 사용자가 액세스하고 가공하여 비즈니스 문제를 해결할 수 있도록 처리하는 과정을 말합니다. 이에 관련된 이전 포스트는 아래 링크를 참고해주세요.


참고 콘텐츠 : ETL vs ELT 차이점과 사례 살펴보기


Logstash 의 구성

Elastic 공식 홈페이지에는 Logstash를 아래와 같이 소개하고 있습니다.


Logstash는 서로 다른 소스의 데이터를 탄력적으로 통합하고 사용자가 선택한 목적지로 데이터를 정규화할 수 있다.

Logstash는 다양한 플러그인을 제공할 뿐만 아니라 직접 플러그인을 제공할 수 있으며, 다양한 입력 (input)에 포함되는 데이터와 로그를 가공 (filter)하여 원하는 목적에 업로드(output) 가 가능하도록 만든 도구입니다.


Logstash Input,Filter,Output (출처: elastic.co)


Logstash의 설정(.conf)은 입력(Input), 가공(Filter), 출력(Output) 섹션으로 나뉘는데, 이에 대한 자세한 설명과 동시에 참고 할 수 있는 Plugin들을 정리해보았습니다. Logstash를 활용하여 다양한 로그와 파일을 기반으로 데이터 구조를 구축하고 변환하여 여러가지 결과 값들을 확인할 수 있습니다.



INPUT

Logstash는 데이터를 동적으로 수집, 전환, 전송하여 전반적인 처리를 손쉽게 처리해줍니다. 일반적인 다수의 소스에서 동시에 이벤트를 가져오는 다양한 입력을 지원합니다. Log, Metrics.Web Applications, Data Source 스트리밍 되는 방식으로 수집 할 수 있습니다.

*Input plugin Ref. https://www.elastic.co/guide/en/logstash/current/input-plugins.html

Input plugins 예)

Files

SQL Queries

HTTP requests

Elasticsearch

Beats

Metrics systems

Logstash pipelines


FILTER

Logstash는 데이터가 이동하는 과정에서 분석과 식별을 통해 구조를 구축하고 이를 바탕으로 변환 통합하여 강력한 분석을 제공합니다. 형식이나 복잡성에 관계 없이 데이터를 동적으로 변환합니다.

*Filter plugin Ref. https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

Filter plugins 예)

Log Parshing

Expended Data

Add tags



OUTPUT

원하는 데이터를 라우팅할 수 있도록 다양한 출력을 제공하며, 이는 Plugins을 통해 확인할 수 있습니다.

*Output plugin Ref. https://www.elastic.co/guide/en/logstash/current/output-plugins.html

Outputs plugins 예)

Elasticsearch

Data 보관소 (ex. Amazon S3 , Google storages)

Alterting & Monitoring System


다양한 출력을 지원하여 여러 저장소로 데이터를 다운스트림 할 수 있으며 ,플러그인 파이프라인 아키텍처를 지향하며 다양한 입력,가공,출력을 조정하면서 조화롭게 운영이 가능합니다



비즈스프링 내에 적용되는 제품

– 실시간 유입 land, conv 데이터 부분

데이터가 Logstash를 엔진을 사용하여 시각화되는 과정 (출처 : BizSpring)

파이프 라인을 설정하지 않고, conf.d에 다수의 설정을 넣을 경우 하나의 파이프 라인에서 동시에 동작하므로 원하는 것과 다른 결과를 낼 수 있습니다. default로 경로인 /etc/logstash/conf.d/*.conf로 로딩 하도록 되어 있는 부분을 파이프 라인에서 설정을 제거하고 각각의 파이프 라인을 추가하여 사용할 수 있습니다.


Trakcer Data logs 파일 (출처: BizSpring)
Pipeline에 작성되어져 있는 conf 파일(출처 : BizSpring)


cat /etc/logstash/conf.d/star_realtime_conv.conf


# 입력부

input {

    # 입력 방식을 file read 방식으로 지정

    file {

        type => "log4j"

        path => "/home/biz/trk007/data/trk_conv_*                   #  trk_conv_로 시작하는 파일을 읽는다.

        start_position => "beginning"

        sincedb_path => "/home/biz/trk007/sincedb/trk_conv-since.txt"  # 처리 내역을 저장할 위치

        codec => json                                                  # 파일 형식은 JSON 이다.

    }

}

# 변경/필터

filter {

    # 내용(컨텐츠) TRANSFORM

    mutate {        # 아래의 컬럼 데이터는 제거한다.

        remove_field => [ "vt", "ptm", "is_mobile", "pc_mobile_tp", "dd", "odn", "goal" ]                                  

    }

 date {

        match => [ "stat_date", "ISO8601" ]  # 날짜 데이터 이 stat_date format.

        target => "stat_date"               

    }

    ... (생략) ...

}

# 출력부

output {

    #stdout { codec => rubydebug }  # 디버깅용, 수동실행시 (콘솔)화면에 출력시 주석 제거

    # elasticsearch에 바로 인덱싱(출력) 한다.

    elasticsearch {

        hosts => [ "http://esm001:9200" ]

        index => "realtime_conv-%{[@metadata][index_suffix]}"

       # realtime_conv_{오늘자} 인덱스에 인덱싱 한다.

    }

}


input { } 항목에는 어느 경로에서 데이터 or 로그 파일을 가져올 것인지 확인하며, filter { } 부분에서는 해당 데이터 속성 값을 지정하여 기준이 되는 데이터 정의합니다. 이렇게 명명한 데이터들을 어느 곳으로 보내야 하는지 output { }에 elastic hosts 명시 한 후 Logstash 실행하게 되면 아래와 같이 Elastic에서 저장된 데이터를 확인하실 수 있습니다.

해당 conf.d 설정된 Pipeline에 설정 값들을 따라 업로드 되어진 데이터들을 아래의 Index Manegement에서 확인하실 수 있습니다.

ElasitcSearch > Index Management > realtime_land_2022-07-* indexes (출처 : BizSpring)
ElasticSearch > Index Management > realtime_conv_2022-07-* indexes (출처 : BizSpring)



indexing 되어진 실시간 데이터들은 아래와 같이 유입 분석, 트래픽, 성과 추이의 데이터들을 실시간으로 확인 할 수 있습니다.


실시간 유입 분석 리포트 (출처 : BizSpring 내 솔루션 리포트 )
실시간 트래픽 그래프 (출처 : BizSpring 내 솔루션 리포트)
실시간 성과 추이 그래프 (출처 : BizSpring 내 솔루션 리포트)
실시간 성과 추이 데이터 (출처 : BizSpring 내 솔루션 리포트)


이번 콘텐츠에서는 Logstash 라는 실시간 데이터 처리 엔진을 알아보았는데요,

비즈스프링은 앞서 설명드린 Logstash를 활용하여 자사의 다양한 솔루션에서 실시간 데이터를 제공하고 있습니다. 데이터를 실시간으로 가공하고 전송하여 리포트에서 빠르게 확인할 수 있는 비즈스프링의 솔루션이 필요하거나, Logstash를 활용하여 실시간 데이터 수집에 대해 궁금하시다면 언제든지 비즈스프링과 고민을 나눠주시기 바랍니다.



02-6919-5516 / ad@bizspring.co.kr


매거진의 이전글 빅데이터 플랫폼 Elasticsearch 에 대하여
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari