Praćenje i bilježenje vanjskih usluga u Kubernetes klaster

Praćenje i bilježenje vanjskih usluga u Kubernetes klaster

Sretno svima.

Nisam pronašao općeniti vodič na mreži o bilježenju i prikupljanju mjernih podataka iz usluga trećih strana u sustave raspoređene u Kubernetes. Objavljujem svoje rješenje. Ovaj članak pretpostavlja da već imate radni Prometej i druge usluge. Kao primjer izvora podataka za vanjsku uslugu praćenja stanja koristit će se DBMS PostgreSQL u kontejneru Lučki radnik. Tvrtka koristi upravitelj paketa Kormilo, dolje u tekstu će biti primjeri o tome. Za cijelo rješenje pripremamo vlastiti grafikon koji uključuje ugniježđene grafikone svih korištenih usluga.

Sječa drva

Mnoge tvrtke koriste hrpu tehnologija za prikupljanje, pregled i centraliziranje zapisa Elasticsearch + logstash + kibana, skraćeno ELK. U našem slučaju nema potrebe za indeksiranjem sadržaja i upotrijebio sam laganiji Loki. Dostupan je kao Helm paket, dodali smo ga kao podgrafikon mijenjajući vrijednosti za ingress i pv kako bi odgovarale našem sustavu.

vrijednosti.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"

Za slanje zapisa instanci Loki koristiti Loki Docker upravljački program za bilježenje.

Morate instalirati ovaj dodatak na sve Lučki radnik hostovi od kojih želite primati zapise. Postoji nekoliko načina da demonu kažete kako da koristi padding. Odaberem upravljački program u yamlu Docker Sastaviti, koji je dio Ansible igraonica.

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 }}"
...

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

Metrika

Mjerni podaci se prikupljaju iz PostgreSQL-a pomoću postgres_exporter za Prometej. Nastavak gornje datoteke Ansible igraonica.

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"
...

Radi veće jasnoće, napisat ćemo nazive vanjskih statusnih usluga pomoću krajnjih točaka.

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 }}

Konfiguriranje Prometheusa za primanje podataka postgres_exporter vrši se uređivanjem vrijednosti u podgrafikonu.

vrijednosti.yaml

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

Za vizualizaciju primljenih podataka instalirajte odgovarajuću nadzornu ploču
grafana i konfigurirati izvore podataka. To se također može učiniti kroz vrijednosti u Grafana podgrafikonu.

Kako izgleda
Praćenje i bilježenje vanjskih usluga u Kubernetes klaster

Nadam se da vam je ovaj kratki članak pomogao razumjeti glavne ideje ovog rješenja i uštedio vam vrijeme prilikom postavljanja praćenja i bilježenja vanjskih usluga za Loki/Prometheus u Kubernetes klasteru.

Izvor: www.habr.com

Dodajte komentar