VÀliste teenuste jÀlgimine ja logimine Kubernetes klastris

VÀliste teenuste jÀlgimine ja logimine Kubernetes klastris

Tere kÔigile.

Ma ei leidnud internetist ĂŒldist juhendit logimise ja metrikate kogumise kohta kolmandate osapoolte teenustelt sĂŒsteemidesse, mis on rajatud Kubernetes. Avaldan oma lahenduse. KĂ€esolev artikkel eeldab, et teil on juba toimiv Prometheus ja teised teenused. Andmeallikana kasutame stateful-teenuse jaoks andmebaasi PostgreSQL konteineris Docker. EttevĂ”ttes kasutatakse pakettide haldurit Helm, allpool tuuakse vĂ€lja nĂ€ited sellel. Kogu lahenduse jaoks valmistame ette oma charti, mis hĂ”lmab kĂ”igi kasutatavate teenuste sisemisi chart'e.

Logimine

Paljud ettevĂ”tted kasutavad logide kogumiseks, vaatamiseks ja tsentraliseerimiseks tehnoloogiate virna Elasticsearch + Logstash + kibana, lĂŒhidalt ELK. Meie puhul ei ole sisu indekseerimine vajalik ja ma rakendasin kergemat Loki. See on saadaval Helm pakendina, lisasime selle subchart'ina, muutes ingressi ja pv vÀÀrtusi meie sĂŒsteemi jaoks.

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 instantsile Loki kasutame Loki Docker Logging Driver.

On vaja installida see lisand kÔigile Docker hostidele, kust soovite logisid saada. On mitu viisi, kuidas demonile nÀidata, kuidas lisandit kasutada. Valin draiveri yaml'is Docker Compose, mis on osa Ansible playbook'ist.

postgres.yaml

    - name: KĂ€ita 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ÔÔtmised

Kogutakse metrikaid PostgreSQL-st postgres_exporter jaoks Prometheus. JĂ€rgnevast ĂŒlaltoodud failist 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"
...

Sisemise selguse huvides defineerime vÀlist stateful-teenust nime 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 soovitud andmete saamiseks muudetakse vÀÀrtuseid subchart'is.

values.yaml

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

Saadud andmete visualiseerimiseks installige vastav Dashboard
Grafana ja seadistage andmeallikad. Seda saab teha ka vÀÀrtuste kaudu subchart Grafana's.

Kuidas see vÀlja nÀeb
VÀliste teenuste jÀlgimine ja logimine Kubernetes klastris

Loodan, et see lĂŒhike artikkel aitas teil mĂ”ista selle lahenduse pĂ”hikontseptsioone ja sÀÀsta aega vĂ€listes teenustes Loki/Prometheuse jĂ€lgimise ja logimise seadistamisel Kubernetes'i klastris.

Allikas: habr.com

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster