Grafana
Grafana est un metrics viewer, il permet de pouvoir visualiser des synoptiques via des data sources comme (Kafka, zookeeper, Prometheus, influxDB). Grafana peut faire office de serveur d’alerte. Néanmoins, il est possible de pouvoir interfacer Grafana avec un serveur d’alarme tel que Alert-manager. Et grafana permet de pouvoir créer ses propres synoptiques avec le format JSON.
Schéma de fonctionnement

Installation de Grafana
Création des fichiers de configuration pour kubernetes
Il faut créer un volume persistant afin de pouvoir y stocker les données de la base de données de grafana et les données que grafana archive.
pvc-grafana.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-pvc
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1GiIl faut créer un deployment pour Grafana. Afin de pouvoir y déployer le pod et l’attacher à tout ce qu’il faut.
deployment-grafana.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: grafana
name: grafana
namespace: monitoring
spec:
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
securityContext:
fsGroup: 472
supplementalGroups:
- 0
containers:
- name: grafana
image: grafana/grafana:10.4.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: http-grafana
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /robots.txt
port: 3000
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 2
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 3000
timeoutSeconds: 1
resources:
requests:
cpu: 250m
memory: 750Mi
volumeMounts:
- mountPath: /var/lib/grafana
name: grafana-pv
volumes:
- name: grafana-pv
persistentVolumeClaim:
claimName: grafana-pvcDans ce deployment, on précise à grafana d’exposer le service sur le port 3000. Ensuite, on précise le volume de Grafana qui sera monté dans le volume persistant que nous avons créé en amont. Puis, on précise l’image de déployment de grafana avec sa version. On précise aussi un livenessProbe afin de redémarrer Grafana. S’il y a un timeout de plus de 1000ms sur le port 3000.
Ensuite, il faut créer un service pour Grafana.
service-grafana.yaml
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: monitoring
spec:
ports:
- port: 3000
protocol: TCP
targetPort: 3000
selector:
app: grafana
sessionAffinity: None
type: LoadBalancerSur le service de Grafana nous exposons le port 3000 en TCP. Ce sera via ce port que l’ingress ai accès à notre service
Et maintenant, il faut configurer une ingress.
ingress.yaml
##Ingress yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana
namespace: monitoring
spec:
rules:
- host: grafana.innovalia.xyz
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 3000Dans cette ingress, nous définissons le record DNS qui pointe sur la VIP des load balancers du cluster kubernetes, qui est renseigné dans notre DNS se situant dans les DATACENTER 1 & 2.
La configuration d’ingress précise qu’il faut rediriger toutes les requêtes avec le domaine A grafana.innovalia.xyz. Sur le service grafana avec le port 3000.
Les élements déployé:

Une fois toute la configuration éffectué il suffit d’accéder via un navigateur web à l’ adresse https://grafana.innovalia.xyz
Administration
Première connexion
Lors de la première connexion, il faudra se connecter avec les identifiants de base de Grafana.

Une fois cela fait, vous devriez arriver sur le dashboard principale de Grafana.

Ensuite, il ne suffit plus que de rajouter des datasources et des dashboard.
Alerting
Nous avons décidé d’utiliser le serveur d’alerte intégré à Grafana. Pour cela, il faut configurer l’envoie de mail dans Grafana.
Il faut donc rajouter un SMTP dans la configuration de Grafana. Il faut le rajouter dans la configuration de deployement de kubernetes.
env:
- name: GF_SMTP_ENABLED
value: "true"
- name: GF_SMTP_HOST
value: "smtp.gmail.com:587"
- name: GF_SMTP_USER
value: "innovalia60@gmail.com"
- name: GF_SMTP_PASSWORD
value: "sjlu ************"
- name: GF_SMTP_SKIP_VERIFY
value: "true"
- name: GM_SMTP_FROM_ADDRESS
value: "innovalia60@gmail.com"
- name: GF_SMTP_FROM_NAME
value: "Grafana"Il faut rajouter ces variables d’environnement dans le container de Grafana. Pour que Grafana puisse envoyer des mails.

Importation des alertes dans grafana
Pour l’import des alertes, il a fallu réaliser une configmap avec les alertes.