Metric(1)


서비스 운영 수단 

  1. Logging
  2. Tracing
    • zipkin, Sleuth, ELK Stack 로그를 시각적으로 추적할 수 있는 툴, 서비스가 어떻게 흘러가는지, 타이밍이 어떻게 되는지, 언제 서비스가 생성되고 종료되었는지를 추적한다. 모든 트래픽을 대상으로 하진 않고 Sampling 방식으로 몇개만 뽑아서 보여준다. 
  3. APM
    • 어플리케이션 성능 모니터링 툴 
    • jennifer 등등 
  4. Metric
    • 시스템 성능을 추측할 수 있는 정보를 제공한다. 
    • 수치로 제공 
    • 서비스 확장의 근거를 마련할 수 있다. 

Spring 에서의 Metric

  • actuator – micrometer를 Spring 에 Integration 하기 위한 라이브러리 
  • micrometer – 실제 Metric 처리 https://micrometer.io/ Metric Tool 을 지원하는 퍼사드 형태이다. micrometer가 지원하는 툴은 Elastic, Prometheus 등이 있다. 

Spring 에서 Prometheus Dependency를 추가하면 @Endpoint(id = “prometheus”) 로 등록되게 되고 acuator를 통해 조회가 가능하다. 

사용 시나리오 

  1. actuator, micrometer를 이용해 metric을 확인한다. 
  2. 확인된 metric을 Prometheus를 이용해 수집한다. 
  3. Grafana를 이용해 dashboard를 설정해 시각화 한다. 
  4. 특정 threshold 에서 메시지를 보낸다. 

 

Metric System

매트릭 정보전송 

Client Push의 경우 : AppOptics, Atlas, Azure Monitor, Elastic

Server Poll : Prometheus(서버가 데이터를 가져간다. )

메트릭 정보 활용 연산 

Client 수행 : Elastic, AppOptics, Atlas, Azure Monitor

Server 수행: Prometheus

 

Prometheus

파워풀한 쿼리 

차원적인 데이터 관리 

데이터 시각화 – 잘 안씀 (Grafana 같은걸 사용 )

스토리지의 기능 

GO 로 작성 

쿠버네티스나 유레카로 프로매테우스는 서버 목록을 확인 할 수 있다. 

https://prometheus.io/docs/introduction/overview/

 

 

프로메테우스 연동 

도커로 실행 관련자료 

docker run -p 9090:9090 -v \my-file-path\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

prometheus.yml 설정으로 Prometheus를 실행 시킨다. 설정은 어떤 서버에서 metic을 얻어올 건지 metics_path는 무엇 인지에 대한 내용이 들어 있다. 

global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - follow_redirects: true
    scheme: http
    timeout: 10s
    api_version: v2
    static_configs:
    - targets: []
scrape_configs:
- job_name: prometheus
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  follow_redirects: true
  static_configs:
  - targets:
    - localhost:9090

- job_name: helloapp
  honor_timestamps: true
  scrape_interval: 5s
  scrape_timeout: 3s
  metrics_path: /actuator/prometheus
  scheme: http
  follow_redirects: true
  static_configs:
  - targets:
    - host.docker.internal:8080

localhost:9090 으로 접속해 보면 Prometheus 화면이 나온다. Status의 타겟은 모니터링 하는 Path, Main 검색화면은 원하는 metic 을 검색해 수치를 볼 수 있다. 

 

그라파나 

설치

https://grafana.com/docs/grafana/latest/installation/docker/

사용법 

  1. docker run -p 3000:3000 grafana/grafana
  2. 톱니바퀴(Configuration) 버튼 – 프로메테우스를 연동 (프로메테우스 URL을 적어야 하는데 Local Docker에서 돌린다면 host.docker.internal 을 입력)
  3. + 버튼 – 데시보드를 만들거나 Import 할 수 있다. Import 의 경우 해당 URL(name:spring boot/data source:prometheus..)에서 대시보드 검색이 가능하다. (Spring Boot 2.1 Statistics)
  4. Chart를 추가 할 수 있다. Metrics browser에 쿼리를 입력하여 원하는 데이터를 가져올 수 있고 Legend에 원하는 목록을 입력할 수 있다. 
    • 아래 내용은 URI별 실패한 응답 횟수를 얻는 쿼리이다. 
  5. siege 라는 툴로 http 트래픽을 생성할 수 있다. 

Alert 기능 

가능한 목록 : https://grafana.com/docs/grafana/latest/alerting/old-alerting/notifications/#list-of-supported-notifiers

Slack 과 그라파나 연동

  1. Slack 계정 생성 
  2. https://api.slack.com/bot-users 에서 Create Your Slack App 클릭 그리고 Create An App 클릭 후 가장 위 버튼 클릭
  3. 아래처럼 입력 후 Create APP 선택 

4. 왼쪽 메뉴에 OAuth & Permissions 탭을 클릭한 뒤 Scopes > Bot Token Scopes 에서 Bot의 권한을 지정한다. 

5. 상단으로 올라가서 Install to Workspace를 클릭하면 xoxb 토큰을 받게 되는데 이를 Copy 해 논다.

6. Slack App을 열면 “앱”  란에 방금 추가한 Bot 이 들어가 있는걸 알 수 있다. Bot 이 어떤 대화방(채널)에 메시지를 뿌릴지 정해줘야 하기 때문에 Slack App에서 채널을 만든다. 그리고 채널에서 @{앱이름}을 채팅창에 치면 대화방에 Bot을 초대 할 수 있다. 

7. Grafana로 왼쪽 종버튼 > Notification Chanel > Add Channel 로 간다.

8. Slack 관련 정보를 입력한다. 

  • webhook URL : https://slack.com/api/chat.postMessage
  • Recipient: #grafana(Slack에 생성한 채널이름)
  • Token: 발급받은 xoxb 토큰

9. Grafana 대시보드로 들어가 Alert 탭으로 이동한다. 하기와 같이 설정한다. 

대략적으로 10초간 500 에러가 10회 이상 발생 했을때 Slack으로 메시지를 전송한다 이다. 

분산시스템에서 ….

분산시스템이란  하나의 기능을  하는 무언가가 여러 플랫폼에서 혹은 서비스에서 실행되는 방법

도구

분산시스템에 대한 운영과 장애 분석에 도옴이되는 …..

Spring Cloud Sleuth, zipkin, brave – 분산 추적 툴(문제 위치, 성능 저하 원인, Request의 흐름, Open Tracing – 개념 Spec 같은 느낌)

모놀리식 – 여러 서비스가 하나의 어플리케이션으로 구성되어 돌아가는 서비스 

MSA – 여러 서비스가 각각의 어플리케이션으로 구성되어 돌아가는 서비스, 서비스 별로 로그 확인이 힘들다  당연히 로그 트래킹이 힘들다. 

스프링의 분산 추적

  • Spring Cloud : 분산시스템을 위한 Spring Boot 라고 보면 된다. 
  • Spring Cloud Sleuth: Spring Boot 에서 분산 트레이싱을 지원하게 해주는 설정이다. Brave를 사용할 수 있다. Sleuth 를 사용하면 Log에 Trace ID를 붙힌다. 
    • Sampling 기능: 데이터를 일부분만 추출할 수 있다. 초당 두개만 수집, 무작위로 10% 만 수집 등등 application.properties에서 설정 가능 
  • Brave : 분산 추적 계측 라이브러리 데이터 생산자
  • Zipkin: 분산 추적 데이터를 수집하고, 보여주는 시스템
  • Elasticsearch: Zipkin 의 Storage

동작 방식 

seluth를 추가하면 Trace에 고유의 Trace ID, Span Id으로 Request의 흐름을 식별 할 수 있다. 

 

Propergation Type (서비스간 트래이싱 방법)

B3, AWS, W3C 등등등

Client 에서 HTTP Header 에 TraceID, SpanID 등등을 주입하고 이를 다음서버에 보내면 서버가 이를 해석해서 활용. Propergation Type 별로 방식이 조금씩 다름 

Sampling 

sping.sleuth.sampler 를 통해서 설정 할 수 있다. 다른 서비스로 Sampling 하겠다는 내용이 존재한다. 

Trace ID, Span ID

trace id  는 동일 하면 span id는 하나의 microservice 별로 다르다. 그리고 두번 째 Propergation에서 부터는 parent span id를 가진다. Thread가 같으면 span도 같다. 

Tag, Annotations

annotations- 시간과 관련된 데이터, 처리에 걸린 시간, API 단계별 처리 시간 

tag – 정보와 관련된 데이터, 호출 class, method 등등

 

 

 

From.

Fast Campus



블로그 구독하기 !!

You may also like...

댓글 남기기

이메일은 공개되지 않습니다.