Prometheus+Spring Boot 응용 모니터링 에 관 한 문제
15635 단어 PrometheusSpringBoot감시 하 다
프로 메 테 우 스 는 활발 한 생태 계 를 갖 춘 오픈 소스 시스템 모니터링 과 경고 키 트 다.한 마디 로 개원 감시 솔 루 션 이다.
Prometheus 주요 특성:
왜 pull(당 김)을 사용 하고 push(푸 시)를 사용 하지 않 습 니까?
pull 은 다음 과 같은 장점 이 있 기 때문이다.
Skywalking 이 어떻게 하 는 지 돌 이 켜 보면 SkyWalking 은 클 라 이언 트 와 서버 가 있 습 니 다.목표 서비스 에 프로 브(에이전트)를 설치 하고 프로 브 는 목표 서비스의 지표 데 이 터 를 수집 하여 서버 의 OP 서비스 에 보고 해 야 합 니 다.이것 은 목표 에 어느 정도 침입 성 이 있 지만 받 을 수 있 습 니 다.Prometheus 는 프로 브 가 필요 없 이 push gateway 를 통 해 push 효 과 를 실현 할 수 있 습 니 다.
참,어떤 명 사 는 먼저 분명하게 말 해 야 한다.metrics(번역:도량,기준)는 개인 이 이 를 기준 으로 번역 하 는 경향 이 있 고 그 다음 에 기준 은 metrics 이다.
2.기본 개념
2.1.데이터 모델
Prometheus 는 기본적으로 모든 데 이 터 를 시간 서열 로 저장 합 니 다.시간 스탬프 가 있 는 값 흐름 은 같은 기준 과 같은 그룹 에 표 시 된 차원 에 속 합 니 다.프로 메 테 우 스 는 저 장 된 시간 서열 외 에 도 검색 결과 로 임시 파생 된 시간 서열 을 생 성 할 수 있다.
Metric names and labels
Every time series is uniquely identified by its metric name and optional key-value pairs called labels.
모든 시간 서열 은 그의 지표 이름과 라벨 이 라 고 불 리 는 선택 가능 한 키/값 이 유일한 표지 에 있 습 니 다.
샘플 은 실제 시간 서열 데 이 터 를 구성한다.각 견본 은 다음 과 같다.
<metric name>{<label name>=<label value>, ...}
예 를 들 어 시간 서열 이 있 는데 지표 명칭 은 api 이다http_requests_totalk,라벨 은 method="POST"와 handler="/messages"가 있 습 니 다.이렇게 표 시 될 수 있 습 니 다.
api_http_requests_total{method="POST", handler="/messages"}
2.2.지표 유형Counter
counter 는 누적 양 도 를 나타 내 는 단조 로 운 증가 카운터 로 그 값 은 증가 하거나 다시 시작 할 때 0 으로 초기 화 할 수 있 습 니 다.예 를 들 어 서비스 요청 수,작업 이 완료 되 었 거나 잘못된 수량 을 카운터 로 표시 할 수 있 습 니 다.
줄 일 수 있 는 값 을 카운터 로 표시 하지 마 세 요.예 를 들 어 현재 실행 중인 프로 세 스 수 에 계수 기 를 사용 하지 마 십시오.대체 할 때 는 게이지 를 사용 해 야 합 니 다.
Gauge
게이지 는 일종 의 지표 로 임의로 상하 로 파동 할 수 있 는 단일 수 치 를 대표 한다.
양 규 는 보통 온도 나 현재 메모리 사용량 을 측정 하 는 데 사용 되 며,상승 과 하락 이 가능 한'계수',예 를 들 어 동시 요청 수 등 이다.
Histogram
직사 도 는 관찰 결과(보통 지속 시간 이나 응답 크기 를 요청 합 니 다)를 추출 하고 설정 가능 한 통 에서 계산 합 니 다.그것 은 또한 모든 관측 치 의 총 화 를 제공 했다.
기본 지표 이름 이
직사 도 와 유사 하 게 요약 은 관찰 결과(일반적으로 지속 시간 과 응답 크기 등 을 요청 하 는 내용)를 표본 분석 합 니 다.관측 값 의 총수 와 모든 관측 값 의 합 계 를 제공 하지만 미끄럼 시간 창 내 설정 가능 한 자릿수 를 계산 할 수 있다.
기본 지표 이름 이
Prometheus 용어 에서 캡 처 할 수 있 는 점 을 인 스 턴 스 라 고 하 는데 보통 하나의 프로 세 스 에 대응 합 니 다.같은 목적 을 가 진 실례 집합 을 작업 이 라 고 한다.
예 를 들 어 하나의 작업 은 네 개의 실례 가 있다.
job: api-server
instance 1: 1.2.3.4:5670
instance 2: 1.2.3.4:5671
instance 3: 5.6.7.8:5670
instance 4: 5.6.7.8:5671
Prometheus 가 목 표를 캡 처 할 때 캡 처 된 시간 시퀀스 에 탭 을 추가 하여 캡 처 된 목 표를 식별 합 니 다.
Prometheus 는 지표 HTTP 단점 을 캡 처 하여 목표 로부터 지 표를 수집 합 니 다.프로 메 테 우 스 는 같은 방식 으로 자신의 데 이 터 를 노출 하기 때문에 자신의 건강 상 태 를 캡 처 하고 감시 할 수도 있다.
기본 적 인 상황 에서 설정 을 변경 하지 않 고 바로 실행 하면 prometheus 자체 의 건강 상태 데 이 터 를 캡 처 할 수 있 습 니 다.
# Start Prometheus.
# By default, Prometheus stores its database in ./data (flag --storage.tsdb.path)
./prometheus --config.file=prometheus.yml
localhost 직접 방문:9090localhost:9090/metrics 를 방문 하면 각종 지 표를 볼 수 있 습 니 다.
예 를 들다
다음 표현 식 을 입력 하고"Execute"를 누 르 면 다음 효 과 를 볼 수 있 습 니 다.
prometheus_target_interval_length_seconds
이것 은 여러 개의 서로 다른 시간 서열(그리고 각 서열 의 최신 값)을 되 돌려 야 합 니 다.각 서열 의 기준 이름 은 모두 prometheus 입 니 다.target_interval_length_seconds,하지만 다른 탭 이 있 습 니 다.이것 은 도형 화 된 방식 으로 지 표를 보 여 주 는 것 입 니 다.localhost:9090/metrics 를 통 해 보 는 것 도 마찬가지 입 니 다.
만약 우리 가 99%의 지연 에 만 관심 이 있다 면 우 리 는 다음 과 같은 조 회 를 사용 할 수 있다.
prometheus_target_interval_length_seconds{quantile="0.99"}
되 돌아 오 는 시간 서열 수 를 계산 하기 위해 서 조 회 는 이렇게 써 야 합 니 다.
count(prometheus_target_interval_length_seconds)
다음은 Node Exporter 를 이용 하여 몇 가지 목 표를 추가 합 니 다.
tar -xzvf node_exporter-*.*.tar.gz
cd node_exporter-*.*
# Start 3 example targets in separate terminals:
./node_exporter --web.listen-address 127.0.0.1:8080
./node_exporter --web.listen-address 127.0.0.1:8081
./node_exporter --web.listen-address 127.0.0.1:8082
다음은 Prometheus 를 설정 하여 이 세 개의 새로운 목 표를 잡 습 니 다.
우선,'node'라 는 작업 을 정의 합 니 다.이 작업 은 이 세 개의 목표 점 에서 데 이 터 를 캡 처 합 니 다.만약 에 앞의 두 점 이 생산 환경 이 고 다른 하 나 는 비 생산 환경 이 라 고 상상 하기 위해 우 리 는 이 를 서로 다른 라벨 로 붙인다.이 예제 에서 우 리 는 group="production"탭 을 첫 번 째 목표 그룹 에 추가 하고 group="canary"를 두 번 째 목표 에 추가 합 니 다.
scrape_configs:
- job_name: 'node'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080', 'localhost:8081']
labels:
group: 'production'
- targets: ['localhost:8082']
labels:
group: 'canary'
3.1.설정
모든 명령 행 인 자 를 보기 위해 다음 명령 을 실행 합 니 다.
./prometheus -h
프로필 은 YAML 형식 입 니 다.--config.file 매개 변 수 를 사용 하여 지정 할 수 있 습 니 다.프로필 의 주요 구 조 는 다음 과 같 습 니 다.
global:
# How frequently to scrape targets by default.
[ scrape_interval: <duration> | default = 1m ]
# How long until a scrape request times out.
[ scrape_timeout: <duration> | default = 10s ]
# How frequently to evaluate rules.
[ evaluation_interval: <duration> | default = 1m ]
# The labels to add to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
[ <labelname>: <labelvalue> ... ]
# File to which PromQL queries are logged.
# Reloading the configuration will reopen the file.
[ query_log_file: <string> ]
# Rule files specifies a list of globs. Rules and alerts are read from
# all matching files.
rule_files:
[ - <filepath_glob> ... ]
# A list of scrape configurations.
scrape_configs:
[ - <scrape_config> ... ]
# Alerting specifies settings related to the Alertmanager.
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ]
# Settings related to the remote write feature.
remote_write:
[ - <remote_write> ... ]
# Settings related to the remote read feature.
remote_read:
[ - <remote_read> ... ]
4.스프링 부 트 캡 처 적용Prometheus 는 하나의 프로그램 인 스 턴 스 를 캡 처 하거나 문의 하여 지 표를 얻 기 를 원 합 니 다.Spring Boot 는/actuator/prometheus 에서 actuator 터미널 을 제공 하여 적당 한 형식 으로 Prometheus 캡 처 를 제공 합 니 다.
Prometheus 서버 에서 캡 처 할 수 있 는 형식 으로 지 표를 공개 하기 위해 서 는 micrometer-registry-prometheus 에 의존 해 야 합 니 다.
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.6.4</version>
</dependency>
다음은 prometheus.yml 의 예 입 니 다.
scrape_configs:
- job_name: 'spring'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['HOST:PORT']
다음은 prometheus-example 라 는 프로젝트 를 만 듭 니 다.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cjs.example</groupId>
<artifactId>prometheus-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>prometheus-example</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml
spring:
application:
name: prometheus-example
management:
endpoints:
web:
exposure:
include: "*"
metrics:
tags:
application: ${spring.application.name}
이 말 잊 지 마 세 요:management.metrics.tags.application=${spring.application.name}Spring BootActuator 의 기본 점 이 많 습 니 다.자세 한 내용 은 다음 과 같 습 니 다.
https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/production-ready-features.html
시작 항목,브 라 우 저 접근/actuator/prometheus 터미널
Prometheus 캡 처 설정
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'springboot-prometheus'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['192.168.100.93:8080']
서비스 다시 시작
./prometheus --config.file=prometheus.yml
4.1. Grafana
https://grafana.com/docs/
https://grafana.com/tutorials/
다운로드&압축 풀기
wget https://dl.grafana.com/oss/release/grafana-7.4.3.linux-amd64.tar.gz
tar -zxvf grafana-7.4.3.linux-amd64.tar.gz
시동 을 걸다
./bin/grafana-server web
브 라 우 저 접근http://localhost:3000기본 계 정 은 admin/admin 입 니 다.
처음 로그 인 한 후에 우 리 는 비밀 번 호 를 admin 1234 로 바 꾸 었 다.
먼저 데이터 원본 을 설정 하고 잠시 후에 계기판 을 추가 할 때 데이터 원본 을 선택해 야 합 니 다.
Grafana 는 공식 적 으로 많은 템 플 릿 을 제공 합 니 다.우 리 는 직접 사용 할 수 있 습 니 다.
일단 저희 가 원 하 는 템 플 릿 을 찾 아야 돼 요.
예 를 들 어,우 리 는 여기 서 마음대로 템 플 릿 을 골 랐 다.
템 플 릿 JSON 파일 을 직접 다운로드 해서 가 져 올 수도 있 고 템 플 릿 ID 를 직접 입력 해서 불 러 올 수도 있 습 니 다.여기 서 템 플 릿 ID 를 직접 입력 합 니 다.
즉시 효과 가 나타 나 곧 아름 다운 전시 화면 을 볼 수 있다.
Dashboard 를 하나 더 추가 하 겠 습 니 다.(ID:12856)
Prometheus+Spring Boot 애플 리 케 이 션 모니터링 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Prometheus+Spring Boot 애플 리 케 이 션 모니터링 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Prometheus 학습 시리즈(25)의 연방연합은 Prometheus 서버가 다른 Prometheus 서버에서 선택한 시간 시퀀스를 캡처할 수 있도록 합니다. 계층형 결합을 통해 Prometheus는 수십 개의 데이터 센터와 수백만 개의 노드가 있는 환경으로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.