ScalavaDych vyrážajúce škálovanie pre Laravel aplikácie.

Préjsť na Scalava

Grafana s Prometheom pre Traefik v minikube

Kubernetes

V tomto blog príspevku, sa ponoríme do fascinujúceho sveta integrácie Grafany a Prometheusu s Traefikom v minikube.

Preskúmame, ako nainštalovať a nakonfigurovať Prometheus a Grafanu na vizualizáciu sieťových požiadaviek vykonaných na naše služby, ktoré bežia za Traefik ingress controllerom.

Nastavenie metrík Traefik

Aby sme mohli zhromažďovať a skrampovať metriky Traefik do Promethea, musíme najprv vystaviť službu Traefik. Pozrime sa bližšie na príslušné kroky:

Krok 1: Vytvorenie služby traefik-metrics

Na začiatok vytvoríme službu s názvom traefik-metrics. Táto služba bude vystavovať metriky Traefik na porte 9100. Vystavením tejto služby získame možnosť prístupu k metrikám Traefik prostredníctvom služby Kubernetes DNS pomocou nasledujúcej adresy: traefik-metrics.traefik.svc.cluster.local:9100.

Krok 2: Podrobnosti o službe

Teraz preskúmajme manifest podrobnejšie. Nasadením tohto manifestu zabezpečíme, že služba traefik-metrics je spustená a pripravená slúžiť našim potrebám.

apiVersion: v1
druh: služba
metadáta:
  názov: traefik-metrics
  namespace: traefik
spec:
  porty:
    - názov: metrics
      protocol: TCP
      port: 9100
      targetPort: metrics
  selector:
    app.kubernetes.io/instance: traefik-traefik
    app.kubernetes.io/name: traefik
  type: ClusterIP

Prometheus: Monitorovanie udalostí a upozorňovanie

V tejto časti preskúmame Prometheus, výkonnú a bezplatnú softvérovú aplikáciu používanú na monitorovanie udalostí a upozorňovanie. Prometheus zhromažďuje a ukladá metriky ako časové rady údajov a poskytuje robustný dopytovací jazyk, ktorý umožňuje vizualizáciu metrík v iných aplikáciách, ako je napríklad Grafana.

Nastavenie namespace-u Prometheus

Skôr ako začneme konfigurovať Prometheus, vytvorme Kubernetes namespace s názvom prometheus. Tento namespace bude slúžiť ako prostredie, v ktorom nasadíme všetky komponenty súvisiace s Prometheusom.

Ak chcete vytvoriť namespace prometheus, jednoducho spustite nasledujúci príkaz: kubectl create ns prometheus

Konfigurácia programu Prometheus na stahovanie metrík Traefik

Aby sme zabezpečili, že Prometheus môže sťahovať a zhromažďovať metriky Traefik, musíme vytvoriť objekt ConfigMap s príslušnou konfiguráciou. Nasledujúci manifest ukazuje, ako nakonfigurovať Prometheus na sťahovanie metrík z DNS traefik-metrics.traefik.svc.cluster.local:9100, ktorý odkazuje na službu Traefik metrics, ktorú sme vytvorili v predchádzajúcej časti.

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: prometheus
data:
  prometheus.yml: |
    global:
      scrape_interval: 10s
    scrape_configs:
    - job_name: 'traefik'
      static_configs:
      - targets: ['traefik-metrics.traefik.svc.cluster.local:9100']

Perzistencia metriky Prometheus

V tejto časti zabezpečíme perzistenciu metrík zozbieraných systémom Prometheus z aplikácie Traefik. Prometheus ukladá tieto metriky do priečinka /prometheus. Aby sme zabránili strate údajov, vytvoríme objekt PersistentVolumeClaim Kubernetes, ktorý využijeme v našom nasadení. Kapacitu úložiska môžete flexibilne upraviť podľa svojich potrieb, ale zatiaľ uvažujme o kapacite 10Gi.

Na vytvorenie objektu PersistentVolumeClaim použite nasledujúci manifest:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus-storage-persistence
  namespace: prometheus
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Nasadenie programu Prometheus

V tejto časti nasadíme Prometheus pomocou najnovšej stabilnej verzie v2.44.0. Nasadenie tiež nakonfigurujeme tak, aby sa konfigurácia Prometheus pripojila do priečinka /etc/prometheus, využila trvalé úložisko pre adresár /prometheus a sprístupnila port kontajnera 9090 na budúce použitie.

Ak chcete nasadiť Prometheus s týmito konfiguráciami, použite nasledujúci manifest:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  namespace: prometheus
spec:
  selector:
    matchLabels:
      app: prometheus
  replicas: 1
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:v2.44.0
        ports:
        - containerPort: 9090
          name: default
        volumeMounts:
        - name: prometheus-storage
          mountPath: /prometheus
        - name: config-volume
          mountPath: /etc/prometheus
      volumes:
        - name: prometheus-storage
          persistentVolumeClaim:
            claimName: prometheus-storage-persistence
        - name: config-volume
          configMap:
            name: prometheus-config

Vystavenie programu Prometheus pomocou služby

Aby sme mohli využívať Prometheus v iných aplikáciách, či už v rámci klastra alebo mimo neho, musíme ho vystaviť pomocou služby Kubernetes. Keďže máme v úmysle používať Prometheus len s našou inštanciou Grafana v rámci toho istého klastra, môžeme vytvoriť službu typu NodePort.

Ak chcete vystaviť Prometheus pomocou služby NodePort, použite nasledujúci manifest:

kind: Service
apiVersion: v1
metadata:
  name: prometheus
  namespace: prometheus
spec:
  selector:
    app: prometheus
  type: NodePort
  ports:
  - protocol: TCP
    port: 9090
    targetPort: 9090
    nodePort: 30909

Keď je služba nakonfigurovaná pre aplikáciu Prometheus, naša inštancia Prometheus bude prístupná prostredníctvom služby Kubernetes DNS. Na prístup k službe Prometheus v rámci klastra môžete použiť nasledujúcu adresu URL: http://prometheus.prometheus.svc.cluster.local:9090.

Sprístupnenie Promethea pomocou Traefik IngressRoute

Ak chcete získať prístup k inštancii Prometheus mimo klastra, môžete ju vystaviť pomocou objektu Traefik IngressRoute. Tento krok nie je povinný a je užitočný hlavne vtedy, ak chcete využiť používateľské rozhranie Prometheus na vyhľadávanie pokročilých metrík.

Ak chcete vystaviť Prometheus pomocou objektu Traefik IngressRoute, použite ako príklad nasledujúci manifest:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: prometheus
  namespace: prometheus
spec:
  entryPoints:
    - websecure
  routes:
    - kind: Rule
      match: Host(`prometheus.test`)
      services:
        - kind: Service
          name: prometheus
          port: 9090

Úvod do Grafany

Grafana je výkonná open-source analytická a interaktívna vizualizačná webová aplikácia. Umožňuje vytvárať grafy, diagramy a upozornenia na analýzu údajov po pripojení k podporovaným zdrojom údajov, ako je Prometheus.

Ak chceme začať pracovať s aplikáciou Grafana, musíme najprv vytvoriť Kubernetes namespace s názvom grafana, do ktorého nasadíme všetky potrebné komponenty súvisiace s aplikáciou Grafana.

Na vytvorenie priestoru názvov grafana použite nasledujúci príkaz:

kubectl create ns grafana

Konfigurácia Grafany

Na konfiguráciu Grafany a vytvorenie spojenia s našou inštanciou Prometheus musíme vytvoriť objekt Kubernetes ConfigMap. Táto konfigurácia bude zahŕňať pridanie služby Prometheus ako zdroja údajov v rámci nástroja Grafana.

Nižšie je uvedený príklad manifestu ConfigMap pre Grafanu:

apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-datasources
  namespace: grafana
data:
  prometheus.yaml: |-
    {
        "apiVersion": 1,
        "datasources": [
            {
               "access":"proxy",
                "editable": true,
                "name": "prometheus",
                "orgId": 1,
                "type": "prometheus",
                "url": "http://prometheus.prometheus.svc.cluster.local:9090",
                "version": 1
            }
        ]
    }

Konfigurácia perzistencie pre Grafanu

Aby sme zabezpečili, že nastavenia Grafany, používatelia, ovládacie panely a ďalšie údaje nebudú stratené v prípade reštartu alebo havárie klastra, musíme nakonfigurovať trvalé úložisko pre Grafanu. To možno dosiahnuť vytvorením objektu PersistentVolumeClaim.

