Prometheus

Prometheus 를 사용하여 메트릭 데이터를 수집하는 것이 점점 인기를 얻고 있습니다. Instana 를 사용하면 Prometheus 의 메트릭을 손쉽게 수집하고, 방대한 지식 그래프를 활용해 이를 상호 연관 지을 수 있습니다. 일반적인 예는 사용자 정의 비즈니스 메트릭입니다.

Instana 호스트 에이전트를 설치하면 Instana Prometheus 센서가 자동으로 설치되지만, ‘구성’ 섹션에 설명된 대로 센서를 구성해야 합니다. 그러면 ‘ Prometheus ’와 관련된 지표를 ‘ Instana ’ UI에서 확인할 수 있습니다.

Instana Prometheus Alertmanager Webhook 알림 채널을 제공하여, Prometheus Alertmanager Webhook 수신기 구성 에 설명된 대로 Prometheus Alertmanager Webhook 의 페이로드 형식을 가진 HTTP POST 요청을 전송합니다.

Instana 에서 Prometheus 으로 실시간 알림 통지를 보내려면, Instana UI에서 Prometheus Alertmanager Webhook 알림 채널 을 생성하십시오. 그러면 HTTP POST 로 전송된 요청은 Prometheus 로 전달됩니다.

소개

Instana Prometheus 센서는 Prometheus 서버가 필요하지 않습니다. 센서는 모니터되는 시스템이 노출하는 엔드포인트에서 직접 지표를 캡처합니다.

각 Instana 호스트 에이전트에 대해, 정규식을 사용하여 폴링할 Prometheus 엔드포인트와 해당 엔드포인트에서 수집해야 할 메트릭을 지정하십시오. 자세한 정보는 구성 절을 참조하십시오.

참고: 메트릭이 Java 라이브러리(예: Micrometer, Prometheus Java client 라이브러리 또는 jmx_exporter )를 통해 노출되는 경우, Instana Java 플러그인이 해당 라이브러리에서 직접 메트릭을 수집할 수 있으므로 HTTP 를 통해 별도로 노출할 필요가 없습니다:

구성

Kubernetes 환경 설정

호스트 에이전트 구성 파일 configuration.yaml 에서 지표 소스를 엔드포인트 목록으로 정의해야 합니다. Instana 호스트 에이전트가 Kubernetes( Kubernetes ) 환경에서 실행되면, 에이전트는 실행 중인 파드(pod)의 IP 주소와 컨테이너 포트를 자동으로 인식하고 수집합니다. Kubernetes 환경에서는 이 구성을 값을 agent.configuration_yaml 통해 에이전트에 전달해야 합니다. 운영자를 사용하여 에이전트를 설치한 경우, ` YAML ` 파일 instana-agent.customresource.yamlspec.agent.configuration_yaml 내의 사용자 정의 리소스에 구성을 추가하십시오. Helm 차트를 사용하여 에이전트를 설치하는 경우, 플래그를 통해 구성을 --set agent.configuration_yaml=<config>전달하십시오. 또는 values.yaml 파일에 구성을 설정하고 -f 플래그를 사용하여 helm install 명령에 전달합니다.

다음 구성 예제를 참조하십시오.

com.instana.plugin.prometheus:
  poll_rate: 15                              # Global polling interval in seconds (optional, default is 1 second)
  username: ''                               # Global (all) endpoints username/password configuration (optional)
  password: ''
  podConnectTimeout: 750                     # discovery TCP connect timeout in ms used during discovery request (optional, default is 750ms)
  podReadTimeout: 2500                       # discovery TCP read timeout in ms used during discovery request (optional, default is 2500ms)
  customMetricSources:
  - url: '/prometheus/endpoint/1'            # metrics endpoint, the IP and port are auto-discovered
    metricNameIncludeRegex: '^.'             # regular expression to filter metrics
    username: ''                             # endpoint specific username/password configuration
    password: ''
  - url: '/prometheus/endpoint/2'
    metricNameIncludeRegex: '^.'
  - url: '/metrics'                          # metrics endpoint, the IP and port are auto-discovered
    metricNameIncludeRegex: '^.'             # regular expression to filter metrics
    labels:                                  # labels are used to limit discovery with pods that match. labels are treated as a boolean AND
      planet: "mars"
      app: "rover"
 

, prometheus.io/portprometheus.io/pathprometheus.io/scrape 같이 프로메테우스 어노테이션이 포함된 쿠버네티스 리소스를 스크래핑하려는 경우, 프로메테우스 구성에서 strict 필드를 prometheusAnnotations 로 설정했다면 해당 리소스에 대해 섹션을 customMetricsSources 사용할 필요가 없습니다. 예를 들어,

com.instana.plugin.prometheus:
  podConnectTimeout: 750                     # discovery TCP connect timeout in ms used during discovery request (optional, default is 750ms)
  podReadTimeout: 2500                       # discovery TCP read timeout in ms used during discovery request (optional, default is 2500ms)
  prometheusAnnotations: strict              # use prometheus annotations as defined, no metric source is required
 

참고:

  • Kubernetes 환경의 경우, 해당 url 필드에 호스트 및 포트 정보를 추가하지 말고, URL 와 같은 메트릭스 /prometheus/endpoint/metrics엔드포인트만 추가하십시오. Prometheus 센서는. https://prod-myapp.server.com/prometheus/metrics와 같이 전체 URL로 지정된 엔드포인트를 모니터링하지 않습니다.

  • 프로메테우스 어노테이션을 사용하지 않는 경우, 메트릭 엔드포인트 포트를 결정하는 데 Kubernetes 포드 배포 사양의 컨테이너 포트(containerPort) 정의가 사용됩니다.

  • metricNameIncludeRegex 필드에서 정규식을 사용하여 특정 메트릭 엔드포인트에 대해 캡처할 메트릭을 정의할 수 있습니다.

  • Prometheus 센서에는 글로벌 레벨 (모든 엔드포인트) 또는 엔드포인트마다 정의할 수 있는 기본 인증 지원이 있습니다.

참고: Prometheus 연동 기능을 사용할 때는 모니터링 및 문제 해결에 필요한 메트릭만 수집하십시오. 스크래핑 대상, 메트릭 선택 및 수집 간격을 신중하게 구성하여 데이터 양을 조절하고, 다른 Instana 센서에서 수집한 메트릭과의 중복을 방지하십시오. 선택적 수집은 관측 가능성 요구 사항과 효율적인 자원 사용을 조화시킵니다. Prometheus 환경에서 데이터 수집을 조정하고 수집량을 관리하는 방법에 대한 자세한 내용은 Instana 의 ‘데이터 수집 최적화’를 참조하십시오.

Kubernetes 가 아닌 환경을 위한 정적 구성

정적 구성은 비Kubernetes 환경에 사용됩니다. 비Kubernetes 환경의 로컬 또는 원격 엔드포인트에서 Prometheus 메트릭을 캡처하려면 다음과 같이 <agent_install_dir>/etc/instana/configuration.yaml 파일에서 customMetricSources 섹션을 구성하십시오.

com.instana.plugin.prometheus:
  # Global polling interval in seconds (optional)
  poll_rate: 15                              # Default is 1 second
  username: ''                               # Global (all) endpoints username/password configuration (optional)
  password: ''
  customMetricSources:
  - url: 'http://localhost:8080/metrics'
    username: ''                             # endpoint specific username/password configuration
    password: ''
    metricNameIncludeRegex: '^sample_app_request'
  - url: 'http://223.58.1.10:9100/prometheus'
    metricNameIncludeRegex: '^sample_app_request'
    labels:                                  # labels are used to limit discovery with pods that match. labels are treated as a boolean AND
      planet: "mars"
      app: "rover"

 
참고:metricNameIncludeRegex 정의되지 않은 경우, Prometheus 센서는 메트릭 유형당 최대 600개까지 정의된 한도 내에서 모든 메트릭 유형을 수집합니다.

원격 쓰기

Instana 호스트 에이전트 번들( 1.1.587 )부터 호스트 에이전트는 엔드포인트 remote_write (endpoint)를 지원하게 되었습니다. 즉, 메트릭을 수집할 수 있으며, 이러한 메트릭은 Prometheus 엔티티로 표시되거나 프로세스 사용자 정의 메트릭의 일부로 표시됩니다.

remote_write 엔드포인트를 사용하려면 다음과 같이 <agent_install_dir>/etc/instana/configuration.yaml 파일을 구성하십시오.

com.instana.plugin.prometheus:
  remote_write:
    enabled: true
 

