Spring Boot Microservices 빌드, prometheus 및 grafana로 모니터링, ELK 스택을 사용한 로그 집계 : Part III

고라니

에서 이전 부품 우리는 3 springboot의 microservices을 만들고 프로 메테우스와 grafana로를 모니터링 할 수 maneged.

이 부분에서는 로그 집계 및 분석에 중점을 둘 것입니다.

왜 그렇게 중요한가요?

로그는 시스템의 행위자가 수행하는 다양한 작업을 추적하고 추적하는 데 도움이 될 수 있으므로 특정 오작동을 더 잘 이해, 분석 및 진단 할 수있는 필수 정보입니다. 다만 정보 시스템의 수많은 애플리케이션, 장비, 서비스, 시스템 및 관리 요소와 함께이 중요한 데이터를 활용하는 것은 매우 복잡해집니다.

로그 분석

이 문제에 대한 해결책으로 로그 집계 및 분석을위한 가장 좋고 효율적인 도구 중 하나 인 ELK 스택을 사용할 것입니다.

그래서 Elk 스택은 무엇입니까?

Elasticsearch, Logstash 및 Kibana로 구성된 ELK는 3 개의 상호 보완적인 오픈 소스 프로젝트 모음입니다. 이 트리오 도구를 사용하면 시스템 관리자에게 개요를 표시하는 동시에 그가 담당하는 요소에 대한 빠른 그래픽 분석을 제공 할 수 있습니다.

고라니

1-Elasticsearch : Elasticsearch는 실시간 분산 및 오픈 소스 전체 텍스트 검색 및 분석 엔진입니다. RESTful 웹 서비스 인터페이스에서 액세스 할 수 있으며 JSON 문서를 사용하여 데이터를 저장합니다. Java 프로그래밍 언어를 기반으로하므로 Elasticsearch는 다른 플랫폼에서 실행할 수 있습니다. 이를 통해 사용자는 매우 많은 양의 데이터를 매우 빠른 속도로 탐색 할 수 있습니다.

2-Logstash : 당시에는 logstash가 애플리케이션의 로그를 처리하고 Elasticsearch로 전송하는 데 사용되었습니다. 그러나 그 이후로 logstash는 데이터 처리 파이프 라인을 만드는보다 범용적인 도구로 발전했습니다.

logstash에 의해 수집 된 데이터는 하나 이상의 목적지 (Elasticsearch, kafka, e-mail…)로 처리되고 발송됩니다.

3-Kibana : Kibana는 기본적으로 Elasticsearch의 데이터를 쉽게 시각화하고 분석하여 이해할 수있는 분석 및 시각화 플랫폼입니다. Kibana는 파이 차트, 꺾은 선형 차트 등의 시각화를 생성 할 수있는 Elasticsearch 대시 보드로 가정 할 수 있습니다.

글로벌 아키텍처

다음은 ELK 내에서 로그 흐름의 적절한 순서를 보여주는 ELK Stack의 아키텍처입니다. 여기에서 다양한 소스에서 생성 된 로그는 제공된 필터 기준에 따라 Logstash에서 수집 및 처리됩니다. 그런 다음 Logstash는 해당 로그를 Elasticsearch로 파이프 한 다음 데이터를 분석하고 검색합니다. 마지막으로 Kibana를 사용하면 로그가 요구 사항에 따라 시각화되고 관리됩니다.

엘크 아키텍처

마이크로 서비스가있는 엘크

우리의 모든 마이크로 서비스는 각각의 로그를 Logstash로 푸시하여 Elasticsearch를 사용하여 색인을 생성합니다. 인덱싱 된 로그는 나중에 Kibana에서 사용할 수 있습니다.

Logback을 로깅 프레임 워크로 사용할 것입니다.

Logback은 더 빠른 구현을 제공하고 구성 옵션을 더 많이 제공하며 이전 로그 파일을 보관하는 데 더 많은 유연성을 제공합니다.

스프링 부트 마이크로 서비스로 ELK 설정

1-Elasticsearch 설치

Elasticsearch zip 파일 다운로드 https://www.elastic.co/downloads/elasticsearch

압축을 풀고 실행하십시오.

ecerything이 제대로 작동하는지 확인하려면 다음에서 브라우저를 엽니 다. http://localhost: 9200. 다음 클러스터 정보와 유사한 내용이 표시되어야합니다.

2-Kibana 설치

Elasticsearch zip 파일 다운로드 https://www.elastic.co/downloads/kibana

압축을 풀고 실행하십시오.

다음을 사용하여 브라우저에서 Kibana를 엽니 다. http://localhost:5601. Kibana 홈페이지가 표시됩니다.

3-Logstash 설치 및 구성

Elasticsearch zip 파일 다운로드 https://www.elastic.co/downloads/logstash

압축을 풉니 다.

logstash 구성은 주로 3 단계로 구성됩니다.

1. 입력

구성 파일의 입력 섹션은 사용할 입력 플러그인을 정의합니다. 각 플러그인에는 사용하기 전에 조사해야하는 자체 구성 옵션이 있습니다. 여기서는 마이크로 서비스의 로그 백에서 가져온 json 흐름을 사용하고 전송 된 모든 로그를 수신하는 tcp 플러그인을 사용합니다.

2. 필터

구성 파일의 필터 섹션은 사용하려는 필터 플러그인, 즉 로그에 적용 할 처리를 정의합니다. 각 플러그인에는 자체 구성 옵션이 있으므로 사용하기 전에 조사해야합니다.

3. 출력

구성 파일의 출력 섹션은 로그를 전송하려는 대상 (예 : elasticsearch)을 정의합니다. 이전과 마찬가지로 각 플러그인에는 자체 구성 옵션이 있으므로 사용하기 전에 조사해야합니다.

따라서 logstash 파일 구성은 다음과 유사합니다.

input {
 tcp {
  port => 7000
  codec => "json"
 }
}
output {
 elasticsearch {
   hosts => ["localhost:9200"]
   index =>"ecommerce"
 }
}

Losgatsh가 시작되고 두 개의 포트가 표시됩니다.

  • 9600 logstash API 엔드 포인트
  • 7000 tcp 입력 수신기가 이전에 정의되었습니다.

먼저 각 마이크로 서비스에 이러한 Maven 종속성을 추가해야합니다.

<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>

@Configuration
public class LogbackConfiguration {
private static final String LOGSTASH_APPENDER_NAME = "LOGSTASH";
private static final String ASYNC_LOGSTASH_APPENDER_NAME = "ASYNC_LOGSTASH";
private final Logger LOG = LoggerFactory.getLogger(LoggingConfiguration.class);
private final LoggerContext CONTEXT = (LoggerContext) LoggerFactory.getILoggerFactory();
private final String appName;
private final String logstashHost;
private final Integer logstashPort;
private final Integer logstashQueueSize;
public LogbackConfiguration(
@Value("${spring.application.name}") String appName,
@Value("${logstash.host}") String logstashHost,
@Value("${logstash.port}") Integer logstashPort,
@Value("${logstash.queue-size}") Integer logstashQueueSize) {
this.appName = appName;
this.logstashHost = logstashHost;
this.logstashPort = logstashPort;
this.logstashQueueSize = logstashQueueSize;
addLogstashAppender(CONTEXT);
}
private void addLogstashAppender(LoggerContext context) {
LOG.info("Initializing Logstash logging");
LogstashTcpSocketAppender logstashAppender = new LogstashTcpSocketAppender();
logstashAppender.setName(LOGSTASH_APPENDER_NAME);
logstashAppender.setContext(context);
String customFields = "{\"servicename\":\"" + this.appName + "\"}"; <3>
// More documentation is available at: https://github.com/logstash/logstash-logback-encoder
LogstashEncoder logstashEncoder = new LogstashEncoder();
// Set the Logstash appender config
logstashEncoder.setCustomFields(customFields);
logstashAppender.addDestinations(
new InetSocketAddress(this.logstashHost, this.logstashPort)
);
ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter();
throwableConverter.setRootCauseFirst(true);
logstashEncoder.setThrowableConverter(throwableConverter);
logstashEncoder.setCustomFields(customFields);
logstashAppender.setEncoder(logstashEncoder);
logstashAppender.start();
// Wrap the appender in an Async appender for performance
AsyncAppender asyncLogstashAppender = new AsyncAppender();
asyncLogstashAppender.setContext(context);
asyncLogstashAppender.setName(ASYNC_LOGSTASH_APPENDER_NAME);
asyncLogstashAppender.setQueueSize(this.logstashQueueSize);
asyncLogstashAppender.addAppender(logstashAppender);
asyncLogstashAppender.start();
context.getLogger("ROOT").addAppender(asyncLogstashAppender);
}
}

logstash.host= localhost
logstash.port= 7000
logstash.queue-size= 512

kibana에서 관리로 이동하여 색인 패턴 만들기를 클릭합니다.

logstash 구성 파일에 언급 된 인덱스의 이름을 찾을 수 있습니다.

이제 검색 섹션으로 이동하면 마이크로 서비스에서 생성 된 로그 흐름을 찾을 수 있습니다.

이제 키바 나로 플레이하고 필요한 것에 따라 멋진 대시 보드를 생성 할 수 있습니다.

프로젝트의 최신 버전은 git 저장소에서 사용할 수 있습니다.

https://github.com/FirasMessaoudi/ecommerce

Suggested posts

Spring Boot에서 RESTful 웹 서비스 빌드

Spring Boot에서 RESTful 웹 서비스 빌드

이 기사에서는 Spring Boot로 RESTful 웹 서비스를 빌드하는 방법을 배웁니다. HTTP GET 요청을 수락하고 JSON 표현으로 응답하는 서비스를 구축 할 것입니다.

Kubernetes에 Spring Boot 애플리케이션 배포

Kubernetes에 Spring Boot 애플리케이션 배포

이 기사에서는 Docker Desktop에서 Kubernetes를 활성화하고, 포드를 생성하고, 스프링 부트 애플리케이션을 배포하고, Lens IDE를 사용하여 단일 노드 클러스터를 모니터링하는 방법을 설명합니다. 배울 내용 Docker Desktop이란 무엇입니까? 공식 문서에 따라.