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

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

Dobar dan svima.

Nisam pronašao nikakav generalizirani vodič na internetu o evidentiranju i prikupljanju metrika iz usluga trećih strana u sustave implementirane u KubernetesObjavljujem svoje rješenje. Ovaj članak pretpostavlja da već imate funkcionalno Prometej i druge usluge. DBMS će se koristiti kao primjer izvora podataka za vanjsku uslugu sa stanjem. PostgreSQL u kontejneru Lučki radnikTvrtka koristi upravitelja paketa. Kormilo, a primjeri će biti navedeni u nastavku. Za cijelo rješenje pripremamo vlastiti grafikon koji uključuje ugniježđene grafikone za sve korištene usluge.

Sječa drva

Mnoge tvrtke koriste niz tehnologija za prikupljanje, pregled i centralizaciju logova. Elasticsearch + logstash + kibana, skraćeno ELK. U našem slučaju nije potrebno indeksirati sadržaj, pa sam koristio jednostavniji LokiDostupan je kao Helm paket, a mi smo ga dodali kao podgrafikon promjenom vrijednosti za ingress i pv kako bi odgovarali 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"

Slanje zapisnika instanci Loki koristiti Loki Docker upravljački program za zapisivanje.

Ovaj dodatak morate instalirati na sve Lučki radnik Hostovi od kojih želite primati logove. Postoji nekoliko načina da se demonu kaže kako koristiti dodatak. Upravljački program odabirem u YAML-u. 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 je loki_url: kube-loki.example.domain/loki/api/v1/push

Metrika

Metrike se prikupljaju iz PostgreSQL-a pomoću postgres_exporter za PrometejNastavak 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, nazive vanjskih servisa koji održavaju stanje napisat ćemo pomoću krajnjih točaka (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 }}

Prometheus je konfiguriran za primanje podataka postgres_exporter uređivanjem vrijednosti u poddijagramu.

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 u
grafana i konfigurirati izvore podataka. To se također može učiniti putem vrijednosti u Grafaninom poddijagramu.

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

Nadam se da vam je ovaj kratki članak pomogao da shvatite glavne ideje ovog rješenja i da će vam uštedjeti vrijeme prilikom postavljanja praćenja i evidentiranja vanjskih servisa za Loki/Prometheus u Kubernetes klasteru.

Izvor: www.habr.com

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster