본문 바로가기

Observability/Prometheus

[Prometheus](AWS)Install Cloudwatch-exporter with helm chart

Get Helm Repository Info and Chart download

# Add repo
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# Chart download
prometheus-community/prometheus-cloudwatch-exporter
tar zxvf prometheus-cloudwatch-exporter-0.18.0.tgz

Edit values.yaml

30 service.type: LoadBalancer # type: ClusterIP
64 aws.secret.name: sa-for-monitoring-1 # Example
92 config # 수집할 AWS Cloudwatch의 metrics 값을 입력한다.
  • service.type: exporter를 노출 시킬 서비스 타입을 정한다. NodePort, LoadBalancer 등 원하는 것으로 선택하면 된다.
  • aws.secret.name: 모니터링 대상 AWS 사용자의 access_key, secret_key로 만든 K8s secret 작성 
Secret 작성법 참고
2022.07.08 - [Kubernetes] - [Kubernetes]How to create Kubernetes Secret from Json/Yaml/Literal

64 aws.secret.name - Example

apiVersion: v1
kind: Secret
metadata:
  name: sa-for-monitoring-1
type: Opaque
stringData:
    access_key: AKIA22J
    secret_key: yZGrY/X

92 cofing(metrics) - Example

metrics 작성법 참고
2022.07.11 - [Monitoring/Prometheus] - [Prometheus](AWS)Cloudwatch-exporter에 원하는 metrics 추가하기
region: ap-northeast-2
period_seconds: 240
delay_seconds: 60
metrics:
  - aws_dimensions:
    - InstanceId
    aws_metric_name: CPUUtilization
    aws_namespace: AWS/EC2
    aws_statistics:
    - Average
    aws_tag_select:
      resource_type_selection: ec2:instance
      resource_id_dimension: InstanceId
 - aws_namespace: AWS/ELB
   aws_metric_name: RequestCount
   aws_dimensions: [AvailabilityZone, LoadBalancerName]
   aws_tag_select:
     tag_selections:
       Monitoring: ["enabled"]
     resource_type_selection: "elasticloadbalancing:loadbalancer"
     resource_id_dimension: LoadBalancerName
   aws_statistics: [Sum]

period_seconds: exporter가 cloudatch에서 데이터를 수집하는 주기

delay_seconds: cloudwatch는 수집된 데이터의 평가를 위해 몇 분정도 시간이 걸리고 완전히 수렴되지 않은 데이터를 수집하지 않도록 해당 옵션이 default 600s로 설정되어 있다. 이때문에 실제 cloudwatch와 prometheus 데이터 사이에 시간차이가 발생하게 된다. 여기서는 60s로 설정하여 사용하였다.

Install helm chart

helm install cloudwatch . -n monitoring
  • prometheus-cloudwatch-exporter chart를 배포한 뒤 설정한 설정한 서비스타입으로 접속해보면 metrics 값을 확인할 수 있다. (e.g. web browser에서 aae4c6b363d7249eb8b75f836ec43582-466958831.ap-northeast-2.elb.amazonaws.com:9106/metrics 입력)
$ k get svc -n monitoring 
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)          AGE
p-1-prometheus-cloudwatch-exporter   LoadBalancer   10.100.177.122   aae4c6b363d7249eb8b75f836ec43582-466958831.ap-northeast-2.elb.amazonaws.com   9106:30644/TCP   19m

설치한 prometheus-stack values.yaml 파일에 아래 내용 추가한다.

Install prometheus-stack 참고
2022.05.29 - [Monitoring/Prometheus] - [Prometheus]Install prometheus for kubernetes monitoring with helm chart
    additionalScrapeConfigs: #[]
    - job_name: cloudwatch
      static_configs:
      - targets:
        - p-1-prometheus-cloudwatch-exporter.monitoring.svc.cluster.local:9106
        labels:                           
          project: 'jm-han'

scrape config 참고
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config

  • targets
    • cloudwatch-exporter를 prometheus stack helm chart에 등록하고 chart upgrade를 하면 아래와 같이 prometheus에 데이터가 들어오는 것을 확인할 수 있다.
    • targets에 cloudwatch-exporter의 dns를 입력한다. (노출되는 어떠한 주소를 입력해도 무관)
  • labels
    • 수집되는 metric값에 임의의 label을 추가할 수 있다. (나의 경우 grafana에 variables 작성을 위해 추가하였음)