Concept
Prometheus is an open-source systems monitoring and alerting toolkit originally and Most services have an Exporter
Prometheus Exporter List 참고 link
Prometheus architecture
Prometheus server
시계열 데이터를 수집해서 저장
Client libarary
어플리케이션을 개발할 때 프로메테우스에서 데이터를 수집하도록 만드는 라이브러리
Push gateway
클라이언트에서 직접 프로메테우스로 데이터를 보낼 때 받는 역할
Exporter
프로메테우스 클라이언트 라이브러리를 내장해 만들지 않은 어플리케이션에서 데이터를 수집.
100개가 넘는 다양한 익스포터가 있으므로 거의 모든 어플리케이션에서 데이터를 수집할 수 있다.
Alert manager
알람을 보낼 때 중복 처리, 그룹화 등을 알람을 어디로 보낼지 관리한다.
Helm chart download
Helm Chart를 이용하여 prometheus, alertmanager, grafana를 쉽게 설치 할 수 있다.
Helm chart 사용 방법
2022.05.24 - [Container/Kubernetes] - [Kubernetes]Understand how to use helm chart in Kubernetes
아래 내용은 chart name "kube-prometheus-stack" 을 사용하여 설치 과정을 진행하지만 각 각의 Chart를 따로 설치하여도 문제 없이 사용할 수 있다.
## add repo
helm repo add prometheus-community <https://prometheus-community.github.io/helm-charts>
## download chart and unzip
helm fetch prometheus-community/kube-prometheus-stack
tar zxvf kube-prometheus-stack-35.3.1.tgz
Edit values.yaml
# rule
92 additionalPrometheusRulesMap: ## customrule 작성, 아래 예시 참고
# alertmanager
260 ingress:
261 enabled: true
267 annotations:
268 kubernetes.io/ingress.class: alb
269 alb.ingress.kubernetes.io/scheme: internet-facing
270 alb.ingress.kubernetes.io/target-type: ip
271 alb.ingress.kubernetes.io/success-codes: 200,301,302
# grafana
758 persistence: # helm chart에는 없는 부분이라 직접 입력해준다.
759 type: pvc
760 enabled: true
761 storageClassName: default
762 accessModes:
763 - ReadWriteOnce
764 size: 10Gi
781 defaultDashboardsTimezone: kst
783 adminPassword: devops@grepp.co
790 ingress:
793 enabled: true
802 annotations
803 kubernetes.io/ingress.class: alb
804 alb.ingress.kubernetes.io/scheme: internet-facing
805 alb.ingress.kubernetes.io/target-type: ip
806 alb.ingress.kubernetes.io/success-codes: 200,301,302
# prometheus
2497 ingress:
2498 enabled: true
2504 annotations:
2505 kubernetes.io/ingress.class: alb
2506 alb.ingress.kubernetes.io/scheme: internet-facing
2507 alb.ingress.kubernetes.io/target-type: ip
2508 alb.ingress.kubernetes.io/success-codes: 200,301,302
2509 paths:
2510 - "/*"
2981 resources:
2982 requests:
2983 memory: 1000Mi
2988 storageSpec:
2989 volumeClaimTemplate:
2990 spec:
2991 storageClassName: default
2992 accessModes: ["ReadWriteOnce"]
2993 resources:
2994 requests:
2995 storage: 20Gi
3023
additionalScrapeConfigs: #[] ## 추가로 Targets(exporter)를 연결, 아래 예시 참고
- job_name: stackdriver
static_configs:
- targets:
- 34.64.95.152:9255
- job_name: cloudwatch
static_configs:
- targets:
- p-1-prometheus-cloudwatch-exporter.monitoring.svc.cluster.local:9106
- additionalPrometheusRulesMap: 기본으로 제공되는 rule이외에 custom rule을 등록하기 위함.
- alertmanager.service.type, grafana.service.type, prometheus.service.type : alertmanager, grafana, prometheus의 WEB UI로 접속하기 위한 옵션. 여기서는 LoadBalancer를 사용했지만 Ingress를 등록하거나 NodePort로 서비스를 노출하여 사용할 수도 있다.
- prometheusSpec.retention: 데이터 보관 주기 설정
- additionalScrapeConfigs: 추가로 Target(exporter)를 연결하기 위한 설정.
scrape_config doc 참고
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config
Stackdriver exporter 설치 방법
2022.05.29 - [Monitoring/Prometheus] - [Prometheus](GCP)Install stackdriver-exporter with helm chart
Cloudwatch exporter 설치 방법2022.07.11 - [Monitoring/Prometheus] - [Prometheus](AWS)Install Cloudwatch-exporter with helm chart
additionalPrometheusRulesMap - Example
자세한 내용은 위의 해당하는 exporter 링크 참고
additionalPrometheusRulesMap: #{}
rule-name:
groups:
- name: "GCP-monitoring.rules"
rules:
- alert: GCE CPU over 80 %
labels:
severity: warning #critical
for: 3m
expr: sum by (instance, instance_name, project_id, zone)(stackdriver_gce_instance_compute_googleapis_com_instance_cpu_utilization) / sum by (instance, instance_name, project_id, zone)(stackdriver_gce_instance_compute_googleapis_com_instance_cpu_reserved_cores) * 100 > 80
annotations:
message: GCE CPU over 80 % for 1 min
- alert: LB Health Check failure
labels:
severity: warning #critical
for: 1m
expr: sum(stackdriver_pubsub_topic_pubsub_googleapis_com_topic_message_sizes_count) > 0
annotations:
message: LB Health Check failure
- alert: GKE MEM over 85 %
labels:
severity: warning #critical
for: 3m
expr: round(sum by(cluster_name, instance, location, node_name, project_id)(stackdriver_k_8_s_node_kubernetes_io_node_memory_used_bytes) / sum by(cluster_name, instance, location, node_name, project_id)(stackdriver_k_8_s_node_kubernetes_io_node_memory_total_bytes) * 100, 0.01) > 85
annotations:
message: GKE MEM over 85 % for 1min
additionalScrapeConfigs - Example
additionalScrapeConfigs: #[]
- job_name: stackdriver
static_configs:
- targets:
- 10.148.13.40:9255
- job_name: cloudwatch
static_configs:
- targets:
- p-1-prometheus-cloudwatch-exporter.monitoring.svc.cluster.local:9106
Deploy prometheus helm chart
kubectl create ns monitoring
helm install prometheus . -n monitoring
## values.yaml 수정사항이 있는 경우 아래 명령어로 업그레이드
helm upgrade prometheus -f ./values.yaml . -n monitoring
- helm chart를 설치하면 additionalScrapeConfigs 에서 설정했던 job_name 을 Targets에서 확인할 수 있다.
- stackdriver exporter뿐만 아니라 여러 exporter가 존재하며 필요에 맞게 설정하여 사용할 수 있다.
prometheus exporter doc
https://prometheus.io/docs/instrumenting/exporters/