Monitorimi dhe regjistrimi i shërbimeve të jashtme në klasterin Kubernetes

Monitorimi dhe regjistrimi i shërbimeve të jashtme në klasterin Kubernetes

Përshëndetje të gjithëve.

Nuk gjeta në internet një udhëzues të përgjithshëm për regjistrimin dhe mbledhjen e metrikave nga shërbime të jashtme në sistemet e zhvilluara në Kubernetes. Po publikoj zgjidhjen time. Ky artikull parashikon që ju tashmë keni një Prometheus dhe shërbime të tjera. Si shembull të burimit të të dhënave nga një shërbim external stateful do të përdoret DBMS PostgreSQL në kontejner Docker. Në kompani përdoret menaxheri i paketave Helm, më poshtë në tekst do të jenë shembuj në të. Për zgjidhjen e gjithanshme ne përgatisim chart-in tonë, duke përfshirë chart-e të brendshme të të gjithë shërbimeve të përdorura.

Regjistrimi

Shumë kompani përdorin një grup teknologjish Elasticsearch + Logstash + kibana, e njohur si ELK. Në rastin tonë nuk ka nevojë të indeksojmë përmbajtjen dhe kam aplikuar një Lokimë të lehtë. Ai është në dispozicion si një paketë Helm, ne e kemi shtuar si subchart duke ndryshuar vlerat për ingress dhe pv sipas sistemit tonë.

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

Për të dërguar log-et në instancën Loki përdorim Loki Docker Logging Driver.

Duhet të instalohet kjo shtesë në të gjitha Docker hostet, nga të cilat dëshironi të merrni log-e. Ekzistojnë disa mënyra për të treguar demonit se si të përdorë shtesën. Unë e bëj përzgjedhjen e driver-it në yaml Docker Compose, i cili është pjesë e 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 }}"
...

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

Metrikat

Metrikat mblidhen nga PostgreSQL me ndihmën e postgres_exporter për Prometheus. Vazhdimi i skedarit të mësipërm 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"
...

Për një qartësi më të madhe të emrave të shërbimeve stateful jashtme, do t'i shkruajmë përmes 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 }}

Konfigurimi i Prometheus për të marrë të dhënat nga postgres_exporter bëhet duke redaktuar values në subchart.

values.yaml

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

Për të vizualizuar të dhënat e marra, instaloni Dashboard-in përkatës në
Nëse tashmë e dini se çfarë është analiza e grupeve dhe se si ta bëni në SQL, kaloni menjëherë në seksionin e fundit. dhe konfiguroni burimet e të dhënave. Kjo gjithashtu mund të bëhet përmes values në subchart-in Grafana.

Si duket kjo
Monitorimi dhe regjistrimi i shërbimeve të jashtme në klasterin Kubernetes

Shpresoj se ky artikull i shkurtër ju ndihmoi të kuptoni idetë kryesore të këtij zgjidhjeje dhe do të kursejë kohë gjatë konfigurimit të monitorimit dhe logimit të shërbimeve jashtme për Loki/Prometheus në klasterin Kubernetes.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster