prometheus agent를 사용하려면, 수집하려는 클러스터에 각각 prometheus를 agent 모드로 설치하고

별도의 클러스터에 prometheus 를 server 모드로 설치한다.

이때 grafana 도 함께 설치하여 수집한 지표를 대시보드로 구성하여 모니터링 한다.

이 예제는 AWS EKS 기반으로 작성하였다.

 

먼저 promethues server와 grafana를 설치한다.

1. promethues server 설치

프로메테우스는 아래의 헬름차트 중 선택하여 구성할 수 있다.

- prometheus operator : https://github.com/prometheus-operator/prometheus-operator

  • operator 가 설정되어 있는 헬름차트
  • Kubernetes 사용자 지정 리소스 를 사용하여 Prometheus, Alertmanager 및 관련 모니터링 구성 요소의 배포 및 구성을 단순화

- kube-prometheus : https://github.com/prometheus-operator/kube-prometheus

  • Prometheus 및 Prometheus Operator를 기반으로 하는 전체 클러스터 모니터링 스택에 대한 예제 구성을 제공
  •  여러 Prometheus 및 Alertmanager 인스턴스의 배포, 노드 메트릭 수집을 위한 node_exporter와 같은 메트릭 내보내기, Prometheus를 다양한 메트릭 엔드포인트에 연결하는 스크랩 대상 구성, 클러스터의 잠재적인 문제 알림을 위한 예제 경고 규칙이 포함

- community helm chart : https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

  • kube-prometheus와 유사한 기능 세트를 제공
  • Prometheus 커뮤니티에서 관리

community helm chart를 사용하여 prometheus 서버와 grafana를 구성한다.

#get helm ropository info
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

환경에 맞도록 value.yaml 파일을 작성한다.

https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml

파일을 참고하여 설정에 맞도록 value.yaml 을 작성한다.

 

SSL이 미적용된 AWS ALB를 사용하도록 설정하였다.

remote-write-receiver 를 활성화 하여 agent에서 접속할 수 있도록 한다.

server:
    ingress:
        enabled: true
        annotations:
            kubernetes.io/ingress.class: "alb"
            alb.ingress.kubernetes.io/load-balancer-name: #ALB name           
            alb.ingress.kubernetes.io/scheme: "internal"
            alb.ingress.kubernetes.io/target-type: "ip"
            alb.ingress.kubernetes.io/security-groups: #SecurityGroupId                        
            alb.ingress.kubernetes.io/success-codes: "200"
            alb.ingress.kubernetes.io/healthcheck-path: "/-/healthy"
        hosts:
            - #host name
    persistentVolume:
        enabled: true
        storageClass: "gp2"
    extraArgs:
        enable-feature: remote-write-receiver

alertmanager:
    enabled: false

value.yaml  작성 완료 후 헬름 차트를 설치한다.

helm install [RELEASE_NAME] prometheus-community/prometheus -f values.yaml

이때  [RELEASE_NAME]  은 적당한 이름으로 변경한다.

 

2. grafana 설치

그라파나 커뮤니티에서 관리하는 헬름차트로 그라파나를 설치한다.

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

마찬가지로 환경에 맞게 value.yaml 을 작성한다.

참고 : https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml

 

ingress로 SSL이 미적용된 ALB를 구성한다.

ingress:
    enabled: true
    annotations:
        kubernetes.io/ingress.class: "alb"
        alb.ingress.kubernetes.io/load-balancer-name: #ALB NAME 작성
        alb.ingress.kubernetes.io/scheme: "internet-facing"
        alb.ingress.kubernetes.io/target-type: "ip"
        alb.ingress.kubernetes.io/security-groups: #SercurityGroupId 작성         
        # alb.ingress.kubernetes.io/backend-protocol: HTTP
        alb.ingress.kubernetes.io/success-codes: "200"
        alb.ingress.kubernetes.io/healthcheck-path: "/api/health"
    hosts:
        - #Hostname 작성

persistence:
    enabled: true
    storageClassName: gp2

adminUser: #ADMIN USER NAME
adminPassword: #ADMIN PASSWORD

헬름차트를 설치한다.

helm install my-release grafana/grafana -f value.yaml

 

3. prometheus agent 설치(수집하기 위한 클러스터에 설치)

프로메테우스 서버와 마찬가지로 헬름차트를 먼저 구성한다.

#get helm ropository info
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

agent 설정에 맞게 value.yaml을 수정한다.

참고 : https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml

 

agent 모드 설정을 위해 --enable-feature=agent 설정과 prometheus.yml 파일의 rule_files 내용을 삭제한다.

remoteWrite의 url에 프로메테우스 서버 url을 작성하여 지표가 수집될 수 있도록 한다.

server:
  enabled: true
  defaultFlagsOverride:
  - --enable-feature=agent
  - --config.file=/etc/config/prometheus.yml
  configPath: /etc/config/prometheus.yml   
  persistentVolume:
    enabled: true
    storageClass: "gp2" 
  remoteWrite:
  - url: https://#prometehus_server_host/api/v1/write    

serverFiles:
  prometheus.yml:
    rule_files:

prometheus-pushgateway:
  enabled: false

alertmanager:
  enabled: false

grafana:
  enabled: false

defaultRules:
  create: false

작성한 value 파일로 헬름차트를 설치한다.

helm install [RELEASE_NAME] prometheus-community/prometheus -f values.yaml

 

4. Grafana 확인

모든 클러스터에 prometeus agent 설정 후 그라파나에 접속한다.

 

Configuration - Data Source에서 프로메테우스를 데이터 소스로 추가한다.

그라파나 대시보드 구성 참고 : https://aws-diary.tistory.com/121

모든 클러스터의 파드를 namespace 별로 하나의 대시보드에서 확인 가능하다.

 

 

prometheus agent의 HA 구성

prometheus agent의 고가용성(HA)를 확보하기 위하여 value.yaml을 아래와 같이 수정한다.

1대 이상의 POD를 띄우기 위해서는 deploy 대신 statefulset 을 사용하도록 되어 있다.

server:
 ...(중략)
  replicaCount: 2
  statefulSet:    
    enabled: true
 ...(중략)

구성 완료 후 적용해 보면 prometheus agent가 이전과는 달리 sts로 뜨고, 두대가 뜨는걸 확인할 수 있다.

prometheus server 를 사용할때 처럼 shard를 설정하거나 하지않아도 쉽게 HA 구성이 가능하다.

 

좀더 다양한 옵션을 보고 싶다면, 아래 operator 헬름차트를 참고하는게 좋을 것 같다.

https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/designs/prometheus-agent.md

 

'k8s' 카테고리의 다른 글

multi cluster환경 모니터링(prometheus, grafana)  (0) 2023.01.12
CKA 취득 후기 및 공부 방법  (0) 2023.01.03