GlitchTip sur Clever Cloud, une alternative à Sentry

glitchtip
Nous avons récemment découvert glichtip, qui est un outil de suivi des erreurs en open source. Glichtip est une excellente alternative à Sentry. Apprenez à la déployer sur Clever Cloud.

Chez Clever Cloud, nous aimons avoir un certain contexte sur le statut et les logs de nos applications. C’est pourquoi nous avons déployé un grand nombre d’outils pour obtenir une certaine observabilité. Beaucoup d’entre eux sont disponibles gratuitement pour nos clients (une vue des logs, une vue des métriques ou Grafana). Cependant, il existe des outils que nous utilisons en interne et qui pourraient être utiles à beaucoup. Nous avons récemment découvert glichtip, qui est un outil de suivi des erreurs en open source. Glichtip est une excellente alternative à Sentry et moins complexe à déployer. Nous ajouterons que Glichtip est compatible avec le SDK open source de Sentry.

Contexte

Nous avons utilisé Sentry pour analyser les erreurs provenant des logs de nos propres applications. Nous utilisions encore la version 9.1 jusqu’à ce que nous ayons trop de difficultés à la faire fonctionner. Nous devions alors faire une mise à jour ou trouver une nouvelle solution. Toutes les versions de Sentry postérieures à 9.1 nécessitent beaucoup plus de composants à déployer (comme Kafka, Snuba ou Clickhouse). Il est toujours possible de le déployer avec un script auto-hébergé. Nous voulions que chaque composant soit autonome en dehors de l’application principale de Sentry, cela signifiait que nous devions fournir une authentification à tous les composants. Ce n’était pas un gros problème, mais cela nous aurait pris plus de temps que prévu. Et en même temps, nous avons découvert un nouveau projet : Glitchtip.

Glitchtip

Tout a commencé par un tweet français, sur la découverte d’un nouvel outil : Glitchtip. Ce tweet disait que Glitchtip était compatible avec Sentry, gratuit et facile à auto-héberger, c’était donc évident que nous allions l’essayer !

Que fournit Glitchtip ? A l’intérieur de votre application, avec le SDK Sentry, vous transférez certains de vos logs d’erreurs. Ensuite, l’outil vous aide à suivre ces erreurs, à mieux comprendre quand une nouvelle version de l’outil crée de nouvelles erreurs, à les organiser ou à les rechercher… En un mot, c’est un outil très utile pour déboguer vos logiciels déployés.

Déploiement sur Clever Cloud

Configuration

Tout d’abord, nous allons télécharger le projet Docker Glitchtip et le personnaliser un peu pour correspondre à la façon dont les applications Docker sont exécutées dans Clever Cloud.

# Get latest Glitchtip release
git clone https://gitlab.com/glitchtip/glitchtip.git

# Go to the folder
cd glitchtip

Ensuite, ouvrez votre IDE de code préféré et ouvrez le Dockerfile :

# Remove
FROM glitchtip/glitchtip:latest

# And add instead:
FROM glitchtip/glitchtip:v1.12.2

COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Ici, nous allons mettre en place la dernière version de Glitchtip. Au moment où nous écrivions ce blog, il s’agissait de la v1.12.2. Vous pouvez les trouver ici. Nous mettons en place un nouveau script pour utiliser docker-entrypoint.sh qui nous permettra de démarrer soit l’application web Glitchtip soit le travailleur Glitchtip. Le docker-entrypoint.sh doit contenir le script suivant :

# docker-entrypoint.sh script:
#!/bin/bash

if [ "${START_TARGET}" = "worker" ]; then
  mkdir /tmp/sandboxed
	cd /tmp/sandboxed && nohup python -m http.server 8080 &
	/code/bin/run-celery-with-beat.sh
else
  /code/bin/start.sh
fi

# Don't forget to make it executable:
chmod u+x docker-entrypoint.sh

Déployer

Glitchtip est livré avec un Dockerfile, ce qui signifie que nous utiliserons un runtime docker. Il nécessite également une base de données PostgreSQL et un cache Redis, ce qui signifie que nous allons déployer un addon PostgreSQL et un addon Redis. L’ajout d’une option -o dans toutes les lignes de commande create peut être utilisé pour spécifier l’organisation à utiliser.

# Create the docker applications:
clever create --type docker glitchtip-web
clever create --type docker glitchtip-worker

# Create the PG addon
clever addon create postgresql-addon --plan s_sml --addon-version 14 glitchtip-postgres

# Link the addon
clever service link-addon glitchtip-postgres -a glitchtip-web
clever service link-addon glitchtip-postgres -a glitchtip-worker

# Create the Redis addon
clever addon create redis-addon --plan s_mono glitchtip-redis

# Link the addon
clever service link-addon glitchtip-redis -a glitchtip-web
clever service link-addon glitchtip-redis -a glitchtip-worker

Configurer

Pour l’instant nous allons configurer Glitchtip à travers des variables d’environnement. Comme nous utilisons plusieurs applications, nous allons déployer un fournisseur de configuration addon.

# Create a config addon:
clever addon create config-provider --plan std glitchtip-config

# Link the addon
clever service link-addon glitchtip-config -a glitchtip-web
clever service link-addon glitchtip-config -a glitchtip-worker

Maintenant que nous avons déployé un fournisseur d’addon de configuration, mettons à jour sa configuration. Pour ce faire, allez dans la console Clever Cloud et sélectionnez le glitchtip-config. Dans le panneau des variables, sélectionnez le mode expert et ajoutez la variable requise suivante, (remplissez leur valeur en fonction du commentaire fourni) :

# In the config addon provider add:
CC_DOCKER_EXPOSED_HTTP_PORT="8080"
# Copy paste here the POSTGRESQL_ADDON_URI environment variable of the glitchtip-postgres addon 
DATABASE_URL="postgresql://user:password@host:port/database"
# Provide a valid email server
EMAIL_URL="smtp://email:password@smtp_url:port"
# Copy paste here the application domain name of the glitchtip-web application instead (should look like: https://app-da7a7a7a-da7a-4242-7a7a-da7a42427a7a.cleverapps.io)
GLITCHTIP_DOMAIN="MY_APP_DOMAIN_NAME"
# Copy paste here the REDIS_ADDON's environment variable of the glitchtip-redis addon 
REDIS_HOST= < REDIS_HOST >
REDIS_PASSWORD= < REDIS_PASSWORD > 
REDIS_PORT= < REDIS_PORT >
# Generate your own custom secret key for Glitchtip
SECRET_KEY= < choose a secret key >

Notez que vous pouvez trouver plus d’informations sur la façon de configurer Glitchtip dans sa documentation.

Chaque application docker nécessite également une certaine configuration personnalisée :

#glitchtip-web custom env
clever env set CC_RUN_SUCCEEDED_HOOK "./manage.py migrate" -a glitchtip-web
clever env set START_TARGET "web" -a glitchtip-web
#glitchtip-worker custom env
clever env set START_TARGET "worker" -a glitchtip-worker

Déployer et exécuter

Maintenant que tout est prêt, il est temps de déployer et d’exécuter votre application Glitchtip.

# Remove initial git
rm -r .git 

# Init a git repository
git init

# Add your files
git add .

# Commit the changes
git commit -m "clever init and deploy"

# Deploy the application
clever deploy -a glitchtip-web
clever deploy -a glitchtip-worker

# Open Glitchtip in your browser
clever open -a glitchtip-web

Votre glitchtip est maintenant presque prêt à être utilisé. Une dernière action est nécessaire : vous devez créer un super utilisateur pour administrer Glitchtip.

# Connect in SSH to your Clever application:
clever ssh -a glitchtip-web

# Run 
./manage.py createsuperuser

Bon travail ! Vous devriez maintenant avoir un accès à la page d’administration de glitchtip (disponible sur le path /admin de votre application). Vous pouvez alors créer des utilisateurs ou vous connecter à votre réseau/application sociale préférée pour authentifier vos utilisateurs. Vous trouverez plus d’informations sur la documentation. Vous pouvez définir votre propre keycloak sur Clever Cloud et l’utiliser pour vous connecter à Glitchtip !

Connecter Glitchtip à une application

Nous allons réutiliser l’exemple d’application akka que nous avons utilisé pour notre blogpost exemple scala. Et nous verrons ensuite comment nous pouvons transmettre nos propres logs d’erreurs à Glitchtip.

Créer un projet Glitchtip

La première étape sera de se connecter avec le nouvel utilisateur root (ou tout utilisateur Glitchtip que vous avez créé ou lié à un réseau/application sociale). Glitchtip vous demandera de créer votre organisation. Dans notre cas, nous avons choisi clever-cloud. Comme nous voulons surveiller les logs d’erreur de notre application, nous devrons créer un nouveau projet directement dans l’interface de Glitchtip. Appelons-le “myakka” et créons l’équipe “Scala-dev” qui lui est associée.

Une fois que ce projet est créé, vous serez en mesure d’obtenir un DSN. Nous le chargerons plus tard comme variable d’environnement pour l’application akka.

Créer un Token Glitchtip

Allez dans Profile/auth token et créez un nouveau jeton Glitchtip avec au moins les droits suivants : read, write et releases. Sauvegardez-le pour plus tard.

Configurer l’application d’exemple AKKA sur Clever Cloud

La première étape consiste à déployer l’application AKKA sur Clever Cloud comme mentionné dans le blogpost scala exemple. Clonez le projet, et au lieu de la branche principale, utilisez la branche blogpost-sentry.

# Clone Clever Cloud akka example project:
git clone https://github.com/CleverCloud/scala-akka-http-postgres-example.git

# Checkout blogpost-sentry
git checkout blogpost-sentry

Dans cette branche, nous mettons à jour l’application pour se connecter à Sentry. Ensuite, nous envoyons seulement les logs HTTP du serveur de départ avec un statut personnalisé (succès ou échec). Voici le code que nous utilisons dans la branche blogpost-sentry :

# Register Sentry
Sentry.init(sentryConfig.sentryDsn)

# Send a message to Sentry with a tag
Sentry.getContext().addTag("status", status)
Sentry.capture(message)
Sentry.getContext().clear()

De plus, vous devez ajouter un fichier .sentryclirc. Ce fichier doit contenir :

[defaults]
url=GLITCHTIP_APP_DOMAIN_NAME
org=clever-cloud
project=myakka

Configurer les variables d’environnement de Glitchtip

Utilisez le script post_build.sh comme CC_POST_BUILD_HOOK. Ceci lancera le sbt flywayMigrate obligatoire ainsi que la création d’une nouvelle version sur Sentry (basée sur le commit ID).

# Set CC_POST_BUILD_HOOK
clever env -a myakka set CC_POST_BUILD_HOOK "./post_build.sh"

Vous devez également définir le jeton Glitchtip et le dsn Glitchtip comme variables d’environnement :

# Set Glitchip required env variables
clever env -a myakka set SENTRY_AUTH_TOKEN < custom_glitchtip_token >  
clever env -a myakka set SENTRY_DSN < custom_glitchtip_dsn >  

Déployer l’application

Vous pouvez maintenant déployer le projet myakka :

# Deploy myakka
clever deploy

Essayez-la

Dès que c’est fait, vous devriez voir votre première issue sur Glitchip ! C’est tout, vous pouvez maintenant ajouter toutes les applications que vous voulez à Glitchtip et profiter de cet outil pour centraliser les logs et erreurs de vos applications. Si vous êtes habitué à ce produit ou si vous venez de l’essayer, n’hésitez pas à nous faire part de vos retours sur Twitter.

Blog

À lire également

Clever Cloud et Vates : Deux champions français unissent leurs forces pour créer des solutions cloud complètes et autonomes

Nantes et Grenoble, le 23 mai 2024 - Clever Cloud et Vates annoncent aujourd'hui un partenariat visant à renforcer l'autonomie stratégique du cloud en France et en Europe.
Presse

La Chaire Valeurs et Politiques des Informations Personnelles de l’Institut Mines-Télécom accueille Clever Cloud parmi ses mécènes

La Chaire Valeurs et Politiques des Informations Personnelles (VP-IP) de l’Institut Mines-Télécom mène ses travaux de recherche autour des enjeux liés au traitement des données personnelles, aux identités numériques et à la souveraineté, dans un contexte de régulation européenne.
Presse

Clever Cloud lance “UP”, un programme généreux dédié aux startups lors de VivaTech

Nantes, France – 20 mai 2024 – Clever Cloud, créateur français de solutions de déploiement et d’hébergement en mode PaaS (Platform as a Service) annonce le lancement de son nouveau programme d’accompagnement destiné aux startups, nommé « UP ». Cette initiative sera dévoilée ce mercredi lors de l'événement phare de l'innovation technologique, VivaTech, à Paris.
Presse