Monitorimi dhe regjistrimi i shërbimeve të jashtme në klasterin Kubernetes

Monitorimi dhe regjistrimi i shërbimeve të jashtme në klasterin Kubernetes

Përshëndetje të gjithë.

Nuk kam gjetur në rrjet një udhëzues të përgjithshëm për regjistrimin dhe mbledhjen e metrikeve nga shërbimet e jashtme në sistemet e shpërndara në Kubernetes. Publikoj zgjidhjen time. Ky artikull supozon që të keni një Prometheus dhe shërbime të tjera të punës. Si një shembull burimi të dhënash nga një shërbim stateful të jashtëm do të përdorim një DBMS PostgreSQL në kontejner Docker. Në kompaninë tonë përdoret një menaxher paketash Helm, më poshtë do të ketë shembuj mbi të. Për tërë zgjidhjen ne përgatisim një chart tonë, duke përfshirë nëndërchartet e të gjithë shërbimeve të përdorura.

Regjistrimi

Shumë kompani për mbledhjen dhe shikimin dhe centralizimin e regjistrimeve përdorin një stak teknologjish Elasticsearch + Logstash + kibana, e njohur ndryshe si ELK. Në rastin tonë nuk ka nevojë të indeksohet përmbajtja dhe unë kam aplikuar një zgjidhje më të lehtë Loki. Ai është i disponueshëm si një paketë Helm, ne e kemi shtuar atë si subchart duke ndryshuar vlerat për ingress dhe pv sipas sistemit tonë.

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"

Për të dërguar log-et në instancë Loki përdorim Loki Docker Logging Driver.

Duhet të instaloni këtë shtesë në të gjitha Docker hostet nga të cilat dëshironi të merrni log-et. Ka disa mënyra për të treguar demonit si të përdorë shtesën. Unë e bëj zgjedhjen e drejtuesit në yaml Docker Compose, i cili është pjesë e Ansible playbook.

postgres.yaml

    - name: Ekzekuto konteinerët
      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 }}"
...

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

Metricat

Merren metricat nga PostgreSQL me ndihmën e postgres_exporter për Prometheus. Vazhdimi i skedarit të mësipërm 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"
...

Për një pamje më të qartë të emrave të shërbimeve stateful jashtë, do t'i shkruajmë përmes 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 }}

Konfigurimi i Prometheus për të marrë të dhënat nga postgres_exporter bëhet duke redaktuar vlerat në subchart.

values.yaml

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

Për vizualizimin e të dhënave të marra, instaloni Dashboard përkatës në
Grafana dhe konfiguroni burimet e të dhënave. Kjo mund të bëhet gjithashtu përmes vlerave në subchart Grafana.

Si duket kjo
Monitorimi dhe regjistrimi i shërbimeve të jashtme në klasterin Kubernetes

Shpresoj që ky artikull i shkurtër ju ndihmoi të kuptoni idetë kryesore të këtij zgjidhjeje dhe do t'ju kursejë kohë në konfigurimin e monitoringut dhe regjistrimit të shërbimeve të jashtme për Loki/Prometheus në klasterin Kubernetes.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster