Pag-monitor ug pag-log sa mga eksternal nga serbisyo sa Kubernetes cluster

Pag-monitor ug pag-log sa mga eksternal nga serbisyo sa Kubernetes cluster

Good luck sa tanan.

Wala koy nakit-an nga kinatibuk-ang giya online sa pag-log ug pagkolekta sa mga sukatan gikan sa mga serbisyo sa ikatulo nga partido ngadto sa mga sistema nga gipakatap sa Kubernetes. Gi-post nako ang akong solusyon. Kini nga artikulo nagtuo nga ikaw aduna nay trabaho Prometheus ug uban pang serbisyo. Isip usa ka pananglitan sa usa ka tinubdan sa datos alang sa usa ka eksternal nga stateful nga serbisyo, usa ka DBMS ang gamiton PostgreSQL sa usa ka sudlanan Docker. Ang kompanya naggamit usa ka manager sa pakete Helm, sa ubos sa teksto adunay mga pananglitan niini. Alang sa tibuok nga solusyon, nag-andam kami sa among kaugalingong tsart, nga naglakip sa mga nested chart sa tanang serbisyo nga gigamit.

Pag-log

Daghang mga kompanya ang naggamit sa usa ka stack sa mga teknolohiya sa pagkolekta, pagtan-aw ug pagsentro sa mga troso Elasticsearch + Logstash + kibana, gipamubo nga ELK. Sa among kaso, dili kinahanglan nga i-index ang sulud ug gigamit nako ang labi ka gaan Loki. Magamit kini ingon usa ka pakete sa Helm, gidugang namon kini ingon usa ka subchart pinaagi sa pagbag-o sa mga kantidad alang sa ingress ug pv aron mahiangay sa among sistema.

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"

Aron ipadala ang mga troso sa usa ka pananglitan Loki paggamit Driver sa Loki Docker Logging.

Kinahanglan nimo nga i-install kini nga add-on sa tanan Docker mga host diin gusto nimo makadawat mga troso. Adunay daghang mga paagi sa pagsulti sa daemon kung giunsa paggamit ang padding. Gipili nako ang drayber sa yaml Docker Compose, nga maoy bahin Ansible playbook.

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

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

Mga sukatan

Ang mga sukatan gikolekta gikan sa PostgreSQL gamit postgres_exporter alang sa Prometheus. Pagpadayon sa ibabaw nga file Ansible playbook.

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

Para mas klaro, isulat namo ang mga ngalan sa external stateful nga serbisyo gamit ang 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 }}

Ang pag-configure sa Prometheus aron makadawat sa datos sa postgres_exporter gihimo pinaagi sa pag-edit sa mga kantidad sa subchart.

values.yaml

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

Aron mahanduraw ang nadawat nga datos, i-install ang angay nga Dashboard sa
grafana ug i-configure ang mga tinubdan sa datos. Mahimo usab kini pinaagi sa mga kantidad sa subchart sa Grafana.

Unsa ang hitsura niini
Pag-monitor ug pag-log sa mga eksternal nga serbisyo sa Kubernetes cluster

Nanghinaut ko nga kining mubo nga artikulo nakatabang kanimo nga masabtan ang mga nag-unang ideya sa likod niini nga solusyon ug makaluwas kanimo sa panahon sa pag-set up sa pagmonitor ug pag-log sa mga eksternal nga serbisyo para sa Loki/Prometheus sa usa ka Kubernetes cluster.

Source: www.habr.com

Idugang sa usa ka comment