Memantau dan mencatat layanan eksternal ke cluster Kubernetes

Memantau dan mencatat layanan eksternal ke cluster Kubernetes

Semoga sukses untuk semuanya.

Saya belum menemukan panduan umum online tentang pencatatan dan pengumpulan metrik dari layanan pihak ketiga ke dalam sistem yang diterapkan Kubernetes. Saya memposting solusi saya. Artikel ini mengasumsikan bahwa Anda sudah memiliki file yang berfungsi Prometheus dan layanan lainnya. Sebagai contoh sumber data untuk layanan stateful eksternal, DBMS akan digunakan PostgreSQL dalam wadah Buruh pelabuhan. Perusahaan menggunakan manajer paket Kemudi, di bawah teks akan ada contohnya. Untuk keseluruhan solusi, kami menyiapkan bagan kami sendiri, yang mencakup bagan tersarang dari semua layanan yang digunakan.

Penebangan

Banyak perusahaan menggunakan serangkaian teknologi untuk mengumpulkan, melihat, dan memusatkan log Elasticsearch + Logstash + kibana, disingkat ELK. Dalam kasus kami, tidak perlu mengindeks konten dan saya menggunakan yang lebih ringan Loki. Ini tersedia sebagai paket Helm, kami menambahkannya sebagai subbagan dengan mengubah nilai ingress dan pv agar sesuai dengan sistem kami.

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

Untuk mengirim log ke sebuah instance Loki menggunakan Pengandar Pencatatan Loki Docker.

Anda harus menginstal add-on ini pada semuanya Buruh pelabuhan host dari mana Anda ingin menerima log. Ada beberapa cara untuk memberitahu daemon cara menggunakan padding. Saya memilih driver di yaml Docker Tulis, yang merupakan bagian dari Mungkin buku pedoman.

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

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

Metrik

Metrik dikumpulkan dari PostgreSQL menggunakan postgres_exporter untuk Prometheus. Lanjutan dari file di atas Mungkin buku pedoman.

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

Untuk lebih jelasnya, kami akan menulis nama layanan stateful eksternal menggunakan Endpoint.

postgres-layanan.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 }}

Mengonfigurasi Prometheus untuk menerima data postgres_exporter dilakukan dengan mengedit nilai di subchart.

nilai.yaml

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

Untuk memvisualisasikan data yang diterima, instal Dashboard yang sesuai
grafana dan mengonfigurasi sumber data. Hal ini juga dapat dilakukan melalui nilai pada subchart Grafana.

Seperti apa bentuknya
Memantau dan mencatat layanan eksternal ke cluster Kubernetes

Saya harap artikel singkat ini membantu Anda memahami ide utama di balik solusi ini dan menghemat waktu Anda saat menyiapkan pemantauan dan pencatatan layanan eksternal untuk Loki/Prometheus di cluster Kubernetes.

Sumber: www.habr.com

Tambah komentar