Nadgledanje i evidentiranje eksternih usluga u Kubernetes klaster

Nadgledanje i evidentiranje eksternih usluga u Kubernetes klaster

Sretno svima.

Nisam pronašao generalizovani vodič na mreži o evidentiranju i prikupljanju metrike sa usluga trećih strana u sisteme koji su raspoređeni u Kubernet. Objavljujem svoje rješenje. Ovaj članak pretpostavlja da već imate radni Prometej i druge usluge. Kao primjer izvora podataka za eksternu uslugu sa stanjem, koristit će se DBMS PostgreSQL u kontejneru doker. Kompanija koristi menadžer paketa kormilo, dolje u tekstu će biti primjeri o tome. Za cjelokupno rješenje pripremamo vlastiti grafikon koji uključuje ugniježđene grafikone svih korištenih usluga.

Logging

Mnoge kompanije koriste niz tehnologija za prikupljanje, pregled i centralizaciju dnevnika Elasticsearch + Logstash + kibana, skraćeno ELK. U našem slučaju nema potrebe za indeksiranjem sadržaja i koristio sam lakši Loki. Dostupan je kao Helm paket, dodali smo ga kao podgraf tako što smo promijenili vrijednosti za ulaz i pv kako bi odgovarali našem sistemu.

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 dnevnika instanci Loki koristite Loki Docker Logging Driver.

Morate instalirati ovaj dodatak na sve doker hostove od kojih želite da primate zapisnike. Postoji nekoliko načina da kažete demonu kako da koristi padding. Odaberem drajver u yaml Docker Compose, koji je dio 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 }}"
...

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

metrika

Metrike se prikupljaju iz PostgreSQL pomoću postgres_exporter do Prometej. Nastavak gornjeg fajla 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"
...

Radi veće jasnoće, pisaćemo imena eksternih usluga sa stanjem pomoću krajnjih tač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 iz postgres_exportera se vrši uređivanjem vrijednosti u podgrafu.

vrijednosti.yaml

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

Da biste vizualizirali primljene podatke, instalirajte odgovarajuću Dashboard
grafana i konfigurirati izvore podataka. To se također može učiniti putem vrijednosti u Grafana podgrafu.

Kako izgleda
Nadgledanje i evidentiranje eksternih usluga u Kubernetes klaster

Nadam se da vam je ovaj kratki članak pomogao da shvatite glavne ideje iza ovog rješenja i uštedio vam vrijeme pri postavljanju praćenja i evidentiranja vanjskih usluga za Loki/Prometheus u Kubernetes klasteru.

izvor: www.habr.com

Dodajte komentar