참고:

  • Prometheus 의 remote_write 관련 문서에 설명된 대로 발신자(메트릭을 전송하는 구성 요소)를 설정하십시오.

  • remote_write 엔드포인트는 /prometheus/v1/receive 경로의 포트 42699 에서 사용 가능합니다. 따라서 Prometheus 설정에서 구성해야 할 URL 는 다음과 같습니다 http://<agent_ip>:42699/prometheus/v1/receive.

  • Instana 가 메트릭을 올바르게 분석하려면, 발신자가 메타데이터를 전송 해야 합니다. Prometheus 에서는 발신자가 기본값이므로, 이 기능을 비활성화하지 않도록 주의하십시오.

  • Kubernetes 에서 Instana 에이전트 Helm 차트를 사용하여 제공되는 선택적 Instana 에이전트 서비스는 remote_writeAPI 와 함께 사용할 때 매우 유용합니다. Instana 에이전트 서비스를 사용하면 데이터가 동일한 Kubernetes 노드에서 실행되는 Instana 에이전트로 전송되므로, Instana 에이전트가 인프라 상관 관계 데이터를 정확하게 채울 수 있습니다.

  • 현재 remote_write 엔드포인트에 대해 인증이 지원되지 않으므로 송신자에서 Prometheus 의 basic_authbearer_token ( bearer_token_file포함) 옵션을 구성하지 마십시오.

TLS 원격 쓰기용 암호화

호스트 에이전트에서 ‘ TLS ’ 암호화를 활성화할 수 있습니다. 그런 다음, remote_write 엔드포인트로 전송되는 모든 데이터는 TLS 로 암호화됩니다.

TLS 암호화를 설정하는 방법에 대한 자세한 내용은 ‘ TLS 암호화 활성화’를 참조하십시오.

델타 카운터

카운터의 증가량을 측정하려면 이전 값과 비교하면 됩니다. 그러나 이러한 측정에 적합한 Prometheus UI의 집계 increase 기능은, 동일한 버킷 내에서 카운터가 재설정된 직후 발생하는 증가분을 제외하기 때문에 잘못된 결과를 산출할 수 있습니다. 자세한 내용은 CounterPrometheus 문서를 참조하십시오.

Delta counters 카운터 재설정을 허용하는 동시에 가치의 증가분을 정확하게 측정함으로써 이 문제를 해결합니다. 각 카운터 메트릭에 대해, 이에 상응하는 델타 카운터 메트릭이 생성됩니다. 예를 들어, Prometheus 엔드포인트의 foo 카운터 메트릭은 다음 두 가지 메트릭을 생성합니다:

  • metrics.counters.foo
  • metrics.delta_counters.foo

이러한 메트릭의 생성은 구성 파일에서 설정할 configuration.yaml 수 있습니다:

com.instana.plugin.prometheus:
---
sendCounterMetrics: true
sendDeltaCounterMetrics: true
 

Counters 모두 Delta counters 기본적으로 활성화되어 있습니다. Delta counters만약 만 필요하시다면, 다음 매개변수를 설정하여 를 비활성화할 Counters 수 있습니다:

sendCounterMetrics: false

메트릭 보기

메트릭을 보려면 다음 단계를 완료하십시오.

  1. Instana UI의 사이드바에서 ‘인프라’를 선택합니다.
  2. 모니터되는 특정 호스트를 클릭하십시오.

그런 다음 수집된 모든 메트릭 및 모니터된 프로세스가 포함된 호스트 대시보드를 볼 수 있습니다.

Prometheus 메트릭은 호스트 또는 호스트가 수집된 프로세스 ( remote_write 엔드포인트를 사용하는 경우) 와 연관된 "Prometheus 앱" 으로 표시됩니다. Prometheus 의 사용자 지정 메트릭은 Dynamic Focus, Event and Alerts 및 Grafana 플러그인을 사용하여 쿼리할 수 entity.type:prometheus 있습니다.

Prometheus 센서는 모든 코어 메트릭 유형 (유형당 최대 600개의 메트릭) 을 수집합니다.

  • 카운터
  • 게이지
  • 히스토그램
  • 요약
  • 입력되지 않음

경보 중

Prometheus 용 Alertmanager 알림 채널 생성 Webhook

Prometheus Alertmanager Webhook 알림 채널을 생성하려면, Instana UI에서 [설정 ] > [전역 설정 ] > [이벤트 및 알림 ] > [알림 채널 ] > [알림 채널 추가] 를 클릭한 다음, [ Prometheus Alertmanager Webhook ]를 클릭하십시오.

스크린샷: Prometheus Alertmanager Webhook

Instana 이 알림 채널을 통해 HTTP POST 요청을 전송하여, 구성된 Prometheus Alertmanager Webhook 수신기 (예: Alert Snitch 또는 SNMP Notifier )로 알림을 보냅니다.

SNMP 알림 제공자

SNMP Notifier 프로젝트는 Prometheus 의 경보를 SNMP 트랩으로 변환하여, 구성된 SNMP 수신기로 전달합니다.

Instana Instana 이미지 레지스트리에는 SNMP 알림 기능에 대한 이미지가 제공되지 않습니다. 자세한 내용은 SNMP Notifier의 안내를 따르십시오. SNMP 알림 기능 설치 예시는 ‘ Kubernetes ’ 섹션의 ‘ SNMP 알림 기능 실행’을 참조하십시오.

알림 채널 설정

생성하신 Prometheus Alertmanager Webhook 알림 채널을 구성하고, Prometheus Alertmanager Webhook 의 ‘수신자(Receiver)’ URL 필드를. http://{SNMP-Notifier-Host}:9464/alerts로 설정해야 합니다. SNMP 알림기가 Instana 백엔드와 동일한 클러스터의 네임스페이스에 설치된 snmp-notifier 경우, Prometheus Alertmanager Webhook Receiver URL 의 구성은 다음과 같습니다 http://snmp-notifier-alertmanager-snmp-notifier.snmp-notifier.svc:9464/alerts.

예: Kubernetes 에서 SNMP 알림 서비스를 실행합니다

  1. Docker 허브의 자격 증명을 사용하여 SNMP 알림 서비스용 네임스페이스를 생성하고, 공개 Docker 레지스트리용 시크릿을 생성합니다:

    kubectl create namespace snmp-notifier
    
    kubectl -n snmp-notifier create secret docker-registry image-pull-secret \
     --docker-server=docker.io \
     --docker-username=${YOUR_USERNAME} \
     --docker-password=${YOUR_PASSWORD}
     
  2. SNMP 트랩으로 경보를 수신하는 서버의 IP 주소를 사용하여 SNMP 알림 기능을 설치하십시오:

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
    helm install snmp-notifier prometheus-community/alertmanager-snmp-notifier \
       -n snmp-notifier \
       --set 'imagePullSecrets={image-pull-secret}' \
       --set 'snmpNotifier.snmpDestinations={IP_ADDRESS_OF_SNMP_TRAP_RECEIVER_SERVER:162}'
     

SNMP 알림 설정에 대한 자세한 내용은 SNMP Notifier를 참조하십시오. 지원되는 모든 차트 매개변수 및 기본값에 대한 자세한 내용은 values.yaml 을 참조하십시오.

문제점 해결

원격 쓰기 시 높은 메트릭 지연

모니터링 문제 유형: prometheus_remote_write_high_delay

remote_write 엔드포인트에서 수집되는 Prometheus 메트릭이 높은 지연으로 수신되고 있습니다. 이 문제점으로 인해 잠재적으로 경보가 지연되고 다른 소스의 메트릭 상관이 더 어려워집니다.

Prometheus remote_write 구성을 조정하십시오. 특히 다음과 같이 batch_send_deadline 매개변수를 추가하십시오. 이 매개변수는 지연을 1초로 제한합니다.

remote_write:
  - url: "http://xxx.xxx.xxx.xxx:42699/prometheus/v1/receive"
    queue_config:
      batch_send_deadline: 1s
 

추가 구성 옵션은 Prometheus 매뉴얼을 참조하십시오.

Prometheus 메트릭 구문 분석 오류

모니터링 문제 유형: prometheus_metric_parse_error

Prometheus 엔드포인트에서 검색되는 메트릭에는 prometheus 메트릭 사양을 따르지 않는 정보가 포함되어 있습니다. 이 문제로 인해 엔드포인트의 일부 Prometheus 메트릭이 처리되지 않을 수 있습니다. 모니터링 문제 정보를 사용하여 문제의 원인을 파악하고 Prometheus 엔드포인트를 수정하세요.