본문 바로가기
프로그래밍/로깅과 트레이싱

[MSA] Elastic Stack을 이용한 중앙 집중형 로깅_1

by 사바라다 2019. 12. 9.

안녕하세요. 저번시간까지는 Tracing에 대해서 알아보았습니다. 그리고 이번시간 부터는 중앙 집중형 로깅에 대해서 알아보도록 하겠습니다.

중앙 집중형 로깅이라는 것은 말 그대로 기존 방식의 로컬의 하드디스크에 로깅을 남기는 것이 아니라 외부에 로깅을 하는 것을 말합니다. 이런 로깅 방법의 지원으로 Elastic Stack을 이용할 수 있습니다.

원래 ELK Stack은 빅데이터 분석용으로 많이 사용되었었지만 클라우드 환경이 보편화 되며 중앙 집중형 로깅에도 많이 사용된다고 합니다.

간단한 설명 후 진행하도록 하겠습니다.

Elastic Stack?

사실 Elastic Stack보다는 ELK Stack으로 많이 알려져 있습니다. 그럼 ELK Stack이란 뭘까요? 이에대한 설명은 elastic 회사 홈페이지에서 찾을 수 있었습니다.

"ELK"는 Elasticsearch, Logstash 및 Kibana, 이 오픈 소스 프로젝트 세 개의 머리글자입니다. Elasticsearch는 검색 및 분석 엔진입니다. Logstash는 여러 소스에서 동시에 데이터를 수집하여 변환한 후 Elasticsearch 같은 “stash”로 전송하는 서버 사이드 데이터 처리 파이프라인입니다. Kibana는 사용자가 Elasticsearch에서 차트와 그래프를 이용해 데이터를 시각화할 수 있게 해줍니다.

이렇게 ELK Stack이 널리 퍼지게 되고 추후에 경량의 단일 목적 데이터 수집기인 FileBeat가 합류하게 됩니다. 이때부터 ELK Stack은 Elastic Stack이 되었다고 합니다.

아래는 일반적으로 그릴 수 있는 elastic stack을 이용한 중앙 집중형 로깅의 아키텍처 입니다.

그럼 이제 각각의 요소에 대해서 설치를 하며 좀 더 자세히 살펴보도록 하겠습니다.

ElasticSearch

ElasticSearch은 Restful Api인 nosql 데이터베이스 시스템입니다. 높은 유연성과 분산된 환경에서의 검색 및 분석 엔진으로 사용됩니다. ElasticSearch는 로그를 집중화 시키고 쉽게 사용자가 원하는 바를 찾을 수 있게해줍니다.

JAVA 설치

ElasticSearch를 설치하기 위해서는 먼저 JAVA 8이상 버전이 설치되어 있어야 합니다.

ElasticSearch 설치

JAVA가 이미 설치되어있거나 설치하셨다면 이번에는 ElasticSearch를 다운로드 받아야합니다. 다운로드는 https://www.elastic.co/kr/downloads/elasticsearch 사이트에서 받을 수 있습니다.

본인인의 OS 환경에 맞게 설치합니다. 저는 Mac을 사용하고 있으므로 Mac용을 다운로드 받았습니다.

elasticsearch-7.4.2-darwin-x86_64.tar.gz

파일이 받아졌고 아래 명령어로 압축을 해제합니다.

tar -xzvf elasticsearch-7.4.2-darwin-x86_64.tar.gz

그리고 압축이 해제된 디렉토리로 들어가 bin 디렉토리의 elasticsearch를 실행합니다.

bin/elasticsearch

그러면 아래와 같은 로그가 출력되며 완료되게 됩니다.

  • 환경설정의 경우 config/elasticsearch.yml파일을 통해 할 수 있습니다.

Kibana

Kibana는 데이터를 시각화하는 툴이며 Elasticsearch에 집중화 되고 분석된 결과를 개발자들에게 시각적으로 쉽게 보여줄 수 있습니다.
dashboard를 통해 다양한 방법으로 제공합니다.

kibana 설치

https://www.elastic.co/kr/downloads/kibana에서 kibana를 다운로드 받을 수 있습니다.

elasticsearch와 마찬가지로 아래 명령어를 통해 압축을 해제합니다.

tar -xzvf kibana-7.4.2-darwin-x86_64.tar.gz

그리고 아래명령어를 통해 kibana를 실행합니다. 만약 elasticsearch가 실행되어 있지 않다면 warning 메시지가 지속적으로 출력되니 유의하시기 바랍니다.

bin/kibana

정상적으로 실행되었다면 아래와 같은 메시지가 출력될 것입니다.

그리고 http://localhost:5601으로 들어가보면 페이지가 출력되는 것을 알 수 있습니다.

해당 페이지에서 elasticsearch의 데이터를 확인할 수 있다는 뜻입니다.

Logstash

Logstash는 데이터를 노드에서 노드로 전송하는 pipeline 툴입니다. 일반적으로 파일, DB 등의 다양한 데이터를 인풋으로 ElasticSearch로 보내는 역할을 담당합니다.

Logstash 설치

ElasticSearch, Kibana와 마찬가지로 https://www.elastic.co/kr/downloads/logstash에서 다운로드 받을 수 있습니다.

logstash를 설치하셨으면 설치 디렉토리로 들어가 아래의 명령어로 실행합니다.

bin/logstash -f config/logstash-sample.conf

logstash의 경우 config 파일이 적절하지 못하면 실행이 되질 않습니다. 아래는 제가 임의로 만들어본 config 파일입니다. 아래와 같이 input -> filter -> output의 형태를 가지고 있습니다. 아래의 예제는 kafka의 한 토픽에서 정보를 읽어와 elasticsearch로 전달하는 과정입니다.

input {
     kafka {
         bootstrap_servers => "localhost:9092"
         group_id => "logstash"
         topics => ["test-logstash"]
         consumer_threads => 1
 #   decorate_events => true
     }
 }
  filter {
      mutate {
          gsub => [ "message", "\r", "" ]
      }
      grok {
          match => {
             "message" =>
                 "%{TIMESTAMP_ISO8601:timestamp} \[(%{DATA:X-B3-TraceId})?/(%{DATA:X-B3-SpanId})?\]%{SPACE}%{NOT    SPACE:level}%{SPACE}- \[%{DATA:thread}\] %{NOTSPACE:class}%{SPACE}\[%{NUMBER:line}\] : %{GREEDYDATA:body}"
        }
        remove_field => ["message"]
    }
}
output
  elasticsearch {
       hosts => "localhost:9200"
       index => "platform-logs-%{+YYYY.MM.dd}"
   }
    stdout {}
}

logstash의 config파일에 관해서는 다음에 별도의 시간을 내어 구체적으로 설명해드리도록 하겠습니다.

fileBeat

오늘 마지막으로 알아 볼 시스템은 filebeat라는 시스템입니다. filebeat는 로그와 파일을 경량화된 방식으로 전달하는 시스템으로 상대적으로 logstash보다 가벼우며 로그를 생성하는 파일을 읽어 중앙 집중화 될 수 있도록 전달합니다. (elastic 소식지를 보면 AWS S3, MQ 등등을 지원하는것 같은데.. 해보지 않아 확실하지는 않습니다.)

filebeat 설치

filebeat를 후 실행해보도록 하겠습니다.

https://www.elastic.co/kr/downloads/beats/filebeat

압축을 풀어준 후 filebeat의 홈 디렉토리로 이동합니다.

그리고 아래명령어를 입력합니다.

filebeat -e -c filebeat.yml

filebeat.yml이라는 설정파일을 기반으로 filebeat를 실행한다는 말입니다. 출력되는 문자를 출력하거나 하고싶다면

filebeat -e -c filebeat.yml -d “publish” # or -d "*"

을 이용할 수 있습니다.

마무리

오늘은 이렇게 elastic Stack에 대한 개별적인 요소를 알아보았습니다.

다음 포스팅에서는 Elastic Stack간의 연동되는 것과 실제 MSA에서는 어떻게 아키텍처를 가져갈 수 있을 지 확인해 보는시간을 가지도록 하겠습니다.

참조

https://www.edureka.co/blog/elk-stack-tutorial/

https://www.elastic.co/kr/what-is/elk-stack

댓글