Je me suis demandé s'il y avait une bibliothèque pratique pour notifier Slack lorsqu'une erreur se produisait dans Django, alors j'ai essayé de l'utiliser. Finalement, je prévois d'agréger les journaux avec Fluentd et de les notifier, mais je le développe actuellement, mais si je peux l'implémenter rapidement dans la situation où il est ouvert au public, j'ai l'impression que c'est la voie à suivre pour le moment. Est l'introduction de.
↓ C'est django-slack. http://django-slack.readthedocs.io/
Grosso modo, les deux suivants.
Donc, cette fois, je vais l'utiliser pour ce dernier.
Obtenez un jeton pour publier sur Slack. Que vous utilisiez le jeton de test ou que vous définissiez correctement les bots, cela dépend de vous. https://api.slack.com/custom-integrations/legacy-tokens https://slack.com/apps/A0F7YS25R-bots
install
pip install django-slack
Modifiez simplement les paramètres.
Ajout de django_slack
à INSTALLED_APPS
INSTALLED_APPS = [
# ... some apps
'django_slack',
]
Ajoutez SlackExceptionHandler aux gestionnaires django logger.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
},
'handlers': {
'slack_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django_slack.log.SlackExceptionHandler',
},
},
'loggers': {
'django': {
'level': 'ERROR',
'handlers': ['slack_admins'],
},
},
}
require_debug_false
sur des filtres.Spécifiez le jeton en option.
SLACK_TOKEN = 'SOME_TOKEN'
SLACK_CHANNEL = '#PUBLIC_CHANNEL'
SLACK_USERNAME = 'USER-NAME'
SLACK_ICON_EMOJI = ':bangbang:'
SLACK_FAIL_SILENTLY = True
Si vous définissez SLACK_FAIL_SILENTLY
sur False et que vous faites une erreur en spécifiant le canal et qu'une erreur se produit dans SlackExceptionHandler
," Une erreur s'est produite "->" Notifier slack "->" Une erreur s'est produite "->" Notifier slack " Il tombe dans une boucle infinie.
Voir ci-dessous pour d'autres options. http://django-slack.readthedocs.io/#configuration
Exécutez ce qui suit avec python manage.py shell
.
from django_slack import slack_message
slack_message('django_slack/exception.slack', {'text': 'hoge'})
Si «hoge» est posté sur le canal spécifié, il réussit.
Au fait, ajoutez SLACK_BACKEND = 'django_slack.backends.UrllibBackend'
pour vérifier la communication dans l'environnement DEBUG = True.
Si la vérification de la communication échoue, définissez SLACK_FAIL_SILENTLY
sur True
et une erreur s'affichera.
Django==1.11 django-slack==5.8.0
J'aime la facilité d'utilisation.
Cependant, si vous définissez SLACK_FAIL_SILENTLY
sur True, ce sera vraiment silencieux, mais au moins je veux que vous crachiez le journal avec le logger ('django_slack').
https://github.com/lamby/django-slack/blob/24ce48de96f561518e81aa3adef89c4f5f287707/django_slack/api.py#L132
Fondamentalement, je ne pense pas qu'il sera utilisé dans un environnement de production, mais si vous l'utilisez dans un environnement de production, il semble qu'il existe également un backend Celery, il semble donc préférable d'utiliser le traitement asynchrone là-bas.
c'est tout!
Recommended Posts