안녕하세요. 저번시간까지는 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에서는 어떻게 아키텍처를 가져갈 수 있을 지 확인해 보는시간을 가지도록 하겠습니다.
참조
'infra > 로깅과 트레이싱' 카테고리의 다른 글
[MSA] Elastic Stack을 이용한 중앙 집중형 로깅_실제 운영 환경 (0) | 2019.12.18 |
---|---|
[MSA] Filebeat와 Logstash의 비교 (4) | 2019.12.13 |
[MSA] Spring Cloud Sleuth와 Zipkin을 이용한 분산 시스템 Tracing_2 (0) | 2019.12.07 |
[MSA] Spring Cloud Sleuth와 Zipkin을 이용한 분산 시스템 Tracing_1 (0) | 2019.12.05 |
[MSA] MSA의 로깅과 트레이싱 (2) | 2019.12.04 |
댓글