ڪبرنيٽس ڪلستر تائين ٻاهرين خدمتن جي نگراني ۽ لاگنگ

ڪبرنيٽس ڪلستر تائين ٻاهرين خدمتن جي نگراني ۽ لاگنگ

سڀني کي سٺي قسمت.

مون کي هڪ عام گائيڊ آن لائن نه مليو آهي لاگ ان ڪرڻ ۽ گڏ ڪرڻ تي ٽئين پارٽي جي خدمتن کان ميٽرڪ کي گڏ ڪرڻ تي سسٽم ۾ ڪوبنيٿس. مان پنهنجو حل پوسٽ ڪري رهيو آهيان. هي آرٽيڪل فرض ڪري ٿو ته توهان وٽ اڳ ۾ ئي ڪم آهي Prometheus ۽ ٻيون خدمتون. هڪ مثال طور ڊيٽا ماخذ جي هڪ ٻاهرين رياستي خدمت لاءِ، هڪ DBMS استعمال ڪيو ويندو PostgreSQL هڪ ڪنٽينر ۾ Docker. ڪمپني هڪ پيڪيج مينيجر استعمال ڪري ٿي هيلمٽ، هيٺ ڏنل متن ۾ ان تي مثال هوندا. پوري حل لاءِ، اسان پنھنجو چارٽ تيار ڪري رھيا آھيون، جنھن ۾ استعمال ڪيل سڀني خدمتن جا نسٽڊ چارٽ شامل آھن.

لاگنگ

ڪيتريون ئي ڪمپنيون لاگز گڏ ڪرڻ، ڏسڻ ۽ مرڪزي ڪرڻ لاءِ ٽيڪنالاجي جو اسٽيڪ استعمال ڪن ٿيون ElasticsSearch + Logstash + ڪٻانا، مختصر طور تي ELK. اسان جي صورت ۾، مواد کي انڊيڪس ڪرڻ جي ڪا ضرورت ناهي ۽ مون هڪ وڌيڪ هلڪو وزن استعمال ڪيو لوکي. اهو هڪ هيلم پيڪيج جي طور تي دستياب آهي، اسان ان کي شامل ڪيو هڪ ذيلي چارٽ جي طور تي اسان جي سسٽم جي مطابق داخل ٿيڻ ۽ پي وي جي قيمتن کي تبديل ڪندي.

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"

هڪ مثال ڏانهن لاگ موڪلڻ لاء لوکي استعمال ڪريو Loki Docker لاگنگ ڊرائيور.

توهان کي هر شي تي هي اضافو انسٽال ڪرڻ گهرجي Docker هوسٽ جنهن مان توهان لاگ حاصل ڪرڻ چاهيو ٿا. ڊيمن کي ٻڌائڻ جا ڪيترائي طريقا آهن ته پيڊنگ ڪيئن استعمال ڪجي. مان yaml ۾ ڊرائيور چونڊيو Docker Compose، جيڪو حصو آهي ناھي راند جو ڪتاب.

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

جتي loki_url: kube-loki.example.domain/loki/api/v1/push

ميٽرڪس

Metrics گڏ ڪيا ويا آهن PostgreSQL استعمال ڪندي postgres_exporter لاء Prometheus. مٿي ڏنل فائل جو تسلسل ناھي راند جو ڪتاب.

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

وڌيڪ وضاحت لاءِ، اسين 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 }}

ترتيب ڏيڻ Prometheus postgres_exporter ڊيٽا حاصل ڪرڻ لاءِ ڪيو ويندو آهي تبديلين جي قدرن کي ذيلي چارٽ ۾.

values.yaml

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

حاصل ڪيل ڊيٽا کي ڏسڻ لاء، مناسب ڊيش بورڊ کي انسٽال ڪريو
گرافانا ۽ ڊيٽا ذريعن کي ترتيب ڏيو. اهو پڻ ڪري سگهجي ٿو قدر ذريعي گرافانا سب چارٽ ۾.

اهو ڇا وانگر آهي
ڪبرنيٽس ڪلستر تائين ٻاهرين خدمتن جي نگراني ۽ لاگنگ

مون کي اميد آهي ته هن مختصر مضمون توهان کي هن حل جي پويان بنيادي خيالن کي سمجهڻ ۾ مدد ڪئي ۽ توهان جو وقت بچايو جڏهن مانيٽرنگ ۽ ٻاهرئين خدمتن جي لاگنگ کي Loki/Prometheus لاءِ ڪبرنيٽس ڪلستر ۾ ترتيب ڏيو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو