[PYTHON] J'ai essayé django-slack

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.

Qu'est-ce que django-slack?

↓ C'est django-slack. http://django-slack.readthedocs.io/

Que puis-je faire

Grosso modo, les deux suivants.

  1. Vous pouvez envoyer un message à slack avec slack_message ().
    http://django-slack.readthedocs.io/#richly-formatted-messages
  2. Publiez un message à slack lorsqu'une exception se produit.
    http://django-slack.readthedocs.io/#logging-exceptions-to-slack

Donc, cette fois, je vais l'utiliser pour ce dernier.

Préparation

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

la mise en oeuvre

Modifiez simplement les paramètres.

Ajout de INSTALLED_APPS

Ajout de django_slack à INSTALLED_APPS

INSTALLED_APPS = [
    # ... some apps
    'django_slack',
]

paramètres de l'enregistreur

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'],
        },
    },
}

Options de réglage

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

Confirmation de la communication

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.

version

Django==1.11 django-slack==5.8.0

Impressions

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

J'ai essayé django-slack
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé le moulin à papier
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'exécuter pymc
J'ai essayé le spoofing ARP
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé le deep learning
J'ai essayé AWS CDK!
J'ai essayé d'utiliser Ipython
J'ai essayé de déboguer.
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé de déplacer EfficientDet
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow
J'ai essayé Auto Gluon
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé AWS Iot
J'ai essayé l'optimisation bayésienne!
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé les réseaux d'itération de valeur
J'ai essayé de gratter avec Python
J'ai essayé la classification d'image d'AutoGluon
J'ai essayé d'apprendre PredNet
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé le clustering avec PyCaret
J'ai essayé d'utiliser BigQuery ML
J'ai essayé "K-Fold Target Encoding"
J'ai essayé d'implémenter PCANet
[J'ai essayé] Nand2 Tetris Chapitre 6
J'ai essayé la bibliothèque changefinder!
J'ai essayé l'extension C de Python