Prometheus에서 레이블별로 팟(Pod) 찾기

우리 뭐하는거야?



Kubernetes SD 구성을 사용하면 클러스터 상태와 동기화 상태를 유지하기 위해 Kubernetes의 REST API에서 스크랩 대상을 검색할 수 있습니다.

the Prometheus Python client을 사용하여 메트릭을 내보내는 Python 프로그램의 이미지를 만들었습니다. 환경 변수EXPORTER_PORT를 설정하면 메트릭이 해당 포트에 게시됩니다.

레이블이 foobar인 포드에 이 컨테이너를 배포하고 메트릭을 각각 포트 9000 및 8000으로 보냈습니다. 아래 Prometheus 구성에서 레이블 이름별로 별도로 대상을 지정하는 것을 볼 수 있습니다.

왜 이렇게 해야 할까요?



내 클러스터에서 Pod별로 다른 스크랩 구성을 원하는 경우를 찾았습니다. 일반적으로 kubernetes_sd_configs 역할을 service 로 설정하여 각 서비스에 대한 각 서비스 포트에 대한 대상을 검색할 수 있습니다(docs 참조). 그러나이 경우 k8s 추상화 내부의 포드에 대해 다른 수집 요구 사항이 있습니다.

구성 파일 예



푸 배포



apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-deployment
  labels:
    app: foo
spec:
  selector:
    matchLabels:
      app: foo
  replicas: 2
  template:
    metadata:
      labels:
        app: foo
    spec:
      containers:
      - name: python-prometheus-exporter-example
        image: ahf90/python-prometheus-exporter-example
        imagePullPolicy: Always
        ports:
          - containerPort: 9000
        env:
          - name: EXPORTER_PORT
            value: '9000'

바 배치



apiVersion: apps/v1
kind: Deployment
metadata:
  name: bar-deployment
  labels:
    app: bar
spec:
  selector:
    matchLabels:
      app: bar
  replicas: 2
  template:
    metadata:
      labels:
        app: bar
    spec:
      containers:
      - name: python-prometheus-exporter-example
        image: ahf90/python-prometheus-exporter-example
        imagePullPolicy: Always
        ports:
          - containerPort: 8000
        env:
          - name: EXPORTER_PORT
            value: '8000'

프로메테우스 구성.yml



scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'foo-targets'
    scrape_interval: 10s
    metrics_path: '/'
    kubernetes_sd_configs:
    - role: pod
      namespaces:
        names:
        - default
      selectors:
      - role: "pod"
        label: "app=foo"
  - job_name: 'bar-targets'
    scrape_interval: 5s
    metrics_path: '/'
    kubernetes_sd_configs:
      - role: pod
        namespaces:
          names:
            - default
        selectors:
          - role: "pod"
            label: "app=bar"

좋은 웹페이지 즐겨찾기