Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack

Le site en exploitation étant parfois en panne, C'est simple, mais j'ai préparé un moniteur de site. (Il existe divers services de surveillance généreux dans le monde, y compris l'acquisition de métriques de serveur, mais cette fois, nous en faisons un moyen peu coûteux et facile de se connecter à Slack.)

Vérifiez l'état du site et informez Slack

Maintenant, écrivons le code pour vérifier le site. Le flux général consiste à vérifier l'état HTTP de l'URL spécifiée et à informer Slack s'il existe des sites autres que 200. (Au contraire, s'il n'y a pas de problème, Slack ne sera pas averti. Veuillez inclure l'URL de la page 404, etc. lors du test.) L'ensemble est le suivant.

health_checker.py


# -*- coding: utf-8 -*-
import requests
import json

#Spécifiez l'URL du site que vous souhaitez surveiller en tant que tableau
urls = ['https://www.rakuten.co.jp/']


def post_slack_h(c):
    #Décrire l'URL du Webhook obtenue en activant les Webhooks entrants dans Slack
    post_url = 'URL du Webhook Slack'
    requests.post(post_url, data=json.dumps({
        "username": "Regarder le site",
        'text': c
    }))


targets = []


def status_check(a="", b=""):
    content = ""
    for url in urls:
        try:
            s = requests.get(url, timeout=10).status_code
        except requests.exceptions.ReadTimeout:
            content += url + " Time out(10s)\n"
            targets.append(url)
        except requests.exceptions.ConnectionError:
            content += url + " Connection error\n"
            targets.append(url)
        else:
            if s == 200:
                content += url + " " + str(s) + "\n"
            else:
                content += url + " " + str(s) + "\n"
                targets.append(url)

    if not targets:
        print("All Green!!")
        pass
    else:
        post_slack_h(content)


if __name__ == '__main__':
    status_check()

Utiliser le webhook entrant pour notifier Slack

Veuillez consulter le support officiel ci-dessous pour connaître la procédure d'utilisation du webhook entrant. https://slack.com/intl/ja-jp/help/articles/115005265063

Préparez un fichier zip de code

Pour importer un package externe sur AWS Lambda, vous devez également télécharger le code du package externe. Les requêtes utilisées cette fois étant des packages externes, elles seront regroupées dans un fichier zip avec le code principal.

#Enregistrez le fichier du package dans le répertoire contenant le code principal
$ pip install requests -t ./
#Compresser dans un fichier zip
$ zip -r health_checker ./*

Cela créera un fichier zip appelé "health_checker.zip" qui contient le code et les packages externes.

Créer une fonction dans AWS Lambda

Cliquez sur le lien Lambda sur AWS pour accéder à l'écran de la liste des fonctions. Depuis cet écran, cliquez sur «Créer une fonction». スクリーンショット 2020-03-23 0.05.13.png

Sur l'écran de réglage initial au moment de la création, réglez comme suit

Facultatif: ** Créer à partir de zéro ** Nom de la fonction: ** Facultatif ** Exécution: ** Python 3.7 **

スクリーンショット 2020-03-23 0.06.59.png

Ensuite, téléchargez le fichier à partir de l'élément «Code de fonction» sur l'écran d'édition de fonction. Effectuez les réglages comme indiqué sur l'écran ci-dessous. Le point à prêter une attention particulière est le "gestionnaire". Le gestionnaire est l'endroit où vous spécifiez la fonction à exécuter dans Lambda. La manière de spécifier est ** nom de fichier (sans extension). Nom de fonction (dans le fichier spécifié) **. Donc, voici "health_checker.status_check".

スクリーンショット 2020-03-23 0.31.15.png

Paramètres d'exécution programmée

Le code créé jusqu'à présent est prêt à être exécuté sur Lambda. Enfin, définissez le code pour qu'il s'exécute régulièrement.

Cliquez sur "** + Ajouter un déclencheur **" dans l'écran d'édition des fonctions. (L'image ci-dessous est le formulaire rempli qui a déjà été ajouté) スクリーンショット 2020-03-23 0.42.36.png

Sur l'écran de création de déclencheur, définissez comme suit. Pour le planning, spécifions qu'il sera exécuté toutes les heures dans Cron. cron(0 0/1 * * ? *) Si vous changez la partie 0/1 en 0/2, 0/5, etc., vous pouvez changer l'intervalle à toutes les 2 heures ou toutes les 5 heures. スクリーンショット 2020-03-23 0.52.30.png

Remarques: contre-mesures pour l'erreur "expiration après 3,00 secondes"

Lors de la surveillance de plusieurs sites ou sites dont le chargement prend beaucoup de temps, le délai d'expiration par défaut de Lambda de 3 secondes peut être dépassé.

Pour éviter cela, ajustez le délai d'expiration à partir des "Paramètres de base" légèrement en dessous du milieu de l'écran d'édition de la fonction Lambda. スクリーンショット 2020-03-23 1.02.24.png

finalement

Pour ceux qui veulent être particuliers sur l'apparence des notifications Slack, la gamme d'expressions peut être élargie en utilisant le format de pièce jointe, etc.!

S'il vous plaît pour référence https://qiita.com/m-nakada/items/643909ca14f306a74999

Je vous remercie pour votre travail acharné

Recommended Posts

Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
Surveillance simple du serveur avec AWS Lambda (Python) et notification des résultats avec Slack
Exemple de notification Slack avec python lambda
Pages HTML dynamiques créées avec AWS Lambda et Python
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Surveillance du trafic avec Kibana, ElasticSearch et Python
[AWS] Associez Lambda et S3 à boto3
Connectez-vous à s3 avec AWS Lambda Python
Touchez AWS avec Serverless Framework et Python
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
LINE BOT avec Python + AWS Lambda + API Gateway
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Version Amazon API Gateway et AWS Lambda Python
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Créer une couche pour AWS Lambda Python dans Docker
Je veux AWS Lambda avec Python sur Mac!
Mettre TensorFlow dans une instance P2 avec pip3
Surveillance simple du serveur avec AWS Lambda (Python) et notification des résultats avec Slack
Exemple de notification Slack avec python lambda
Arrêter une instance avec une balise spécifique dans Boto3
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Exploitez TwitterBot avec Lambda, Python
Python et matériel - Utilisation de RS232C avec Python -
[Python] Scraping dans AWS Lambda
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Publiez sur Slack avec Python 3
[Python] Surveillance des dossiers avec watchdog
PyTorch avec AWS Lambda [importation Lambda]
Publiez régulièrement des images de Papillon sur Python + AWS Lambda + Slack
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
python avec pyenv et venv
Créez facilement une infrastructure réseau et EC2 avec AWS CDK Python
Fonctionne avec Python et R
Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
Créez une application de scraping avec Python + Django + AWS et modifiez les tâches
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Récapitulatif si vous utilisez AWS Lambda (Python)
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
[AWS] Créer une API avec API Gateway + Lambda
Grattage avec Python, Selenium et Chromedriver
Détection de visage avec Lambda (Python) + Rekognition
Grattage avec Python et belle soupe
Ecrire une fonction AWS Lambda en Python
Exécutez Python selon la planification sur AWS Lambda
Encodage et décodage JSON avec python