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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *