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 hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster