본문 바로가기

devops

Grafana Loki 성능 이슈 & 튜닝

반응형

모니터링을 하다 보니 한 노드가 100% peak를 치고 있는 것을 파악하였다..

kubectl describe node dev-k8s-np01-w-2gns

특이 사항은 describe에서는 타나자지 않는다..

여기서는 파드들이 그저 할당량만 보여지지 현재 얼마를 사용하고 있는지는 표현되지 않는 것 같다.

 

kubectl top node

top 명령어에서는 현재 노드들의 사용량을 확인할 수 있었고, 위에 그라파나에 타나난 그래프와 유사하게 뜬다.

현재 node가 vCPU 2 코어인데… 2gns node는 모조리 100% 다 쓰고 있는 것을 확인할 수 있엇음..

이제 어떤 파드인지 확인해야한다..

kubectl top pod --all-namespaces

다들 거의 조금 밖에 사용하지 않는데… loki가 1000m 넘게 사용하고 있는 파드가 4개나 있었다… 이 놈이 원인이였다..

 

loki를 일단 내리고 나니 아래와 같이 핵심 자원들이 모두 그래프가 뚝 떨어졌다.

 

Solution

→ 로깅 헬름차트를 다시 구성함

  • promtail, loki를 따로 helmchart를 구성하였지만 loki-stack helmchart를 사용하여 통합함.
  • promtail 부분에 특정 namespace의 로그를 loki로 던지지 않도록 exclusive 처리
  • promtail, loki 에다가 resource limit & requests를 적용함

 

수정한 helmchart values.yaml은 다음과 같다. (loki-stack-2.9.10)

...생략

loki:
  enabled: true
	...생략
  #retension 설정
  config:
    chunk_store_config:
      max_look_back_period: 72h
    table_manager:
      retention_deletes_enabled: true
      retention_period: 72h
  resources:
    limits:
      cpu: 200m
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 128Mi
  persistence:
    enabled: true
    size: 30Gi

promtail:
  enabled: true
  config:
    logLevel: info
    serverPort: 3101
    clients:
      - url: http://{{ .Release.Name }}:3100/loki/api/v1/push
    snippets:
      scrapeConfigs: |
        # See also <https://github.com/grafana/loki/blob/master/production/ksonnet/promtail/scrape_config.libsonnet> for reference
        - job_name: kubernetes-pods
          pipeline_stages:
            {{- toYaml .Values.config.snippets.pipelineStages | nindent 4 }}
          kubernetes_sd_configs:
            - role: pod
          relabel_configs:
            - source_labels:
                - __meta_kubernetes_pod_controller_name
              regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})?
              action: replace
              target_label: __tmp_controller_name
            - source_labels:
                - __meta_kubernetes_pod_label_app_kubernetes_io_name
                - __meta_kubernetes_pod_label_app
                - __tmp_controller_name
                - __meta_kubernetes_pod_name
              regex: ^;*([^;]+)(;.*)?$
              action: replace
              target_label: app
            - source_labels:
                - __meta_kubernetes_pod_label_app_kubernetes_io_instance
                - __meta_kubernetes_pod_label_release
              regex: ^;*([^;]+)(;.*)?$
              action: replace
              target_label: instance
            - source_labels:
                - __meta_kubernetes_pod_label_app_kubernetes_io_component
                - __meta_kubernetes_pod_label_component
              regex: ^;*([^;]+)(;.*)?$
              action: replace
              target_label: component
            {{- if .Values.config.snippets.addScrapeJobLabel }}
            - replacement: kubernetes-pods
              target_label: scrape_job
            {{- end }}
            {{- toYaml .Values.config.snippets.common | nindent 4 }}
            {{- with .Values.config.snippets.extraRelabelConfigs }}
            {{- toYaml . | nindent 4 }}
            {{- end }}
      #Exclude Namespace 설정
      pipelineStages:
        - drop:
            source:     "namespace"
            expression: "(kube-system|istio-system|cattle-system|cattle-fleet-system|cattle-impersonation-system|logging|monitoring)"
  resources:
    limits:
      cpu: 200m
      memory: 128Mi
    requests:
      cpu: 100m
      memory: 128Mi
반응형

'devops' 카테고리의 다른 글

Database용 TCP Reverse-Proxy  (0) 2023.07.07
하나의 SSLVPN 여러 VPC 접근하도록 Reverse-Proxy 구성  (0) 2023.07.07
Docker-compose 설치하기  (0) 2023.07.07
Docker 설치하기  (0) 2023.07.07
GitLab 레포지토리 마이그레이션  (0) 2023.07.07