Spremljanje in beleženje zunanjih storitev v gručo Kubernetes

Spremljanje in beleženje zunanjih storitev v gručo Kubernetes

Srečno vsem.

Na spletu nisem našel splošnega vodnika o beleženju in zbiranju meritev iz storitev tretjih oseb v sisteme, nameščene v Kubernetes. Objavljam svojo rešitev. Ta članek predvideva, da že imate delujoč Prometej in druge storitve. Kot primer vira podatkov za zunanjo storitev s spremljanjem stanja bo uporabljen DBMS PostgreSQL v posodi Lučki delavec. Podjetje uporablja upravitelja paketov Helm, spodaj v besedilu bodo primeri o tem. Za celotno rešitev pripravljamo lasten grafikon, ki vključuje ugnezdene grafikone vseh uporabljenih storitev.

Sečnja

Mnoga podjetja uporabljajo kup tehnologij za zbiranje, ogled in centralizacijo dnevnikov Elastično iskanje + Logstash + kibana, skrajšano ELK. V našem primeru ni potrebe po indeksiranju vsebine in uporabil sem lažjo Loki. Na voljo je kot paket Helm, dodali smo ga kot podgraf tako, da smo spremenili vrednosti za ingress in pv, da ustrezajo našemu sistemu.

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

Za pošiljanje dnevnikov instanci Loki uporabo Gonilnik za beleženje Loki Docker.

Ta dodatek morate namestiti na vse Lučki delavec gostitelji, od katerih želite prejemati dnevnike. Obstaja več načinov, kako demonu povedati, kako naj uporablja oblazinjenje. Gonilnik izberem v yamlu Docker Compose, ki je del Možno igralnica.

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

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

Metrike

Meritve se zbirajo iz PostgreSQL z uporabo postgres_exporter za Prometej. Nadaljevanje zgornje datoteke Možno igralnica.

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

Za večjo jasnost bomo imena zunanjih storitev s spremljanjem stanja zapisali z uporabo končnih točk.

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

Konfiguriranje Prometheusa za prejemanje podatkov postgres_exporter se izvede z urejanjem vrednosti v podgrafu.

vrednosti.yaml

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

Za vizualizacijo prejetih podatkov namestite ustrezno nadzorno ploščo
grafana in konfigurirajte vire podatkov. To lahko storite tudi z vrednostmi v podgrafu Grafana.

Kako izgleda?
Spremljanje in beleženje zunanjih storitev v gručo Kubernetes

Upam, da vam je ta kratek članek pomagal razumeti glavne zamisli te rešitve in vam prihranil čas pri nastavljanju spremljanja in beleženja zunanjih storitev za Loki/Prometheus v gruči Kubernetes.

Vir: www.habr.com

Dodaj komentar