Kubernetese klastri välisteenuste jälgimine ja logimine

Kubernetese klastri välisteenuste jälgimine ja logimine

Edu kõigile.

Ma ei leidnud veebist üldist juhendit kolmandate osapoolte teenustest kasutatavatesse süsteemidesse logimise ja mõõdikute kogumise kohta. Kubernetes. Postitan oma lahenduse. See artikkel eeldab, et teil on juba töökorras Prometheus ja muud teenused. Välise olekupõhise teenuse andmeallika näitena kasutatakse DBMS-i PostgreSQL konteineris laevalaadija. Ettevõte kasutab paketihaldurit Rooliratas, allpool tekstis on selle kohta näiteid. Kogu lahenduse jaoks koostame oma diagrammi, mis sisaldab kõigi kasutatud teenuste pesastatud diagramme.

Logimine

Paljud ettevõtted kasutavad logide kogumiseks, vaatamiseks ja tsentraliseerimiseks paljusid tehnoloogiaid Elasticsearch + Logstash + kibana, lühendatult ELK. Meie puhul ei ole vaja sisu indekseerida ja kasutasin kergemat Loki. See on saadaval Helmi paketina, lisasime selle alamdiagrammina, muutes sissepääsu ja pv väärtusi meie süsteemiga sobivaks.

väärtused.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"

Logide saatmiseks eksemplarile Loki kasutama Loki Dockeri logimisdraiver.

Peate installima selle lisandmooduli kõigele laevalaadija hostid, millelt soovite logisid vastu võtta. On mitmeid viise, kuidas deemonile polsterdust kasutada. Ma valin draiveri yamlis Docker loo, mis on osa Võimalik mänguraamat.

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

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

Mõõdikud

Mõõdikud kogutakse PostgreSQL-ist kasutades postgres_exporter eest Prometheus. Ülaltoodud faili jätk Võimalik mänguraamat.

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

Suurema selguse huvides kirjutame väliste olekupõhiste teenuste nimed lõpp-punktide abil.

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

Prometheuse konfigureerimine postgres_exporteri andmete vastuvõtmiseks toimub alamdiagrammi väärtuste redigeerimise teel.

väärtused.yaml

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

Vastuvõetud andmete visualiseerimiseks installige sobiv armatuurlaud
grafana ja konfigureerida andmeallikaid. Seda saab teha ka Grafana alamdiagrammi väärtuste kaudu.

Kuidas see välja näeb
Kubernetese klastri välisteenuste jälgimine ja logimine

Loodan, et see lühike artikkel aitas teil mõista selle lahenduse peamisi ideid ja säästis teie aega Kubernetese klastris Loki/Prometheuse välisteenuste jälgimise ja logimise seadistamisel.

Allikas: www.habr.com

Lisa kommentaar