Nižšie je uvedený príklad manifestu PersistentVolumeClaim pre Grafana:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-storage-persistence
  namespace: grafana
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Nasadenie Grafany

Na nasadenie Grafany s najnovšou stabilnou verziou (10.0.0) musíme vytvoriť nasadenie Kubernetes. Okrem toho nakonfigurujeme pripojenie konfigurácie dátových zdrojov a nastavíme trvalé úložisko pre databázu a zásuvné moduly Grafana.

Nižšie je uvedený príklad manifestu nasadenia Grafana:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      name: grafana
      labels:
        app: grafana
    spec:
      securityContext:
        runAsUser: 472
        runAsGroup: 472
        fsGroup: 472
      containers:
      - name: grafana
        image: grafana/grafana:10.0.0
        ports:
        - name: grafana
          containerPort: 3000
        resources:
          limits:
            memory: "1Gi"
            cpu: "1000m"
          requests:
            memory: 500M
            cpu: "500m"
        volumeMounts:
          - mountPath: /var/lib/grafana
            name: grafana-storage
          - mountPath: /etc/grafana/provisioning/datasources
            name: grafana-datasources
            readOnly: false
      volumes:
        - name: grafana-storage
          persistentVolumeClaim:
            claimName: grafana-storage-persistence
        - name: grafana-datasources
          configMap:
              defaultMode: 420
              name: grafana-datasources

Vystavenie Grafany pomocou Kubernetes service a Traefik IngressRoute

Aby bola Grafana prístupná aj mimo clustera, musíme ju vystaviť pomocou služby Kubernetes Service a Traefik IngressRoute. To umožní externý prístup k webovému rozhraniu Grafana.

Služba Najprv vytvoríme službu Kubernetes Service, ktorá sprístupní Grafanu v rámci klastra. Ako príklad môžeme použiť nasledujúci manifest:

apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: grafana
spec:
  selector:
    app: grafana
  type: NodePort
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 32000

Traefik IngressRoute

Ak chceme Grafanu vystaviť mimo klastra pomocou Traefiku ako kontroléra Ingress, môžeme vytvoriť Traefik IngressRoute. Tu je príklad manifestu:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: grafana
  namespace: grafana
spec:
  entryPoints:
    - websecure
  routes:
    - kind: Rule
      match: Host(`grafana.test`)
      services:
        - kind: Service
          name: grafana
          port: 3000

Testovanie našich inštalácií

Teraz, keď sme nasadili a nakonfigurovali všetky potrebné komponenty, otestujme naše inštalácie a prístup k aplikáciám.

Na začiatok musíme v termináli spustiť minikube tunnel. Tento príkaz nastaví tunel na sprístupnenie služieb bežiacich v klastri Minikube.

Ďalej musíme aktualizovať súbor /etc/hosts na vašom počítači tak, aby obsahoval nasledujúce smerovanie:

127.0.0.1 grafana.test
127.0.0.1 prometheus.test

Ak chcete súbor aktualizovať, otvorte terminál a vykonajte príkaz sudo nano /etc/hosts. Budete vyzvaní na zadanie hesla a potom môžete súbor aktualizovať pomocou poskytnutého smerovania.

Teraz, keď je všetko nastavené, môžete vo svojom webovom prehliadači pristupovať k našim inštaláciám na adrese https://prometheus.test a https://grafana.test.

Predvolené konto pre Grafana je admin/admin. Po prihlásení prejdite na položku Dashboards > Import > New. Na importovanie dashboardu Traefik z oficiálnej databázy dashboardov Grafana.com môžete použiť ID 4475.

Po importovaní dashboardu môžete teraz skúmať Grafanu a vytvárať vlastné panely a grafy na vizualizáciu vašich metrík.

Záver

V tomto príspevku sme sa venovali nastaveniu a konfigurácii programov Prometheus a Grafana. Úspešne sme nastavili monitorovací systém pomocou Prometheus a Grafana na vizualizáciu sieťových požiadaviek na služby bežiace za Traefik ingress. Táto konfigurácia nám umožňuje efektívne monitorovať a analyzovať metriky, čo umožňuje lepší prehľad o výkonnosti nášho systému.

Šťastné monitorovanie!

Začnite realizovať svoj nápad ešte dnes.

Ste pripravení začať realizovať svoj podnikateľský nápad? Kontaktujte nás a my sa postaráme o všetko ostatné.