Väliste teenuste jälgimine ja logimine Kubernetes'i klastris

Väliste teenuste jälgimine ja logimine Kubernetes'i klastris

Tere kõigile.

Ma ei leidnud Internetist üldist juhendit logimise ja mõõtmete kogumise kohta kolmandate osapoolte teenustelt süsteemidesse, mis on paigaldatud Kubernetes. Avaldan oma lahenduse. Käesolev artikkel eeldab, et teil on juba töötav Prometheus ja teised teenused. Andmeallikana kasutatakse väliseid stateful-teenuseid, milleks on andmebaas PostgreSQL konteineris Docker. Ettevõttes kasutatakse pakihaldurit Helm, allpool on antud näited sellel. Kogu lahenduse jaoks koostame oma charti, mis sisaldab sissekasvatatud chart'e kõigile kasutatavatele teenustele.

Logimine

Paljud ettevõtted kasutavad logide kogumiseks, vaatamiseks ja nende tsentraliseerimiseks tehnoloogiate virna Elasticsearch + Logstash + kibana, lühendatud ELK. Meie puhul pole sisu indekseerimine vajalik ja ma kasutasin kergemat Loki. See on saadaval Helm'i paketina, me lisasime selle subchart'ina ja muutsime ingressi ja pv väärtusi meie süsteemi kohandamiseks.

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"

Logide saatmiseks kohale Loki kasutame Loki Docker Logging Driver.

On vajalik see lisand installida kõikidele Docker serverid, millest soovite logisid saada. Demonile on mitu võimalust, kuidas lisandit kasutada. Valin draiveri YAML-is. Docker Compose, mis on osa Ansible playbook'ist.

postgres.yaml

    - name: Käivita konteinerid
      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

PostgreSQL-ist kogutakse metrikaid postgres_exporter kuna Prometheus. Ülaltoodud faili jätk Ansible playbook'ist.

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

Välimike stateful-teenuste nimede paremaks visualiseerimiseks määrame need kaudu 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 }}

Prometheuse seadist postgres_exporter'i andmete kogumiseks toimub subchart'i väärtuste redigeerimise kaudu.

values.yaml

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

Kogutud andmete visualiseerimiseks installige vastav Dashboard
Grafana ja seadistage andmeallikad. Seda saab samuti teha läbi subchart Grafana väärtuste.

Kuidas see välja näeb
Väliste teenuste jälgimine ja logimine Kubernetes'i klastris

Loodan, et see lühike artikkel aitas teil mõista selle lahenduse põhikontseptsioone ja säästab aega välimiste teenuste jälgimise ja logimise seadistamisel Loki/Prometheuse jaoks Kubernetes'i klastris.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster