ELK 스택을 사용하여 Spring Boot Microservices를 모니터링하는 방법

in hive-137029 •  3 years ago 

()응용 프로그램을 개발하는 동안 우리는 항상 응용 프로그램이 정상적으로 실행되지 않는 경우 무엇이 잘못되었는지 지시할 수 있는 기능을 코드에 통합합니다. 이 기능은 로깅에 불과합니다. 로깅 작업이 많을수록 애플리케이션 문제를 해결하는 데 필요한 작업이 줄어듭니다. 우리는 모든 로깅 정보를 로그 파일이라고 하는 텍스트 형식 파일에 보관합니다. 이 파일은 서버 시작, 모든 사용자 활동, 클래스 이름, 메서드, 타임스탬프, 스택 추적에서 발생한 예외 등과 같은 모든 세부 정보를 캡처합니다. 또한 로그 파일에 필요한 모든 정보가 무엇인지에 따라 다릅니다. 때때로 이러한 로그 파일의 크기가 커지고 정확한 문제를 수동으로 찾는 것이 지루해집니다. 여기서 ELK Stack은 런타임에 로그 파일을 분석하는 데 도움이 됩니다. 따라서 우리 기사는 'ELK Stack을 사용하여 Spring Boot Microservices를 모니터링하는 방법?'에 관한 것입니다.

'ELK 스택'이라는 용어가 나날이 대중화되고 있습니다. ELK는 Elasticsearch, Logstash 및 Kibana의 세 가지 도구 조합의 약어입니다. 일반적으로 우리는 그것들을 모두 사용하여 애플리케이션을 모니터링합니다. 그러나 각각은 아래 섹션에서 논의할 다른 목적을 가지고 있습니다. ELK Stack 및 Splunk는 세계에서 가장 널리 사용되는 로그 관리 플랫폼입니다. 여기서는 ELK Stack에 대해 설명하겠습니다. 'ELK Stack을 사용하여 Spring Boot Microservices를 모니터링하는 방법'이라는 주제에 대해 논의를 시작해 보겠습니다. 및 관련 개념.

목차 (탐색하려면 아래 링크를 클릭하십시오)

애플리케이션 모니터링이 더 중요해지는 이유는 무엇입니까?

어떤 조직도 1초의 다운타임이나 애플리케이션 성능 저하를 허용하고 싶지 않습니다. 또한 성능 문제는 브랜드 이름에 해를 끼칠 수 있으며 경우에 따라 수익 손실로 이어질 수도 있습니다. 따라서 앱에 항상 효율적이고 안전하게 액세스할 수 있도록 24시간 연중무휴로 보장하기 위해 개발자는 애플리케이션과 이를 지원하는 인프라에서 생성되는 다양한 유형의 데이터를 활용합니다. 일반적으로 로그 형식의 이 데이터는 이러한 응용 프로그램을 모니터링하고 발생하는 문제를 식별하고 해결하는 데 중요합니다. 체계적인 로깅은 생산 시간 문제를 해결하는 데 중요한 역할을 합니다.

ELK Stack은 로그 관리 플랫폼입니다. "ELK"라는 단어는 Elasticsearch, Logstash 및 Kibana가 모두 Elastic 에서 개발, 관리 및 유지 관리하는 세 가지 오픈 소스 프로젝트의 약어입니다 . 또한 Elasticsearch 는 Apache Lucene 검색 엔진을 기반으로 하는 검색 및 분석 엔진입니다. Logstash 는 여러 소스에서 동시에 데이터를 수집하고 변환한 다음 Elasticsearch와 같은 "숨김"으로 보내는 서버 측 데이터 처리 파이프라인입니다. Kibana 는 Elasticsearch 위에서 작동하는 시각화 계층으로, 사용자에게 데이터를 분석하고 시각화할 수 있는 기능을 제공합니다.

왜 ELK 스택인가?

오늘날과 같이 경쟁이 치열한 세상에서 애플리케이션의 아키텍처는 클라우드, 클라우드 또는 하이브리드 환경에 배포되는 마이크로서비스, 컨테이너 및 오케스트레이션 인프라로 바뀌었습니다. 또한 이러한 환경에서 생성되는 데이터의 절대적인 양은 지속적으로 증가하고 있습니다. 따라서 로그 분석과 같은 데이터의 수동 분석 자체가 과제가 되고 있습니다. 여기서 ELK Stack과 같은 중앙 집중식 로그 처리 및 분석 솔루션이 등장합니다. 따라서 개발자에게 필요한 가시성을 높이고 앱을 항상 사용할 수 있고 응답할 수 있도록 합니다.

ELK 스택은 무엇에 사용됩니까?

ELK의 가장 일반적인 용도는(함께, 세 가지 다른 구성 요소) IT 환경을 모니터링, 문제 해결 및 보호하는 것입니다. 또한 비즈니스 인텔리전스 및 웹 분석과 같은 ELK 스택에 대한 더 많은 사용 사례가 있습니다. 또한 Logstash는 데이터 수집 및 처리를 처리하고 Elasticsearch는 데이터를 인덱싱 및 저장하며 Kibana는 데이터 쿼리 및 시각화를 위한 사용자 인터페이스를 제공합니다.

ELK 스택(Elasticsearch, Logstash 및 Kibana)을 다운로드하고 설치하는 방법은 무엇입니까?

ELK Stack을 사용하려면 Elasticserach, Logstash 및 Kibana의 세 가지 소프트웨어를 모두 다운로드해야 합니다. 다음은 시스템에 다운로드하여 설치하는 단계입니다.

1) 엘라스틱서치

  1. https://www.elastic.co/downloads/elasticsearch
    로 이동합니다. 2) OS 기반 링크를 선택합니다.
  2. 시스템의 위치에 ZIP 파일의 압축을 풉니다.
  3. 시작하려면 bin 폴더로 이동하여 아래 명령을 실행합니다. , 포트: 9200
    > elasticsearch.bat 에서 시작됩니다.

2) 키바나

  1. https://www.elastic.co/downloads/elasticsearch
    로 이동 2) OS 기반 링크 선택
  2. 시스템 위치에 ZIP 파일 압축
    풀기 4) Elasticsearch와 Kibana 연결 : config/에서 kibana.yml 파일 열기 kibana.yml : 아래 줄의 주석을 제거합니다.
    elasticsearch.hosts : http://localhost:9200
  3. 시작하려면 bin 폴더로 이동하여 아래 명령을 실행합니다. 포트 : 5601
    > kibana.bat 에서 시작됩니다.

3) 로그스태시

  1. https://www.elastic.co/downloads/logstash
    로 이동 2) OS 기반 링크 선택
  2. 시스템 위치에 ZIP 파일 압축
    풀기 4) bin 폴더로 이동하여 'logstash.conf' 파일 하나 생성 일부 구성으로. 이 파일의 몇 가지 예는 아래 링크에 나와 있습니다.
    https://www.elastic.co/guide/en/logstash/current/config-examples.html
  3. 시작하려면 bin 폴더로 이동하여 아래 명령
    > logstash -f logstash.conf 를 실행하십시오.

ELK 스택을 사용하여 Spring Boot Microservices를 모니터링하는 방법은 무엇입니까?

이제 Spring Boot 애플리케이션을 생성하고 ELK Stack과 통합할 차례입니다. 그러나 Microsevices 기반 애플리케이션에서 작업하는지 아니면 Simple Spring Boot 애플리케이션에서 작업하는지 여부는 중요하지 않습니다. 여기서 우리의 초점은 로그 파일을 생성하는 것이며 로그 파일의 내용은 logstash에 의해 캡처됩니다. 로그 파일을 생성하는 Simple Java 애플리케이션을 생성할 수도 있습니다. 어쨌든 통합 프로세스는 일반적으로 동일합니다. Spring Boot 애플리케이션을 생성하고 ELK Stack과 차근차근 통합해 봅시다.

1단계: STS를 사용하여 새 스프링 부트 스타터 프로젝트 생성

STS를 사용하여 Spring Boot Starter 프로젝트를 생성해 보겠습니다. 스타터 프로젝트를 생성하는 동안 스타터 프로젝트 종속성으로 'Spring Web' 및 'Spring Boot DevTools'를 선택합니다. Spring Boot Starter 프로젝트를 생성하는 방법을 모르더라도 내부 링크 를 방문하십시오 .

2단계: RestController 생성

RestControlller를 InvoiceController로 생성하고 아래와 같이 로그 파일에 충분한 양의 로그 메시지를 생성하는 메소드를 작성합니다.

가져오기 java.io.PrintWriter; 
가져오기 java.io.StringWriter;

org.slf4j.Logger 가져오기 ; 
org.slf4j.LoggerFactory 가져오기 ; 
org.springframework.web.bind.annotation.GetMapping을 가져옵니다 . 
org.springframework.web.bind.annotation.RequestMapping을 가져옵니다 . 
org.springframework.web.bind.annotation.RestController 가져오기 ;

@RestController 
@RequestMapping( "/invoice" ) 
공개 클래스 InvoiceController {

      개인 정적 최종 로거 로거 = LoggerFactory.getLogger(InvoiceController.class ) ;

      @GetMapping( "/get" ) 
      public String getInvoice() { 
         logger .info( "getInvoice() 메소드 입력 중" ); 
         try { 
             logger .info( "invices 찾기" ); 
             throw new RuntimeException( "인보이스를 사용할 수 없음" ); 
         } catch (예외 e) { 
             logger.error( " 인보이스를 찾을 수 없습니다." +e.getMessage()); 
             e.printStackTrace(); 
             StringWriter sw= 새로운 StringWriter();
PrintWriter(sw); 
             e.printStackTrace(pw); 
             logger .error( "예외는 -: " +sw.toString()); 
         } 
         반환  "인보이스" ; 
     } 
}

3단계: application.properties 업데이트

application.properties를 업데이트하고 아래와 같이 로그 파일의 위치를 제공하십시오.

logging.file.name=D:/ELK_Stack/elktest.log

4단계: logstash.conf 파일 생성

이 단계에서는 logstash 설치의 bin 폴더에 새 logstash.conf 파일을 만듭니다. 예를 들어, 우리의 경우 위치는 'D:\ELK_Stack\logstash-7.13.3\bin'입니다. 아래와 같이 자바 로그용 샘플 파일을 생성했습니다.

일반적으로 입력, 필터 및 출력의 세 부분으로 구성됩니다.

1) 입력 : 읽을 위치를 나타냅니다.
2) 필터 : 필터링할 대상을 나타냅니다 .
3) 출력 : 출력을 제공하는 방법을 나타냅니다.

입력 { 
    파일 { 
            유형 => "java" 
            경로 => "D:/ELK_Stack/elktest.log" 
            코덱 => 여러 줄 { 
            패턴 => "^%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME }.*" 
            부정 => "참" 
            무엇 => "이전" 
         } 
    } 
}

filter { 
    if [message] =~ "\tat" { 
       grok { 
            match => ["message", "^(\tat)"] 
            add_tag => ["stacktrace"] 
       } 
   } 
}

출력 { 
     stdout { 
         코덱 => rubydebug 
     } Elasticsearch 
     { 
         호스트 => ["localhost:9200"] 
     } 
}

5단계: 애플리케이션 및 ELK 스택 실행

  1. Spring Boot Application
    실행 2) Elasticsearch 실행 : bin 폴더로 이동하여 아래 명령어 사용
    > elasticsearch.bat
  2. Kibana 실행 : bin 폴더로 이동하여 아래 명령어 사용
    > kibana.bat
  3. Logstash 실행 : bin 폴더로 이동 아래 명령 사용
    > logstash -f logstash.conf

logstash를 시작하면 로그 파일의 구문 분석이 시작되고 아래 추적과 같이 표시됩니다.

ELK 스택을 사용하여 Spring Boot Microservices를 모니터링하는 방법은 무엇입니까?

Kibana 대시보드에서 테스트하는 방법은 무엇입니까?

  1. Kibana UI로 이동: 브라우저를 열고 http://localhost:5601 을 입력합니다.
  2. 대시보드를 클릭한 다음 '새 대시보드 만들기'를 클릭합니다. 아래 첨부된 스크린샷을 참조하십시오.
  3. '인덱스 패턴 생성'을 클릭하여 하나의 검색 인덱스 패턴을 제공합니다.
  4. 'logstash-*'와 같은 인덱스 패턴 이름 필드에 일부 패턴을 입력하고 '다음 단계' 버튼을 클릭합니다
    . 5) 시간 필드에서 '를 선택합니다. @timestamp'를 클릭한 다음 '인덱스 패턴 생성'을 클릭합니다.
  5. 이제 왼쪽 막대를 클릭하고 '검색'을 선택하면 대시보드에 데이터가 채워집니다.

키바나 설정

아래 스크린샷은 '대시보드'와 '디스커버'로 이동할 수 있는 곳을 보여줍니다.

키바나 설정

'디스커버'를 클릭하면 Kibana UI에 아래 결과가 나타납니다.

키바나 설정

우리는 또한 아래와 같이 우리의 요구 사항에 따라 시간을 설정할 수 있습니다.

키바나 설정

Kibana 대시보드에서 데이터를 검색하는 방법은 무엇입니까?

Kibana UI에서 결과를 검색하는 동안 필요한 몇 가지 쿼리에 대해 논의해 보겠습니다. 앞서 언급했듯이 Elasticsearch는 Apache Lucene 검색 엔진을 기반으로 하는 검색 및 분석 엔진입니다. 그것은 완전히 오픈 소스이며 Java로 구축되었습니다. 사실 Elasticsearch는 NoSQL 데이터베이스로 분류됩니다. 이는 Elasticsearch가 구조화되지 않은 방식으로 데이터를 저장한다는 것을 의미합니다. 따라서 SQL을 사용하여 데이터를 쿼리할 수 없습니다. 새로운 Elasticsearch SQL 프로젝트에서는 SQL 문을 사용하여 데이터와 상호 작용할 수 있습니다. 구문과 다양한 연산자를 알고 있으면 Kibana UI에서 쿼리하는 데 도움이 됩니다.

Kibana 에서 데이터를 쿼리하는 두 가지 방법이 있습니다. 기존 Lucene 쿼리 구문 을 사용 하거나 최신 KQL(Kibana 쿼리 언어) 을 사용 합니다. Kibana 7.0 이상을 사용하는 경우 Kibana 쿼리 언어가 기본적으로 포함됩니다. 그러나 예제를 포함하여 두 가지 접근 방식에 대한 기본 사항에 대해 논의할 것입니다. 한 언어가 다른 언어보다 귀하의 요구 사항에 더 적합할 수 있습니다. 그것은 전적으로 검색의 성격이나 개인의 경험에 달려 있습니다. 그러나 KQL은 퍼지 또는 정규식 검색을 지원하지 않는 등 몇 가지 제한 사항이 있습니다. 또한 Elastic 팀이 향후 릴리스에서 KQL 확장에 집중할 것으로 예상할 수 있습니다.

필드별 검색(Lucence)

필드 이름으로 쿼리하는 것은 Elasticsearch에서 데이터를 필터링하는 가장 널리 사용되는 방법입니다. 특정 용어가 포함된 특정 필드를 검색할 수 있습니다. 그러면 아래와 같이 할 수 있습니다.

이름:"특정 용어" 예⇒ 메시지: ERROR

위의 쿼리는 메시지 필드에서 'ERROR'라는 용어를 검색하고 있음을 나타냅니다. 메시지 필드에 ERROR가 있는 결과를 반환합니다.

자유 텍스트(Lucence)

Google 검색과 같은 가장 단순한 형태의 데이터 쿼리.

인보이스 ⇒ 모든 필드에 "인보이스"가 포함된 결과를 반환합니다.

"청구서를 찾을 수 없음" ⇒ 모든 필드에 "청구서를 찾을 수 없음"이 포함된 결과를 반환합니다.

부울 연산자 (Lucence): AND, OR, NOT

다른 프로그래밍 언어와 마찬가지로 Elasticsearch는 OR, AND 및 NOT 연산자도 지원합니다. 또한 이러한 연산자의 의미는 다른 프로그래밍 언어와 동일합니다. AND, OR 및 NOT과 같은 연산자는 대문자여야 합니다.

♦ Invoice AND Found ⇒ Invoice 및 Found 용어가 모두 포함된 결과를 반환합니다.

♦ Error NOT Warning ⇒ Error는 포함하지만 Warning은 포함하지 않는 결과를 반환합니다.

♦ 예외 또는 오류 ⇒ 예외 또는 오류 또는 둘 다를 포함하는 결과를 반환합니다.

범위 (루선스) [ ], { }, :>, :>=, :<, :<=

Lucence는 다양한 유형의 범위 검색을 지원합니다: [ ], { }, :>, :>=, :<, :<=

  • 가격:[2 TO 24] ⇒ 2와 24를 포함하여 2에서 24 사이의 가격으로 결과를 반환합니다.
    
  • 가격:{2 TO 12} ⇒ 2에서 12 사이의 가격으로 결과를 반환합니다.
    
  • 가격:>2 ⇒  2보다 큰 가격으로 결과를 반환합니다.
    

와일드카드(Lucence) *, ?

  • pr* ⇒ 가격 및 프로토콜과 같이 "pr"로 시작하는 값을 포함하는 결과를 반환합니다.
    
  • pr*e ⇒ 가격 및 소수와 같이 "pr"로 시작하고 "e"로 끝나는 값을 포함하는 결과를 반환합니다.
    
  • stat?s ⇒ 상태와 같이 "stat"로 시작하고 "s"로 끝나고 그 사이에 한 문자가 있는 값을 포함하는 결과를 반환합니다.
    

정규식(루선스) / [ ] /, / < > /

  • /pri[mc]e/ ⇒ 프라임 또는 가격이 포함된 결과를 반환합니다.

Kibana 쿼리 언어(KQL)는 버전 6.3에서 처음 도입되었으며 버전 7.0부터 기본적으로 사용 가능하게 되었습니다. 그러나 이 새로운 언어는 스크립팅된 필드 지원을 제공하고 위에서 논의한 Lucene 언어와 비교하여 구문을 단순화하기 위해 구축되었습니다.

부울 연산자 (KQL) AND, OR, AND NOT

Lucence 구문과 달리 KQL 부울 연산자는 대소문자를 구분하지 않습니다. 'AND', 'OR', 'AND NOT' 대신 'and', 'or', 'and not'을 각각 사용할 수 있습니다. 또한 'NOT'는 'AND NOT'으로 대체됩니다.

예외 AND NOT 오류 ⇒ 예외만 포함하는 결과를 반환하지만 예외와 오류를 모두 포함하는 결과는 반환하지 않습니다.
오류가 아닌 예외 ⇒ 예외만 포함하는 결과를 반환하지만 예외와 오류를 모두 포함하는 결과는 반환하지 않음

기본적으로 ' AND ' 는 'OR'보다 우선순위가 높습니다 . 괄호를 사용하여 이 기본값을 재정의할 수 있습니다.

예외 및 (오류 또는 경고) ⇒ 예외 및 오류 또는 경고가 포함된 결과를 반환합니다.

검색어 앞에 ' NOT ' 을 사용하면 그 의미를 되돌립니다.

not status:"on Hold" ⇒ 상태로 나열된 보류가 없는 결과를 반환합니다.

괄호를 사용하여 전체 그룹을 되돌릴 수도 있습니다.

not(name:Michael 또는 location:"Washington DC") ⇒ 이름으로 Michael이 없거나 위치로 Washington DC가 없는 결과를 반환합니다.

필드별 검색(KQL)

메시지: 오류 ⇒ 메시지 필드에 오류가 있는 결과를 반환합니다 .
message: "Invoice Unavailable" ⇒ 메시지 필드에 'Invoice Unavailable'이 있는 결과를 반환합니다. 여기에서 "Invoice Unavailable" 값은 따옴표로 묶여 검색에 Invoice 및 Unavailable이라는 단어가 지정된 순서로 포함됩니다. 따옴표가 없으면 결과에 사용할 수 없는 송장도 포함됩니다.

KQL에서는 다음과 같이 단일 필드에서 여러 값을 검색할 수도 있습니다.

메시지: ("찾음" 또는 "찾을 수 없음") ⇒ 찾음 또는 찾을 수 없음이 메시지로 나열된 결과를 반환합니다.
location: (Chicago 및 New York 및 London) ⇒ 세 개의 Chicago, New York 및 London이 모두 위치로 나열된 결과를 반환합니다.

자유 텍스트(KQL)

Google 검색 및 Lucence 구문과 같은 가장 단순한 형태의 데이터 쿼리.

인보이스 ⇒ 모든 필드에 "인보이스"가 포함된 결과를 반환합니다.
"청구서를 찾을 수 없음" ⇒ 모든 필드에 "청구서를 찾을 수 없음"이 포함된 결과를 반환합니다.

출처 : https://javatechonline.com/how-to-monitor-spring-boot-microservices-using-elk-stack/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.