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

Fonctionnement de Grafana

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: 1Gi

Il 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-pvc

Dans 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: LoadBalancer

Sur 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: 3000

Dans 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é:

img.png

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.

img.png

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

img.png

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.

Mail test grafana

Importation des alertes dans grafana

Annexe alert

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