Παρακολούθηση και καταγραφή εξωτερικών υπηρεσιών στο σύμπλεγμα Kubernetes

Παρακολούθηση και καταγραφή εξωτερικών υπηρεσιών στο σύμπλεγμα Kubernetes

Καλή τύχη σε όλους.

Δεν βρήκα γενικό οδηγό στο διαδίκτυο σχετικά με την καταγραφή και τη συλλογή μετρήσεων από υπηρεσίες τρίτων σε συστήματα που αναπτύσσονται σε Kubernetes. Δημοσιεύω τη λύση μου. Αυτό το άρθρο προϋποθέτει ότι έχετε ήδη μια εργασία Προμηθέας και άλλες υπηρεσίες. Ως παράδειγμα πηγής δεδομένων για μια εξωτερική υπηρεσία κατάστασης, θα χρησιμοποιηθεί ένα DBMS PostgreSQL σε ένα δοχείο Λιμενεργάτης. Η εταιρεία χρησιμοποιεί διαχειριστή πακέτων Πηδάλιο, παρακάτω στο κείμενο θα υπάρχουν παραδείγματα σε αυτό. Για ολόκληρη τη λύση, ετοιμάζουμε το δικό μας γράφημα, το οποίο περιλαμβάνει ένθετα γραφήματα όλων των υπηρεσιών που χρησιμοποιήθηκαν.

Ξύλευση

Πολλές εταιρείες χρησιμοποιούν μια στοίβα τεχνολογιών για τη συλλογή, προβολή και συγκέντρωση αρχείων καταγραφής Ελαστική αναζήτηση + Logstash + κιμπάνα, συντομογραφία ΕΛΚ. Στην περίπτωσή μας, δεν χρειάζεται να δημιουργήσουμε ευρετήριο του περιεχομένου και χρησιμοποίησα ένα πιο ελαφρύ Λόκι. Είναι διαθέσιμο ως πακέτο Helm, το προσθέσαμε ως δευτερεύον διάγραμμα αλλάζοντας τις τιμές εισόδου και pv για να ταιριάζουν στο σύστημά μας.

αξίες.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"

Για να στείλετε αρχεία καταγραφής σε μια παρουσία Λόκι χρήση Πρόγραμμα οδήγησης Loki Docker Logging.

Πρέπει να εγκαταστήσετε αυτό το πρόσθετο σε όλα Λιμενεργάτης κεντρικούς υπολογιστές από τους οποίους θέλετε να λαμβάνετε αρχεία καταγραφής. Υπάρχουν διάφοροι τρόποι για να πείτε στον δαίμονα πώς να χρησιμοποιεί το padding. Επιλέγω το πρόγραμμα οδήγησης σε yaml Docker Compose, που είναι μέρος Πιθανό βιβλίο παιχνιδιού.

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

όπου loki_url: kube-loki.example.domain/loki/api/v1/push

Μετρήσεις

Οι μετρήσεις συλλέγονται από την PostgreSQL χρησιμοποιώντας postgres_exporter για Προμηθέας. Συνέχεια του παραπάνω αρχείου Πιθανό βιβλίο παιχνιδιού.

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

Για μεγαλύτερη σαφήνεια, θα γράψουμε τα ονόματα των εξωτερικών υπηρεσιών κατάστασης χρησιμοποιώντας τα 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 για λήψη δεδομένων postgres_exporter γίνεται με την επεξεργασία τιμών στο υποδιάγραμμα.

αξίες.yaml

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

Για να οπτικοποιήσετε τα ληφθέντα δεδομένα, εγκαταστήστε τον κατάλληλο πίνακα ελέγχου
Γκράφανα και να διαμορφώσετε τις πηγές δεδομένων. Αυτό μπορεί επίσης να γίνει μέσω τιμών στον υποδιάγραμμα Grafana.

Τι μοιάζει
Παρακολούθηση και καταγραφή εξωτερικών υπηρεσιών στο σύμπλεγμα Kubernetes

Ελπίζω αυτό το σύντομο άρθρο να σας βοήθησε να κατανοήσετε τις κύριες ιδέες πίσω από αυτήν τη λύση και να σας εξοικονομήσει χρόνο κατά τη ρύθμιση της παρακολούθησης και της καταγραφής εξωτερικών υπηρεσιών για το Loki/Prometheus σε ένα σύμπλεγμα Kubernetes.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο