Monitering en aanteken van eksterne dienste na die Kubernetes-kluster

Monitering en aanteken van eksterne dienste na die Kubernetes-kluster

Sterkte aan almal.

Ek het nie 'n algemene gids aanlyn gevind oor die aanteken en insamel van statistieke van derdeparty-dienste na stelsels wat in Kubernetes. Ek plaas my oplossing. Hierdie artikel neem aan dat jy reeds 'n werkende Prometheus en ander dienste. As 'n voorbeeld van 'n databron vir 'n eksterne stateful-diens, sal 'n DBBS gebruik word PostgreSQL in 'n houer Docker. Die maatskappy gebruik 'n pakketbestuurder Helm, hieronder in die teks sal daar voorbeelde daarvan wees. Vir die hele oplossing berei ons ons eie grafiek voor, wat geneste kaarte van al die dienste wat gebruik word, insluit.

Tekening

Baie maatskappye gebruik 'n stapel tegnologie om logs te versamel, te bekyk en te sentraliseer Elasticsearch + logstash + kibana, afgekort as ELK. In ons geval is dit nie nodig om die inhoud te indekseer nie en ek het 'n meer liggewig gebruik Loki. Dit is beskikbaar as 'n Helm-pakket, ons het dit as 'n subkaart bygevoeg deur die waardes vir ingang en pv te verander om by ons stelsel te pas.

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

Om logs na 'n instansie te stuur Loki gebruik Loki Docker Logging Driver.

U moet hierdie byvoeging op alles installeer Docker gashere waarvandaan jy logs wil ontvang. Daar is verskeie maniere om die daemon te vertel hoe om die vulling te gebruik. Ek kies die bestuurder in yaml Docker Komponeer, wat deel is Ansible speelboek.

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

waar loki_url: kube-loki.example.domain/loki/api/v1/stoot

Metrieke

Metrieke word van PostgreSQL ingesamel met behulp van postgres_uitvoerder vir Prometheus. Voortsetting van bogenoemde lΓͺer Ansible speelboek.

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

Vir groter duidelikheid, sal ons die name van eksterne stateful dienste met behulp van Eindpunte skryf.

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

Die opstel van Prometheus om postgres_exporter-data te ontvang, word gedoen deur waardes in die subgrafiek te wysig.

waardes.yaml

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

Om die ontvangde data te visualiseer, installeer die toepaslike Dashboard in
grafana en konfigureer databronne. Dit kan ook gedoen word deur waardes in die Grafana-subkaart.

Hoe lyk dit
Monitering en aanteken van eksterne dienste na die Kubernetes-kluster

Ek hoop dat hierdie kort artikel jou gehelp het om die hoofgedagtes agter hierdie oplossing te verstaan ​​en jou tyd bespaar het met die opstel van monitering en aantekening van eksterne dienste vir Loki/Prometheus in 'n Kubernetes-groepering.

Bron: will.com

Voeg 'n opmerking