Externe services monitoren en registreren in het Kubernetes-cluster

Externe services monitoren en registreren in het Kubernetes-cluster

Goed voor iedereen.

Ik heb online geen algemene handleiding gevonden over het loggen en verzamelen van statistieken van services van derden in systemen die zijn geïmplementeerd Kubernetes. Ik post mijn oplossing. In dit artikel wordt ervan uitgegaan dat u al een werkende Prometheus en andere diensten. Als voorbeeld van een gegevensbron voor een externe stateful service zal een DBMS worden gebruikt PostgreSQL in een container havenarbeider. Het bedrijf maakt gebruik van een pakketbeheerder Stuurstand, hieronder in de tekst staan ​​er voorbeelden van. Voor de hele oplossing bereiden we ons eigen diagram voor, dat geneste diagrammen van alle gebruikte services bevat.

Loggen

Veel bedrijven gebruiken een stapel technologieën om logbestanden te verzamelen, bekijken en centraliseren Elasticsearch + Logstash + Kibana, afgekort als ELK. In ons geval is het niet nodig om de inhoud te indexeren en heb ik een lichtere versie gebruikt Loki. Het is beschikbaar als Helm-pakket, we hebben het als subdiagram toegevoegd door de waarden voor ingress en pv aan te passen aan ons systeem.

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

Logboeken naar een exemplaar verzenden Loki gebruik Loki Docker logboekregistratie-stuurprogramma.

U moet deze add-on op alles installeren havenarbeider hosts waarvan u logbestanden wilt ontvangen. Er zijn verschillende manieren om de daemon te vertellen hoe hij de opvulling moet gebruiken. Ik selecteer de driver in yaml Docker Compose, die er deel van uitmaakt 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.voorbeeld.domein/loki/api/v1/push

statistieken

Metrische gegevens worden verzameld uit PostgreSQL met behulp van postgres_exporter voor Prometheus. Vervolg van bovenstaand bestand 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"
...

Voor meer duidelijkheid zullen we de namen van externe stateful services schrijven met behulp van eindpunten.

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

Het configureren van Prometheus om postgres_exporter-gegevens te ontvangen, gebeurt door waarden in het subdiagram te bewerken.

waarden.yaml

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

Om de ontvangen gegevens te visualiseren, installeert u het juiste Dashboard
grafana en gegevensbronnen configureren. Dit kan ook via waarden in het Grafana-subdiagram.

Hoe het eruit ziet
Externe services monitoren en registreren in het Kubernetes-cluster

Ik hoop dat dit korte artikel je heeft geholpen de belangrijkste ideeën achter deze oplossing te begrijpen en je tijd heeft bespaard bij het opzetten van monitoring en loggen van externe services voor Loki/Prometheus in een Kubernetes-cluster.

Bron: www.habr.com

Voeg een reactie