Monitorado kaj registrado de eksteraj servoj al la Kubernetes-areo

Monitorado kaj registrado de eksteraj servoj al la Kubernetes-areo

Bonŝancon al ĉiuj.

Mi ne trovis ĝeneraligitan gvidilon interrete pri registrado kaj kolektado de metrikoj de triaj servoj en sistemojn deplojitaj en Kubernetoj. Mi afiŝas mian solvon. Ĉi tiu artikolo supozas, ke vi jam havas funkciadon Prometeo kaj aliaj servoj. Kiel ekzemplo de datumfonto por ekstera ŝtata servo, DBMS estos uzata PostgreSQL en ujo Docker. La kompanio uzas pakaĵadministrilon Kasko, malsupre en la teksto estos ekzemploj pri ĝi. Por la tuta solvo, ni preparas nian propran diagramon, kiu inkluzivas nestitajn leterojn de ĉiuj uzataj servoj.

Enhavo

Multaj kompanioj uzas amason da teknologioj por kolekti, vidi kaj centraligi protokolojn Elasta esploro + Logstash + kibana, mallongigita kiel ELK. En nia kazo, ne necesas indeksi la enhavon kaj mi uzis pli malpezan Loki. Ĝi haveblas kiel Helm-pakaĵo, ni aldonis ĝin kiel subdiagramon ŝanĝante la valorojn por eniro kaj pv laŭ nia sistemo.

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

Sendi protokolojn al petskribo Loki uzi Loki Docker Logging Driver.

Vi devas instali ĉi tiun aldonaĵon sur ĉio Docker gastigantoj de kiuj vi volas ricevi protokolojn. Estas pluraj manieroj diri al la demono kiel uzi la kompletigo. Mi elektas la ŝoforon en yaml Docker Komponi, kiu estas parto Respondema ludlibro.

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

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

Metriko

Metrikoj estas kolektitaj de PostgreSQL uzante postgres_exporter por Prometeo. Daŭrigo de la supra dosiero Respondema ludlibro.

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

Por pli klareco, ni skribos la nomojn de eksteraj ŝtataj servoj uzante Finpunktojn.

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

Agordo de Prometheus por ricevi postgres_exporter-datumojn estas farita per redaktado de valoroj en la subdiagramo.

valoroj.yaml

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

Por bildigi la ricevitajn datumojn, instalu la taŭgan Dashboard enen
grafana kaj agordi datumfontojn. Ĉi tio ankaŭ povas esti farita per valoroj en la subdiagramo Grafana.

Kiel ĝi aspektas
Monitorado kaj registrado de eksteraj servoj al la Kubernetes-areo

Mi esperas, ke ĉi tiu mallonga artikolo helpis vin kompreni la ĉefajn ideojn malantaŭ ĉi tiu solvo kaj ŝparis al vi tempon kiam vi agordas monitoradon kaj registradon de eksteraj servoj por Loki/Prometheus en Kubernetes-grupo.

fonto: www.habr.com

Aldoni komenton