Metric(1)
서비스 운영 수단
- Logging
- Tracing
- zipkin, Sleuth, ELK Stack 로그를 시각적으로 추적할 수 있는 툴, 서비스가 어떻게 흘러가는지, 타이밍이 어떻게 되는지, 언제 서비스가 생성되고 종료되었는지를 추적한다. 모든 트래픽을 대상으로 하진 않고 Sampling 방식으로 몇개만 뽑아서 보여준다.
- APM
- 어플리케이션 성능 모니터링 툴
- jennifer 등등
- Metric
- 시스템 성능을 추측할 수 있는 정보를 제공한다.
- 수치로 제공
- 서비스 확장의 근거를 마련할 수 있다.
Spring 에서의 Metric
- actuator – micrometer를 Spring 에 Integration 하기 위한 라이브러리
- micrometer – 실제 Metric 처리 https://micrometer.io/ Metric Tool 을 지원하는 퍼사드 형태이다. micrometer가 지원하는 툴은 Elastic, Prometheus 등이 있다.
Spring 에서 Prometheus Dependency를 추가하면 @Endpoint(id = “prometheus”) 로 등록되게 되고 acuator를 통해 조회가 가능하다.
사용 시나리오
- actuator, micrometer를 이용해 metric을 확인한다.
- 확인된 metric을 Prometheus를 이용해 수집한다.
- Grafana를 이용해 dashboard를 설정해 시각화 한다.
- 특정 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://i0.wp.com/lifeonroom.com/wp-content/uploads/2021/06/image-5.png?resize=716%2C405&ssl=1)
프로메테우스 연동
도커로 실행 관련자료
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/
사용법
- docker run -p 3000:3000 grafana/grafana
- 톱니바퀴(Configuration) 버튼 – 프로메테우스를 연동 (프로메테우스 URL을 적어야 하는데 Local Docker에서 돌린다면 host.docker.internal 을 입력)
- + 버튼 – 데시보드를 만들거나 Import 할 수 있다. Import 의 경우 해당 URL(name:spring boot/data source:prometheus..)에서 대시보드 검색이 가능하다. (Spring Boot 2.1 Statistics)
- Chart를 추가 할 수 있다. Metrics browser에 쿼리를 입력하여 원하는 데이터를 가져올 수 있고 Legend에 원하는 목록을 입력할 수 있다.
- 아래 내용은 URI별 실패한 응답 횟수를 얻는 쿼리이다.
- siege 라는 툴로 http 트래픽을 생성할 수 있다.
![](https://i2.wp.com/lifeonroom.com/wp-content/uploads/2021/06/image-8.png?fit=1024%2C153&ssl=1)
Alert 기능
Slack 과 그라파나 연동
- Slack 계정 생성
- https://api.slack.com/bot-users 에서 Create Your Slack App 클릭 그리고 Create An App 클릭 후 가장 위 버튼 클릭
- 아래처럼 입력 후 Create APP 선택
![](https://i0.wp.com/lifeonroom.com/wp-content/uploads/2021/06/image-7.png?resize=748%2C692&ssl=1)
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으로 메시지를 전송한다 이다.
![](https://i2.wp.com/lifeonroom.com/wp-content/uploads/2021/06/image-9.png?fit=1024%2C583&ssl=1)
분산시스템에서 ….
분산시스템이란 하나의 기능을 하는 무언가가 여러 플랫폼에서 혹은 서비스에서 실행되는 방법
도구
분산시스템에 대한 운영과 장애 분석에 도옴이되는 …..
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
블로그 구독하기 !!