Prometheus+Spring Boot 응용 모니터링 에 관 한 문제

1.프로 메 테 우 스 는 무엇 인가
프로 메 테 우 스 는 활발 한 생태 계 를 갖 춘 오픈 소스 시스템 모니터링 과 경고 키 트 다.한 마디 로 개원 감시 솔 루 션 이다.
Prometheus 주요 특성:
  • 다 차원 데이터 모델 은 지표 명칭 과 키/값 으로 표 지 된 시간 서열 데이터
  • 을 포함한다.
  • PromQL,유연 한 조회 언어
  • 분포 식 저장 소 에 의존 하지 않 음;단일 서버 노드 는 자치의
  • 이다.
  • 시간 시퀀스 수집 은 HTTP 의 pull 모델 을 통 해
  • 을 진행 합 니 다.
  • 중간 게 이 트 웨 이 지원 푸 시(push)시간 시퀀스
  • 서비스 발견 또는 정적 설정 을 통 해 목표
  • 발견
  • 다양한 모델 의 도형 과 계기판
  • 을 지원 합 니 다.
    왜 pull(당 김)을 사용 하고 push(푸 시)를 사용 하지 않 습 니까?
    pull 은 다음 과 같은 장점 이 있 기 때문이다.
  • 변경 시 노트북 에서 모니터링 을 실행 할 수 있 습 니 다
  • 은 목표 의 오프라인 여 부 를 더욱 쉽게 판단 할 수 있다.
  • 은 수 동 으로 대상 으로 이동 하고 웹 브 라 우 저 를 사용 하여 운행 상황 을 검사 할 수 있 습 니 다
  • 대상 은 HTTP 단점 을 노출 하고 Prometheus 서버 는 HTTP 를 통 해 데 이 터 를 주동 적 으로 끌 어 옵 니 다.서버 가 스스로 목표 에 게 데 이 터 를 끌 어 올 리 는 것 이 라면 서버 가 로 컬(우리 자신의 컴퓨터)에서 실행 하 는 것 도 가능 합 니 다.목표 점 에 접근 할 수 있 으 면 됩 니 다.또한 심장 박동 검 측 처럼 목표 의 오프라인 여 부 를 판단 할 수 있 습 니 다.그리고 서버 가 스스로 끌 어 올 리 면 누구의 데 이 터 를 끌 어 올 리 고 싶 으 면 누구의 데 이 터 를 끌 어 올 립 니까?그래서 목 표를 잡 아 당 길 수 있 습 니 다.
    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.
    모든 시간 서열 은 그의 지표 이름과 라벨 이 라 고 불 리 는 선택 가능 한 키/값 이 유일한 표지 에 있 습 니 다.
    샘플 은 실제 시간 서열 데 이 터 를 구성한다.각 견본 은 다음 과 같다.
  • 개 64 비트 의 부동 소수점 값
  • 밀리초 시간 스탬프
  • 주어진 지표 이름과 탭 입 니 다.시간 서열 은 보통 이런 기 호 를 사용 하여 표 시 됩 니 다.
    
    <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
    직사 도 는 관찰 결과(보통 지속 시간 이나 응답 크기 를 요청 합 니 다)를 추출 하고 설정 가능 한 통 에서 계산 합 니 다.그것 은 또한 모든 관측 치 의 총 화 를 제공 했다.
    기본 지표 이름 이인 직사 도 는 캡 처 기간 에 여러 시간 서열 을 노출 합 니 다.
  • 관찰 통 의 누적 계수 기 는bucket{le=""}
  • 모든 관측 치 의 총 계 는 임 을 나타 낸다.sum
  • 관찰 한 이벤트 수량 은count
  • Summary
    직사 도 와 유사 하 게 요약 은 관찰 결과(일반적으로 지속 시간 과 응답 크기 등 을 요청 하 는 내용)를 표본 분석 합 니 다.관측 값 의 총수 와 모든 관측 값 의 합 계 를 제공 하지만 미끄럼 시간 창 내 설정 가능 한 자릿수 를 계산 할 수 있다.
    기본 지표 이름 이인 요약 은 캡 처 기간 에 여러 시간 서열 을 노출 합 니 다.
  • 관찰 통 의 누적 계수 기 는bucket{le=""}
  • 모든 관측 치 의 총 계 는 임 을 나타 낸다.sum
  • 관찰 한 이벤트 수량 은count
  • 2.3.작업 과 인 스 턴 스
    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 가 목 표를 캡 처 할 때 캡 처 된 시간 시퀀스 에 탭 을 추가 하여 캡 처 된 목 표를 식별 합 니 다.
  • job:목표 가 속 한 설 정 된 작업 이름
  • instance:붙 잡 힌 대상 URL 의:부분
  • 3.설치 및 설정

    Prometheus 는 지표 HTTP 단점 을 캡 처 하여 목표 로부터 지 표를 수집 합 니 다.프로 메 테 우 스 는 같은 방식 으로 자신의 데 이 터 를 노출 하기 때문에 자신의 건강 상 태 를 캡 처 하고 감시 할 수도 있다.
    기본 적 인 상황 에서 설정 을 변경 하지 않 고 바로 실행 하면 prometheus 자체 의 건강 상태 데 이 터 를 캡 처 할 수 있 습 니 다.
    
    # Start Prometheus.
    # By default, Prometheus stores its database in ./data (flag --storage.tsdb.path)
    
    ./prometheus --config.file=prometheus.yml
    localhost 직접 방문:9090

    localhost: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 애플 리 케 이 션 모니터링 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기