Comment surveiller votre cluster Kubernetes avec Prometheus et Grafana







La surveillance d’un cluster est absolument vitale dans un système Cloud Native. Prometheus et Grafana facilitent la surveillance de presque toutes les mesures de votre cluster Kubernetes.

Dans cet article de blog, je montrerai comment ajouter une surveillance pour tous les nœuds de votre cluster. (Voici un référentiel Github avec tout ce que nous couvrons ici.)

Avant de commencer, vous aurez besoin: d’un cluster Kubernetes existant et de binaires kubectl & helm installés localement.

Installer Prometheus

Nous séparerons nos ressources de surveillance dans un espace de noms distinct pour les garder ensemble.
Créez un dossier appelé surveillance. Ici, nous allons créer toutes nos ressources de surveillance.
Créez un fichier appelé monitoring / namespace.yml avec le contenu:
kind: Namespace
apiVersion: v1
metadata:
name: monitoring
Appliquer et tester que l’espace de noms existe.
$ kubectl get namespaces
NAME STATUS AGE
[...]
monitoring Active 105m

Déployer Prometheus

C’est là que la puissance de Helm intervient et facilite la vie.
Nous devons d’abord mettre à jour notre référentiel de cartes de barre local:
$ helm repo update
Ensuite, déployez Prometheus dans l’espace de noms de surveillance:
$ helm install stable/prometheus 
--namespace monitoring 
--name prometheus
Cela déploiera Prometheus dans votre cluster dans l’espace de noms de surveillance et marquera la version avec le nom prometheus.
Prometheus est en train de supprimer le cluster avec l’exportateur de nœuds et de collecter des métriques à partir des nœuds.
Nous pouvons confirmer en vérifiant que les pods fonctionnent:
$ kubectl get pods -n monitoring
NAME READY STATUS
prometheus-alertmanager-5c5958dcb7-bq2fw 2/2 Running
prometheus-kube-state-metrics-76d649cdf9-v5qg5 1/1 Running
prometheus-node-exporter-j74zq 1/1 Running
prometheus-node-exporter-x5xnq 1/1 Running
prometheus-pushgateway-6744d69d4-27dxb 1/1 Running
prometheus-server-669b987bcd-swcxh 2/2 Running

Installer Grafana

Lors du déploiement de Grafana, nous devons le configurer pour lire les métriques des bonnes sources de données.

Définissez les sources de données Grafana.

Grafana prend les sources de données via les configurations yaml lors de son approvisionnement. (Pour plus d’informations, voir ici .)
Kubernetes n’a rien à voir avec l’importation des données. Il orchestre simplement l’injection de ces fichiers yaml.
Lorsque le graphique Grafana Helm est déployé, il recherche toutes les cartes de configuration contenant une étiquette grafana_datasource.

Créez une carte de configuration de source de données Prometheus.

Dans le dossier de surveillance, créez un sous-dossier appelé grafana.
Voici où nous allons stocker nos configurations pour le déploiement de grafana.
Créez un fichier appelé monitoring / grafana / config.yml avec le contenu:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-grafana-datasource
namespace: monitoring
labels:
grafana_datasource: '1'
data:
datasource.yaml: |-
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
orgId: 1
url: http://prometheus-server.monitoring.svc.cluster.local
Voici où nous ajoutons l’étiquette grafana_datasource qui indiquera au provisionneur Grafana qu’il s’agit d’une source de données qu’il doit injecter.
labels:
grafana_datasource: '1'
Appliquez et testez la configuration:
$ kubectl apply -f monitoring/grafana/config.yml
$ kubectl get configmaps -n monitoring
NAME DATA AGE
[...]>
grafana 1 131m

Remplacer la valeur de Grafana

Lorsque Grafana est déployé et que le provisionneur s’exécute, le provisionneur de source de données est désactivé. Nous devons l’activer pour qu’il recherche nos cartes de configuration.
Nous devons créer notre propre fichier values.yml pour remplacer la valeur de recherche des sources de données, donc lorsque Grafana est déployé, il recherchera notre définition datasource.yml et l’injectera.
Créez un fichier appelé monitoring / grafana / values.yml avec le contenu:
sidecar:
datasources:
enabled: true
label: grafana_datasource
Cela injectera un side-car qui chargera toutes les sources de données dans Grafana lors de son approvisionnement.
Nous pouvons maintenant déployer Grafana avec le fichier values.yml substitué et notre source de données sera importée.
$ helm install stable/grafana 
-f monitoring/grafana/values.yml 
--namespace monitoring 
--name grafana
Vérifiez qu’il fonctionne:
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
[...]
grafana-5f4d8bcb94-ppsjq 1/1 Running

Obtenez le mot de passe Grafana

Grafana est déployé avec un mot de passe. C’est une bonne nouvelle. Mais quel est le mot de passe?
$ kubectl get secret 
--namespace monitoring grafana 
-o jsonpath="{.data.admin-password}" 
| base64 --decode ; echo
Cela crachera le mot de passe sur votre tableau de bord Grafana.
Le nom d’utilisateur est admin.
Port Forward le Grafana Dashboard pour voir ce qui se passe:
$ export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=grafana,release=grafana" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace monitoring port-forward $POD_NAME 3000
Accédez à http: // localhost: 3000 dans votre navigateur. Vous devriez voir l’écran de connexion Grafana:
page de connexion grafanaPS
Connectez-vous avec le nom d’utilisateur et le mot de passe que vous avez de la commande précédente.

Ajouter un tableau de bord

Grafana a une longue liste de tableaux de bord prédéfinis ici .
Nous utiliserons celui-ci car il est assez complet dans tout ce qu’il suit.
Dans le menu de gauche, choisissez Tableaux de bord> Gérer> + Importer
grafana-menuPS
Dans l’entrée du tableau de bord Grafana.com, ajoutez l’ID du tableau de bord que nous voulons utiliser: 1860 et cliquez sur Charger.
Sur l’écran suivant, sélectionnez un nom pour votre tableau de bord et sélectionnez Prometheus comme source de données pour celui-ci. Cliquez ensuite sur Importer.
grafana-datasourcePS
Vous avez des métriques!
grafana-node-exporter-fullPS
La liste des métriques est longue. Parcourez-les et voyez ce qui est utile, copiez leurs structures et panneaux, et créez vos propres tableaux de bord pour les grands écrans du bureau!

Ajout de tableaux de bord? Automatisez-le.

Vous pouvez automatiser les ajouts de tableaux de bord de plusieurs manières.
De la même manière, nous avons ajouté une source de données en tant que carte de configuration, vous pouvez télécharger le json, l’ajouter dans une carte de configuration et activer le side-car du tableau de bord.
Dans votre fichier values.yml pour grafana, ajoutez les données du tableau de bord au side-car:
sidecar:
datasources:
enabled: true
label: grafana_datasource
enabled: true
label: grafana_dashboard
Cela demandera à Grafana de surveiller les cartes de configuration du tableau de bord.
Maintenant, appliquez cela pour créer le sidecar:
$ helm upgrade --install grafana stable/grafana 
 -f monitoring/grafana/values.yml 
 --namespace monitoring
Release "grafana" has been upgraded. Happy Helming!
[...]
Grafana portera désormais un side-car qui surveillera nos tableaux de bord.
Ensuite, nous allons créer une carte de configuration pour votre tableau de bord. Nous allons commencer avec le tableau de bord Présentation de Prometheus 2.0 situé ici .
Téléchargez le json pour le tableau de bord ici.
Ouvrez maintenant le fichier json et remplacez toutes les références $ {DS_THEMIS} par Prometheus. Cela remplace toutes les sources de données par le nom du vôtre.
Vous pouvez le faire rapidement en exécutant:
sed -i "" 's/${DS_THEMIS}/Prometheus/g' [your-file-name].json
Copiez maintenant le texte json et insérez-le dans une configmap comme suit:
# monitoring/grafana/prometheus-overview-dashboard-configmap.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-prometheus-overview-dashboard
namespace: monitoring
labels:
grafana_dashboard: '1'
data:
prometheus-dashboard.json: |-
[your-json-pasted-here] # Make sure it is pasted at this indent
Appliquez cela et Grafana devrait récupérer votre nouveau tableau de bord.
$ kubectl apply -f monitoring/grafana/prometheus-overview-dashboard-configmap.yml
Revenez à Grafana et votre tableau de bord devrait être visible maintenant.
kubernetes-dashboard-managementPS
Cependant, l’enregistrement de tableaux de bord pose un problème. Kubernetes ne peut stocker que 262 144 caractères par carte de configuration. Cela semble beaucoup, mais les tableaux de bord peuvent prendre beaucoup de place.
Par exemple, le tableau de bord que nous avons utilisé dans cet exercice ne correspond pas aux limites.
Existe-t-il une autre façon d’importer le tableau de bord?
Oui. Sans le tableau de bord side-car, vous pouvez ajouter vos tableaux de bord par défaut à partir de grafana.com
Dans votre fichier values.yml, supprimez le sidecar du tableau de bord:
sidecar:
datasources:
enabled: true
label: grafana_datasource
# Remove the below lines
- dashboards:
- enabled: true
- label: grafana_dashboard
Configurez ensuite un fournisseur de tableau de bord et des tableaux de bord en vous values.yml:
[sidecar-definition]
# Add the following
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards/default
dashboards:
default:
node-exporter:
gnetId: 1860
revision: 14
datasource: Prometheus
Réappliquez votre configuration de barre:
$ helm upgrade --install grafana stable/grafana 
 -f monitoring/grafana/values.yml 
 --namespace monitoring
Release "grafana" has been upgraded. Happy Helming!
[...]
Le tableau de bord de l’exportateur de nœuds sera désormais disponible dans votre instance Grafana.
Vous pouvez toujours télécharger vos propres tableaux de bord json. Mais vous devrez cloner tout le graphique, copier dans votre values.yml, placer votre json dans le répertoire des tableaux de bord et déployer le graphique de cette façon. (Voir ici .)
Un rappel, pour rendre le processus encore plus facile, j’ai enregistré tout cela dans un dépôt Github pour que tout le monde puisse l’utiliser. Prendre plaisir!

About Oussama ABAI

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Résoudre : *
28 ⁄ 14 =