ScalavaDych vyrážajúce škálovanie pre Laravel aplikácie.
Préjsť na ScalavaV 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.
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:
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
.
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
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.
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
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']
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
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
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
.
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
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
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
}
]
}
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
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
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
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
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.
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!
Ste pripravení začať realizovať svoj podnikateľský nápad? Kontaktujte nás a my sa postaráme o všetko ostatné.