Zum Inhalt

Nutzung des Prometheus One-Click Features

NETWAYS Managed Kubernetes bietet eine One-Click Integration von Prometheus. Voraussetzung hierfür ist der Prometheus Managed Service, der ebenfalls in MyNWS gestartet werden kann.

Installation

Um die Prometheus-Integration zu aktivieren, navigiert man in MyNWS im Kubernetes-Menü in die Cluster-Übersicht und wählt im Kontextmenü des jeweiligen Clusters Enable Prometheus-Agent.

Daraufhin werden im Cluster im Namespace saas-prometheus-agent mehrere Workloads, Services und Konfigurationsobjekte angelegt:

kubectl get all -n saas-prometheus-agent

NAME                                                       READY   STATUS    RESTARTS   AGE
pod/prom-agent-saas-prometheus-agent-prometheus-0          2/2     Running   0          45m
pod/saas-prometheus-agent-operator-74cd9cd878-987bb        1/1     Running   0          45m
pod/saas-prometheus-agent-prometheus-node-exporter-6z4lp   1/1     Running   0          45m
pod/saas-prometheus-agent-prometheus-node-exporter-q88qf   1/1     Running   0          45m
pod/saas-prometheus-agent-prometheus-node-exporter-wtmb6   1/1     Running   0          45m

NAME                                                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/prometheus-agent-operated                        ClusterIP   None             <none>        9090/TCP            45m
service/saas-prometheus-agent-operator                   ClusterIP   10.254.186.253   <none>        443/TCP             45m
service/saas-prometheus-agent-prometheus                 ClusterIP   10.254.209.115   <none>        9090/TCP,8080/TCP   45m
service/saas-prometheus-agent-prometheus-node-exporter   ClusterIP   10.254.166.186   <none>        9100/TCP            45m

NAME                                                            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/saas-prometheus-agent-prometheus-node-exporter   3         3         3       3            3           kubernetes.io/os=linux   45m

NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/saas-prometheus-agent-operator   1/1     1            1           45m

NAME                                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/saas-prometheus-agent-operator-74cd9cd878   1         1         1       45m

NAME                                                           READY   AGE
statefulset.apps/prom-agent-saas-prometheus-agent-prometheus   1/1     45m

Der Prometheus-Agent sammelt nach der Installation automatisch Daten:

Via Remote Write ist er außerdem automatisch an den Prometheus Managed Service angebunden.

Unterscheidung mehrerer Cluster

Zur Unterscheidung von Metriken aus verschiedenen Clustern labelt die Prometheus-Integration die gesammelten Daten mit einem eindeutigen Label in der Form nws_cluster=<cluster-name>

Visualisierung

Die gesammelten Daten werden via Remote Write automatisch an den bestehenden Prometheus Managed Service propagiert und sind in dessen Grafana-Instanz abrufbar.

Für eine direkte Nutzung der gesammelten Metriken stehen einige fertige Dashboards im Dashboard-Ordner provisioned zur Verfügung:

Generelle Kubernetes Dashboards
  • API Server
  • Kubelet
  • Persistent Volumes
Compute Resources Dashboards
  • Multi-Cluster
  • Cluster
  • Namespace (Pods)
  • Namespace (Workloads)
  • Node (Pods)
  • Pod
  • Workload
Networking Dashboards
  • Cluster
  • Namespace (Pods)
  • Namespace (Workload)
  • Pod
  • Workload

Grafana K8s Dashboard Screenshot

Einrichtung weiterer Endpunkte

Möchte man über das vorkonfigurierte Monitoring hinaus weitere Endpunkte in seinen Clustern monitoren, können sogenannte Monitore für Pods und Services eingerichtet werden. Hierfür sind im Cluster die Custom Resource Definitions PodMonitor bzw. ServiceMonitor installiert.

Der im Cluster installierte Prometheus Operator reagiert auf die Erstellung dieser Custom Resources in Echtzeit und aktualisiert die Prometheus-Konfiguration entsprechend.

Ein exemplarischer Servicemonitor könnte folgendermaßen aussehen:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  namespace: webapp-prod
  name: webapp-prod-monitor
spec:
  endpoints:
  - port: http
    scheme: http
  selector:
    matchLabels:
      app: webapp

Dieser ServiceMonitor resultiert in Monitoring aller Services im Namespace webapp-prod, die mit app: webapp gelabelt sind. Als Endpoint wird der http benannte Port an den gefundenen Services genutzt.

Services in verschiedenen Namespaces

Per Default matcht ein ServiceMonitor ausschließlich Services in dem Namespace, in dem er definiert ist. Dieses Verhalten kann man durch einen namespaceSelector anpassen:

# ...
spec:
  namespaceSelector:
    matchNames:
    - webapp-prod
    - webapp-staging

Ein ServiceMonitor mit dieser Konfiguration würde alle Services in den Namespaces webapp-prod bzw. webapp-staging mit den entsprechenden im selector definierten Labeln monitoren.