• VictoriaMetrics Stack 완전해부 - 4: VMAgent를 없애고 VMSingle 만 사용하기 : 메트릭

    2026. 6. 9.

    by. Daramu

    이전 포스팅으로 VMAgent를 삭제하는 것 까지는 좋았으나.

     

    한가지 새롭게 안 사실이있다.

     

    메트릭데이터가 한참 안들어와서 조사해본 결과,

    이전 설정으로 Spring boot와 yaml 로 설정한 "instrumentation.yaml" 를 통해 어플리케이션 데이터가 들어오는건 맞았다.

     

    거기에는 애플리케이션 내부 JVM 메트릭 데이터도 들어가있다.

    여기까지는 맞다.

     

    하지만 노드나 OS레벨의 메트릭 정보를 보기 위해서는 Otel collector하나로는 부족했다.

    하나로 수집 가능하다고 생각했었지만, 다시 조사해본결과 그게 아니라 어찌되었든 node-exporter와 kube-state-metrics의 설치는 불가피할 거 ㅅ같다.

     

    node-exporter는 유명하겠지만 노드의 cpu, memory 등 상태를 보여주고, kube-state-metrics는 pod의 상태, deployment등의 상태를 나타낸다.

     

    두개를 설치해준다.

    helm install node-exporter prometheus-community/prometheus-node-exporter -n monitoring
    helm install kube-state-metrics prometheus-community/kube-state-metrics -n monitoring

     

    그리고 otel-daemonset에서 아래처럼 수정해준다.

    config:
      receivers:
        filelog:
          include:
            - /var/log/pods/*/*/*.log
            - /var/log/containers/*.log
          include_file_path: true
          operators:
            - type: json_parser
              id: parser-docker
            - type: move
              from: attributes["log.file.path"]
              to: resource["log.file.path"]
        prometheus:
          config:
            scrape_configs:
              - job_name: node-exporter
                static_configs:
                  - targets: ['node-exporter-prometheus-node-exporter.monitoring.svc.cluster.local:9100']
              - job_name: kube-state-metrics
                static_configs:
                  - targets: ['kube-state-metrics.monitoring.svc.cluster.local:8080']
              - job_name: cadvisor
                scheme: https
                tls_config:
                  insecure_skip_verify: true
                bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
                kubernetes_sd_configs:
                  - role: node
                relabel_configs:
                  - action: labelmap
                    regex: __meta_kubernetes_node_label_(.+)
                  - target_label: __address__
                    replacement: kubernetes.default.svc.cluster.local:443
                  - source_labels: [__meta_kubernetes_node_name]
                    target_label: __metrics_path__
                    replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor

     

    Daemonset이 수집할 수 있게 권한도 추가해준다.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: otel-daemonset-role
    rules:
      - apiGroups: [""]
        resources: ["pods", "namespaces"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["nodes/metrics", "nodes/proxy"]
        verbs: ["get", "list", "watch"]
      - nonResourceURLs: ["/metrics", "/metrics/cadvisor"]
        verbs: ["get"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: otel-daemonset-rolebinding
    subjects:
      - kind: ServiceAccount
        name: otel-ds-opentelemetry-collector
        namespace: monitoring
    roleRef:
      kind: ClusterRole
      name: otel-daemonset-role
      apiGroup: rbac.authorization.k8s.io

     

    그럼 이렇게 잘 찍힌다.

    댓글