Aller au contenu

Kwatch un petit outil d'alerting pour Kubernetes

logo kubernetes

kwatch est un projet open source récent, qui permet de surveiller tous les événements dans votre cluster Kubernetes (K8s) comme les plantages de vos pods en cours d’exécution et à envoyer en temps réel des notifications sur vos canaux préférés (Slack, Discord, Teams, etc. ). Ça peut être utile dans le cas où vous n’avez pas mis en place Prometheus qui intègre un alertmanager, par exemple sur des clusters de recette.

Installation de Kwatch

Pour le moment je n’ai pas trouvé trace de chart Helm permettant d’installer kwatch. Ce serait un bon exemple pour notre billet sur le développement d’un chart Helm non ? Donc on va faire l’installation à la main.

Dans un premier temps récupérons la config de l’application :

Terminal window
curl -L https://raw.githubusercontent.com/abahmed/kwatch/v0.3.0/deploy/config.yaml -o config.yaml
kubectl apply -f config.yaml

Un petit tour pour voir quels sont les paramètres dont nous disposons :

apiVersion: v1
kind: Namespace
metadata:
name: kwatch
---
apiVersion: v1
kind: ConfigMap
metadata:
name: kwatch
namespace: kwatch
data:
config.yaml: |
maxRecentLogLines: <optional_number_of_lines>
alert:
slack:
webhook: <webhook_url>
pagerduty:
integrationKey: <integration_key>
discord:
webhook: <webhook_url>
telegram:
token: <token_key>
chatId: <chat_id>
teams:
webhook: <webhook_url>
rocketchat:
webhook: <webhook_url>
namespaces:
- <optional_namespace>

On voit qu’il est possible de définir deux paramètres généraux :

maxRecentLogLines : nombre de lignes des logs qui sont intégrés dans les messages. Si ce paramètre n’est pas défini alors toutes les lignes de logs seront récupérées

namespaces : Liste des namespace à surveiller. Si ce paramètre n’est pas défini alors tous les namespaces seront surveillés.

Ensuite dans la partie alert ne laissez que votre outil de communication collaboratif de votre choix. Je prendrais ici teams.

Avant d’appliquer la config de kWatch il faut donc créer le WebHook sur Teams.

Pour tester votre WebHook :

Terminal window
curl -H 'Content-Type: application/json' -d '{"@context": "http://schema.org/extensions","@type": "MessageCard", "text": "Hello World"}' <webhook_url>

Voici la config que je vais utiliser pour envoyer les erreurs sur Teams (changer l’url avec celle de votre webhook) :

apiVersion: v1
kind: Namespace
metadata:
name: kwatch
---
apiVersion: v1
kind: ConfigMap
metadata:
name: kwatch
namespace: kwatch
data:
config.yaml: |
maxRecentLogLines: 20
alert:
teams:
webhook: <webhook_url>

Allez on applique :

Terminal window
kubectl apply -f config.yaml
namespace/kwatch created
configmap/kwatch created

Maintenant installons l’application :

Terminal window
curl -L https://raw.githubusercontent.com/abahmed/kwatch/v0.3.0/deploy/deploy.yaml -o deploy.yaml
kubectl apply -f deploy.yaml
namespace/kwatch unchanged
clusterrole.rbac.authorization.k8s.io/kwatch created
serviceaccount/kwatch created
clusterrolebinding.rbac.authorization.k8s.io/kwatch created
deployment.apps/kwatch created

Test de kWatch

Nous allons faire un simple deployment qui tombera en erreur car son LivenessProbe sera faux :

apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: kuard
name: kuard
spec:
replicas: 1
selector:
matchLabels:
app: kuard
template:
metadata:
creationTimestamp: null
labels:
app: kuard
spec:
containers:
- name: kuard-amd64
image: gcr.io/kuar-demo/kuard-amd64:blue
ports:
- containerPort: 8080
livenessProbe:
failureThreshold: 5
httpGet:
path: /healthy1
port: 8080
initialDelaySeconds: 3
periodSeconds: 3

Vérifions que cela fonctionne :

Terminal window
kubectl get pod
NAME READY STATUS RESTARTS AGE
kuard-7fd98ddfbd-g779r 1/1 Running 2 (15s ago) 51s

Oui il restart !!!

Et quelques secondes plus tard ping !

Si vous voulez corriger l’erreur du LivenessProbe, il faut corriger le path en enlevant le 1. Ce qui donne :

Terminal window
kubectl edit deployments.apps kuard
livenessProbe:
failureThreshold: 5
httpGet:
path: /healthy
port: 8080
initialDelaySeconds: 3
periodSeconds: 3

kwatch kubernetes alerting

Plutôt prometteur. Donc à surveiller. Je l’ai ajouté dans ma liste de project github à surveiller.

Source