컨테이너 인사이트를 사용하여 Prometheus 메트릭을 Log Analytics 작업 영역으로 보내기
이 문서에서는 Container Insights에서 모니터링하는 Kubernetes 클러스터에서 Log Analytics 작업 영역으로 Prometheus 메트릭을 보내는 방법을 설명합니다. 이 구성을 수행하기 전에 먼저 클러스터 모니터링에 권장되는 방법인 Azure Monitor Prometheus용 관리 서비스를 사용하여 클러스터에서 Prometheus 메트릭을 스크래핑하는지 확인해야 합니다. 로그 쿼리 및 로그 검색 경고를 사용하여 분석할 수 있는 Log Analytics 작업 영역으로 이 동일한 데이터를 보내려는 경우에만 이 문서에 설명된 구성을 사용합니다.
이 구성을 사용하려면 데이터를 Log Analytics 작업 영역으로 보내기 위해 Container Insights에서 사용하는 것과 동일한 Azure Monitor 에이전트용 모니터링 추가 기능을 구성해야 합니다. 이렇게 하려면 내보내기 도구 또는 Pod를 통해 Prometheus 메트릭 엔드포인트를 노출한 다음, 아래 다이어그램과 같이 Container Insights에서 사용하는 Azure Monitor 에이전트에 대한 모니터링 추가 기능을 구성해야 합니다.
Prometheus 스크래핑 설정(로그로 저장된 메트릭용)
Prometheus에서 메트릭의 활성 스크래핑은 아래 두 가지 관점 중 하나에서 수행되며 메트릭은 구성된 로그 분석 작업 영역으로 전송됩니다.
- 클러스터 전체: ConfigMap 섹션 [Prometheus data_collection_settings.cluster]에 정의됩니다.
- 노드 전체: ConfigMap 섹션 [Prometheus_data_collection_settings.node]에 정의됩니다.
엔드포인트 | 범위 | 예시 |
---|---|---|
Pod 주석 | 클러스터 전체 | prometheus.io/scrape: "true" prometheus.io/path: "/mymetrics" prometheus.io/port: "8000" prometheus.io/scheme: "http" |
Kubernetes 서비스 | 클러스터 전체 | http://my-service-dns.my-namespace:9100/metrics |
URL/엔드포인트 | 노드당 및/또는 클러스터 전체 | http://myurl:9101/metrics |
URL을 지정하면 Cpontainer Insights는 엔드포인트를 수집합니다. Kubernetes 서비스가 지정된 경우 클러스터 DNS 서버로 서비스 이름을 확인하여 IP 주소를 가져옵니다. 그런 다음, 확인된 서비스가 스크래핑됩니다.
범위 | 키 | 데이터 형식 | 값 | 설명 |
---|---|---|---|---|
클러스터 전체 | 다음 세 가지 방법 중 하나를 지정하여 엔드포인트의 메트릭을 수집합니다. | |||
urls |
문자열 | 쉼표로 구분된 배열 | HTTP 엔드포인트(IP 주소 또는 올바른 URL 경로 중 하나)입니다. 예: urls=[$NODE_IP/metrics] ($NODE _IP는 특정 Container Insights 매개 변수이며 노드 IP 주소 대신 사용할 수 있습니다. 모두 대문자여야 합니다.) |
|
kubernetes_services |
문자열 | 쉼표로 구분된 배열 | kube-state-metrics에서 메트릭을 수집하는 Kubernetes 서비스 배열입니다. 여기서는 정규화된 도메인 이름을 사용해야 합니다. 예를 들어 kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics] 으로 업데이트할 수 있습니다. |
|
monitor_kubernetes_pods |
부울 | true 또는 false | 클러스터 전체 설정에서 true 로 설정된 경우 Container Insights 에이전트는 다음 Prometheus 주석에 대해 전체 클러스터에서 Kubernetes Pod를 스크래핑합니다.prometheus.io/scrape: prometheus.io/scheme: prometheus.io/path: prometheus.io/port: |
|
prometheus.io/scrape |
부울 | true 또는 false | Pod의 스크래핑을 사용하도록 설정하고 monitor_kubernetes_pods 를 true 로 설정해야 합니다. |
|
prometheus.io/scheme |
문자열 | http | 기본적으로 HTTP를 통해 스크래핑합니다. | |
prometheus.io/path |
문자열 | 쉼표로 구분된 배열 | 메트릭을 가져올 HTTP 리소스 경로입니다. 메트릭 경로가 /metrics 가 아닌 경우에는 이 주석을 사용하여 정의합니다. |
|
prometheus.io/port |
문자열 | 9102 | 스크래핑할 포트를 지정합니다. 포트가 설정되지 않은 경우 기본값은 9102입니다. | |
monitor_kubernetes_pods_namespaces |
문자열 | 쉼표로 구분된 배열 | Kubernetes Pod에서 메트릭을 스크래핑할 네임스페이스의 허용 목록입니다. 예를 들어 monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"] |
|
노드 전체 | urls |
문자열 | 쉼표로 구분된 배열 | HTTP 엔드포인트(IP 주소 또는 올바른 URL 경로 중 하나)입니다. 예: urls=[$NODE_IP/metrics] ($NODE _IP는 특정 Container Insights 매개 변수이며 노드 IP 주소 대신 사용할 수 있습니다. 모두 대문자여야 합니다.) |
노드 전체 또는 클러스터 전체 | interval |
문자열 | 60초 | 수집 간격 기본값은 1분(60초)입니다. [prometheus_data_collection_settings.node] 및/또는 [prometheus_data_collection_settings.cluster]에 대해 수집을 s, m 및 h와 같은 시간 단위로 수정할 수 있습니다. |
노드 전체 또는 클러스터 전체 | fieldpass fielddrop |
문자열 | 쉼표로 구분된 배열 | 허용(fieldpass ) 및 허용 안 함(fielddrop ) 목록을 설정하여 엔드포인트에서 수집할 메트릭 및 수집하지 않을 메트릭을 지정할 수 있습니다. 먼저 허용 목록을 설정해야 합니다. |
Prometheus 스크랩 구성을 지정하도록 ConfigMap을 구성합니다(로그로 저장된 메트릭용).
다음 단계를 수행하여 클러스터에 대한 ConfigMap 구성 파일을 구성합니다. ConfigMap은 전역 목록으로, 에이전트에는 하나의 ConfigMap만 적용할 수 있습니다. 다른 ConfigMaps를 컬렉션에 과도하게 사용할 수 없습니다.
템플릿 ConfigMap YAML 파일을 다운로드하고 container-azm-ms-agentconfig.yaml로 저장합니다. 클러스터에 ConfigMap을 이미 배포했으며 최신 구성으로 업데이트하려는 경우 이전에 사용한 ConfigMap 파일을 편집합니다.
사용자 지정 항목을 사용하여 ConfigMap YAML 파일을 편집하고 Prometheus 메트릭을 스크래핑합니다.
클러스터 전체에서 Kubernetes 서비스를 수집하려면 다음 예제를 사용하여 ConfigMap 파일을 구성합니다.
prometheus-data-collection-settings: |- # Custom Prometheus metrics data collection settings [prometheus_data_collection_settings.cluster] interval = "1m" ## Valid time units are s, m, h. fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
kubectl 명령
kubectl apply -f <configmap_yaml_file.yaml>
을 실행합니다.예:
kubectl apply -f container-azm-ms-agentconfig.yaml
구성 변경을 적용하려면 몇 분 정도 걸릴 수 있습니다. 클러스터의 모든 ama-logs Pod가 다시 시작됩니다. 다시 시작이 완료되면 다음과 유사한 메시지가 표시되고 결과(configmap "container-azm-ms-agentconfig" created
)가 포함됩니다.
구성 확인
구성이 클러스터에 성공적으로 적용되었는지 확인하려면 명령 kubectl logs ama-logs-fdf58 -n=kube-system
을 사용하여 에이전트 Pod에서 로그를 검토합니다.
Azure Monitor 에이전트 Pod에 구성 오류가 있는 경우 출력에는 다음 예와 유사한 오류가 표시됩니다.
***************Start Config Processing********************
config::unsupported/missing config schema version - 'v21' , using defaults
구성 변경 내용 적용과 관련한 오류도 검토할 수 있습니다. 다음 옵션을 사용하여 구성 변경 및 Prometheus 메트릭 스크래핑에 대한 추가적인 문제 해결을 수행할 수 있습니다.
같은
kubectl logs
명령을 사용하여 에이전트 Pod 로그에서.라이브 데이터에서 라이브 데이터 로그에는 다음 예와 유사한 오류가 표시됩니다.
2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
Log Analytics 작업 영역에 있는 KubeMonAgentEvents 테이블에서. 스크래핑 오류에 대해 경고 심각도가 지정되고, 구성 오류에 대해 오류 심각도가 지정된 상태로 매시간 데이터가 전송됩니다. 오류가 없으면 테이블 항목에 심각도가 정보인 데이터가 있으며 오류가 보고되지 않습니다. Tags 속성은 오류가 발생한 Pod 및 컨테이너 ID에 대한 상세 정보와, 첫 번째 발생, 마지막 발생 및 지난 한 시간 동안의 횟수를 포함합니다.
Azure Red Hat OpenShift v3.x 및 v4.x의 경우 ContainerLog 테이블을 검색해 Azure Monitor Agent 로그를 확인하여 openshift-azure-logging의 로그 수집이 사용하도록 설정되어 있는지 확인합니다.
오류가 발생하면 Azure Monitor 에이전트에서 파일을 구문 분석하지 못하게 되어 다시 시작되고 기본 구성을 사용하게 됩니다. Azure Red Hat OpenShift v3.x가 아닌 클러스터의 ConfigMap에서 오류를 수정한 후 YAML 파일을 저장하고 다음 명령을 실행하여 업데이트된 ConfigMap을 적용합니다. kubectl apply -f <configmap_yaml_file.yaml
.
Azure Red Hat OpenShift v3.x의 경우 oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging
명령을 실행하여 업데이트된 ConfigMap을 편집 및 저장합니다.
Prometheus 메트릭 데이터 쿼리
Azure Monitor에서 스크래핑하는 Prometheus 메트릭과 에이전트에서 보고하는 모든 구성/스크래핑 오류를 보려면 Prometheus 메트릭 데이터 쿼리를 검토합니다.
Grafana에서 Prometheus 메트릭 보기
컨테이너 인사이트는 Grafana 대시보드의 Log Analytics 작업 영역에 저장된 메트릭을 볼 수 있도록 지원합니다. Grafana의 대시보드 리포지토리에서 다운로드할 수 있는 템플릿이 제공되었습니다. 시작 및 참조를 위해 템플릿을 사용하여 사용자 지정 Grafana 대시보드에서 시각화를 위해 모니터링되는 클러스터에서 다른 데이터를 쿼리하는 방법을 알아 볼 수 있습니다.