Exploitez vos logs sans douleur – Partie 2
Comment installer Sentry :
Pour ce guide, nous allons utiliser la dernière version stable en date, la 7.1.4.
L’installation sera réalisée sous CentOS 6.5
Cette version nécessite les logiciels suivants:
- Python 2.7 (sous CentOS 6 il faudra la compiler)
- Virtualenv
- Une base de données (MySQL ou PostgresSQL)
Python :
On va commencer par compiler Python (la dernière 2.7.9 tant qu’a faire).
Pour cela il faut installer les dépendances suivantes
yum groupinstall "Development tools" yum -y zlib-devel bzip2-devel openssl-devel ncurses-devel
On télécharge et on compile
cd /opt wget http://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz --no-check-certificate tar xvf Python-2.7.9.tar.xz cd Python-2.7.9 ./configure --prefix=/usr/local --enable-shared make && make altinstall
altinstall: ne pas utiliser install mais bien altinstall. install va écraser votre installation actuelle de python (2.6.6) et tout péter. altinstall va installer votre nouvelle version de python dans un autre répertoire.
Sous CentOS, il faut ajouter le chemin ou est installé votre python dans le dossier ld.so.conf.d
vi /etc/ld.so.conf.d/python2.7.conf /usr/local/lib
On ajoute une ligne dans le fichier
/usr/local/lib
Puis on exécute la commande suivante
ldconfig
Virtualenv:
On va ensuite créer un virtualenv, un environnement virtuel qui contiendra Sentry, un exécuteur python ainsi que toutes ses dépendances, le tout complètement isolé du reste du système.
On installe virtualenv (la version de CentOS est pour Python 2.6, mais ça ne posera pas de problème pour créer notre virtualenv avec un Python 2.7, vous verrez)
yum install -y python-virtualenv
Puis on crée notre virtualenv
cd /var/www/html virtualenv --python=/usr/local/bin/python2.7 sentry_env
On charge notre virtualenv fraichement créé
source /var/www/html/sentry_env/bin/activate
Sentry:
On installe Sentry, on a le choix entre la version MySQL et la version PostgreSQL. L’équipe de Sentry recommande PostgreSQL mais ayant un serveur avec un MySQL déjà configuré, j’ai fait fi de cette recommandation.
Si vous utilisez MySQL il vous faudra les bibliothèques de développement MySQL pour pouvoir compiler le connecteur.
yum install -y mysql-devel
# Pour une installation avec MySQL pip install sentry[mysql]
# Pour une installation avec PostgreSQL pip install sentry[postgres]
Si vous comptez utiliser Sentry en production, il est fortement conseillé de le coupler avec Redis et Memcached (éventuellement en cluster pour les applications générant un très fort trafic)
On installe donc les dépendances requises
yum -y install redis memcached
On va maintenant générer un template de fichier de configuration pour Sentry
sentry init /etc/sentry.conf.py
On configure notre instance de Sentry (ici avec du https)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '<nom_db>', 'USER': '<user>', 'PASSWORD': '<password>', 'HOST': '', 'PORT': '', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': ['127.0.0.1:11211'], } } CELERY_ALWAYS_EAGER = False BROKER_URL = 'redis://localhost:6379' SENTRY_BUFFER = 'sentry.buffer.redis.RedisBuffer' SENTRY_REDIS_OPTIONS = { 'hosts': { 0: { 'host': '127.0.0.1', 'port': 6379, } } } SENTRY_URL_PREFIX = 'https://<votre_url_sentry>' SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') USE_X_FORWARDED_HOST = True SENTRY_WEB_HOST = 'localhost' SENTRY_WEB_PORT = 9000 SENTRY_WEB_OPTIONS = { 'workers': 3, 'limit_request_line': 0, 'secure_scheme_headers': {'X-FORWARDED-PROTO': 'https'}, }
On crée la base de données qui va accueillir Sentry.
Attention votre base MySQL doit utiliser le moteur InnoDB pour fonctionner avec Sentry, sinon vous aurez des erreurs quand vous essaierez de créer les tables.
mysql -u root -p
On force l’utilisation d’InnoDB
# Pour MySQL < 5.6 set GLOBAL storage_engine='InnoDb'; #Pour MySQL >= 5.6 SET GLOBAL default_storage_engine = 'InnoDB';
Votre base de données doit utiliser le charset UTF-8
CREATE DATABASE sentry CHARACTER SET utf8 COLLATE utf8_general_ci;
On lance la création des tables
sentry --config=/etc/sentry.conf.py upgrade
On crée un utilisateur et on lui assigne ses droits
sentry --config=/etc/sentry.conf.py createsuperuser sentry --config=/etc/sentry.conf.py repair --owner=<username>
Pour que l’application soit gérée comme un service et démarre en même temps que la machine on va utiliser supervisord. On peux également passer par circus (plus moderne, plus performant).
yum install -y supervisor
On le configure
[supervisord] nodaemon = false [program:sentry-web] directory=/var/www/html/sentry_env/ command=/var/www/html/sentry_env/bin/sentry --config=/etc/sentry.conf.py start http autostart=true autorestart=true redirect_stderr=true [program:sentry-worker] directory=/var/www/html/sentry_env/ command=/var/www/html/sentry_env/bin/sentry --config=/etc/sentry.conf.py celery worker -B autostart=true autorestart=true redirect_stderr=true killasgroup=true
On démarre le service
service supervisord start
On configure apache
vim /etc/httpd/conf.d/sentry.conf
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ProxyPass /sentry http://localhost:9000 ProxyPassReverse / http://localhost:9000/ ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" env=HTTPS
Voila vous devriez pouvoir vous connecter à l’adresse Sentry que vous avez spécifiée.