Monitorovanie a zaznamenávanie externých služieb do klastra Kubernetes

Monitorovanie a zaznamenávanie externých služieb do klastra Kubernetes

Veľa šťastia všetkým.

Nenašiel som všeobecnú príručku online o protokolovaní a zhromažďovaní metrík zo služieb tretích strán do systémov nasadených v Kubernetes. Zverejňujem svoje riešenie. Tento článok predpokladá, že už máte prácu Prometheus a ďalšie služby. Ako príklad zdroja údajov pre externú stavovú službu sa použije DBMS PostgreSQL v nádobe prístavný robotník. Spoločnosť využíva správcu balíkov kormidlo, nižšie v texte budú na to príklady. Pre celé riešenie pripravujeme vlastný graf, ktorý obsahuje vnorené grafy všetkých využívaných služieb.

Ťažba dreva

Mnoho spoločností používa na zhromažďovanie, prezeranie a centralizáciu protokolov množstvo technológií ElasticSearch + Logstash + kibana, skrátene ELK. V našom prípade nie je potrebné indexovať obsah a použil som odľahčenejšie Loki. Je k dispozícii ako balík Helm, pridali sme ho ako podkartu zmenou hodnôt pre ingress a pv, aby vyhovovali nášmu systému.

hodnoty.yaml

ingress:
  enabled: true
  annotations:
     kubernetes.io/ingress.class: nginx
  hosts:
    - host: kube-loki.example.domain
      paths: 
        - /
  tls: []

....

persistence:
  type: pvc
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 100Gi
  finalizers:
    - kubernetes.io/pvc-protection
  existingClaim: "pv-loki"

Ak chcete odoslať protokoly do inštancie Loki použitie Logovací ovládač Loki Docker.

Tento doplnok musíte nainštalovať na všetko prístavný robotník hostiteľov, od ktorých chcete prijímať protokoly. Existuje niekoľko spôsobov, ako povedať démonovi, ako má používať výplň. Vyberám ovládač v yaml Docker Compose, ktorá je súčasťou Ansible playbook.

postgres.yaml

    - name: Run containers
      docker_compose:
        project_name: main-postgres
        definition:
          version: '3.7'
          services:
            p:
              image: "{{ postgres_version }}"
              container_name: postgresql
              restart: always
              volumes:
                - "{{ postgres_dir }}/data:/var/lib/postgresql/data"
                - "{{ postgres_dir }}/postgres_init_scripts:/docker-entrypoint-initdb.d"
              environment:
                POSTGRES_PASSWORD: {{ postgres_pass }}
                POSTGRES_USER: {{ postgres_user }}
              ports:
                - "{{ postgres_ip }}:{{ postgres_port }}:5432"
              logging:
                driver: "loki"
                options:
                  loki-url: "{{ loki_url }}"
                  loki-batch-size: "{{ loki_batch_size }}"
                  loki-retries: "{{ loki_retries }}"
...

kde loki_url: kube-loki.example.domain/loki/api/v1/push

Metriky

Metriky sa zhromažďujú z PostgreSQL pomocou postgres_exporter pre Prometheus. Pokračovanie vyššie uvedeného súboru Ansible playbook.

postgres.yaml

...
            pexp:
              image: "wrouesnel/postgres_exporter"
              container_name: pexporter
              restart: unless-stopped
              environment:
                DATA_SOURCE_NAME: "postgresql://{{ postgres_user }}:{{ postgres_pass }}@p:5432/postgres?sslmode=disable"
              ports:
                - "{{ postgres_ip }}:{{ postgres_exporter_port }}:9187"
              logging:
                driver: "json-file"
                options:
                  max-size: "5m"
...

Pre väčšiu prehľadnosť budeme názvy externých stavových služieb písať pomocou Endpoints.

postgres-service.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: postgres-exporter
subsets:
  - addresses:
      - ip: {{ .Values.service.postgres.ip }}
    ports:
      - port: {{ .Values.service.postgres.port }}
        protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-exporter
  labels:
    chart:  "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
  ports:
    - protocol: TCP
      port: {{ .Values.service.postgres.port }}
      targetPort: {{ .Values.service.postgres.port }}

Konfigurácia programu Prometheus na prijímanie údajov postgres_exporter sa vykonáva úpravou hodnôt v podgrafe.

hodnoty.yaml

scrape_configs:
...
  - job_name: postgres-exporter
    static_configs:
      - targets: 
         - postgres-exporter.applicationnamespace.svc.cluster.local:9187
        labels:
          alias: postgres
...

Na vizualizáciu prijatých údajov nainštalujte príslušný Dashboard
grafana a konfigurovať zdroje údajov. Dá sa to urobiť aj prostredníctvom hodnôt v podgrafe Grafana.

Ako to vyzerá
Monitorovanie a zaznamenávanie externých služieb do klastra Kubernetes

Dúfam, že vám tento krátky článok pomohol pochopiť hlavné myšlienky tohto riešenia a ušetril vám čas pri nastavovaní monitorovania a zaznamenávania externých služieb pre Loki/Prometheus v klastri Kubernetes.

Zdroj: hab.com

Pridať komentár