Site-Überwachung und Alarmbenachrichtigung mit AWS Lambda + Python + Slack

Da die in Betrieb befindliche Baustelle gelegentlich außer Betrieb war, Es ist einfach, aber ich habe einen Site-Monitor vorbereitet. (Es gibt verschiedene großzügige Überwachungsdienste auf der Welt, einschließlich der Erfassung von Servermetriken, aber diesmal machen wir es zu einer kostengünstigen und einfachen Möglichkeit, eine Verbindung mit Slack herzustellen.)

Überprüfen Sie den Site-Status und benachrichtigen Sie Slack

Schreiben wir nun den Code, um die Site zu überprüfen. Der allgemeine Ablauf besteht darin, den HTTP-Status der angegebenen URL zu überprüfen und Slack zu benachrichtigen, wenn andere Websites als 200 vorhanden sind. (Im Gegenteil, wenn es kein Problem gibt, wird Slack nicht benachrichtigt. Bitte geben Sie beim Testen die URL von Seite 404 usw. an.) Das Ganze ist wie folgt.

health_checker.py


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

#Geben Sie die URL der Site an, die Sie als Array überwachen möchten
urls = ['https://www.rakuten.co.jp/']


def post_slack_h(c):
    #Beschreiben der Webhook-URL, die durch Aktivieren von Incoming Webhooks in Slack erhalten wird
    post_url = 'Slack Webhook URL'
    requests.post(post_url, data=json.dumps({
        "username": "Beobachten Sie die Website",
        '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()

Verwenden Sie den eingehenden Webhook, um Slack zu benachrichtigen

Bitte überprüfen Sie den offiziellen Support unten für das Verfahren zur Verwendung von Incoming Webhook. https://slack.com/intl/ja-jp/help/articles/115005265063

Bereiten Sie eine Zip-Datei mit Code vor

Um ein externes Paket in AWS Lambda zu importieren, müssen Sie auch den Code des externen Pakets hochladen. Da die Anfragen, die wir dieses Mal verwenden, externe Pakete sind, werden wir sie zusammen mit dem Hauptcode in einer Zip-Datei zusammenstellen.

#Speichern Sie die Paketdatei in dem Verzeichnis, das den Hauptcode enthält
$ pip install requests -t ./
#In eine Zip-Datei komprimieren
$ zip -r health_checker ./*

Dadurch wird eine Zip-Datei mit dem Namen "health_checker.zip" erstellt, die den Code und externe Pakete enthält.

Erstellen Sie eine Funktion in AWS Lambda

Durch Klicken auf den Lambda-Link in AWS gelangen Sie zum Funktionslistenbildschirm. Klicken Sie in diesem Bildschirm auf "Funktion erstellen". スクリーンショット 2020-03-23 0.05.13.png

Stellen Sie auf dem Bildschirm für die Ersteinstellung zum Zeitpunkt der Erstellung Folgendes ein

Optional: ** Von Grund auf neu erstellen ** Funktionsname: ** Optional ** Laufzeit: ** Python 3.7 **

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

Laden Sie anschließend die Datei aus dem Element "Funktionscode" auf dem Funktionsbearbeitungsbildschirm hoch. Nehmen Sie die Einstellungen wie auf dem Bildschirm unten gezeigt vor. Der Punkt, auf den besonders geachtet werden muss, ist der "Handler". Im Handler geben Sie die Funktion an, die in Lambda ausgeführt werden soll. Die Art der Angabe ist ** Dateiname (ohne Erweiterung). Funktionsname (in der angegebenen Datei) **. Hier ist es also "health_checker.status_check".

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

Geplante Ausführungseinstellungen

Der bisher erstellte Code kann auf Lambda ausgeführt werden. Stellen Sie schließlich den Code so ein, dass er regelmäßig ausgeführt wird.

Klicken Sie im Funktionsbearbeitungsbildschirm auf "** + Trigger hinzufügen **". (Das Bild unten ist das ausgefüllte Formular, das bereits hinzugefügt wurde.) スクリーンショット 2020-03-23 0.42.36.png

Stellen Sie auf dem Bildschirm zum Erstellen des Triggers Folgendes ein. Geben Sie für den Zeitplan an, dass er stündlich in Cron ausgeführt wird. cron(0 0/1 * * ? *) Wenn Sie den 0/1-Teil auf 0/2, 0/5 usw. ändern, können Sie das Intervall auf alle 2 Stunden oder alle 5 Stunden ändern. スクリーンショット 2020-03-23 0.52.30.png

Anmerkungen: Gegenmaßnahmen für den Fehler "Zeitüberschreitung nach 3,00 Sekunden"

Bei der Überwachung mehrerer Sites oder Sites, deren Laden lange dauert, kann die Standardzeitüberschreitung von Lambda von 3 Sekunden überschritten werden.

Um dies zu vermeiden, passen Sie die Zeitüberschreitung unter "Grundeinstellungen" etwas unterhalb der Mitte des Bearbeitungsbildschirms für die Lambda-Funktion an. スクリーンショット 2020-03-23 1.02.24.png

Schließlich

Für diejenigen, die sich besonders mit dem Erscheinungsbild von Slack-Benachrichtigungen befassen möchten, kann der Ausdrucksbereich mithilfe des Anhangsformats usw. erweitert werden!

Bitte als Referenz https://qiita.com/m-nakada/items/643909ca14f306a74999

Danke für deine harte Arbeit

Recommended Posts

Site-Überwachung und Alarmbenachrichtigung mit AWS Lambda + Python + Slack
Einfache Serverüberwachung mit AWS Lambda (Python) und Ergebnisbenachrichtigung mit Slack
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Dynamische HTML-Seiten mit AWS Lambda und Python
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
[Python x Zapier] Erhalten Sie Warninformationen und benachrichtigen Sie mit Slack
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Verkehrsüberwachung mit Kibana, ElasticSearch und Python
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Berühren Sie AWS mit Serverless Framework und Python
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
LINE BOT mit Python + AWS Lambda + API Gateway
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
Amazon API Gateway und AWS Lambda Python-Version
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Ich möchte Lambda mit Python auf Mac AWS!
Setzen Sie TensorFlow mit pip3 in die P2-Instanz
Einfache Serverüberwachung mit AWS Lambda (Python) und Ergebnisbenachrichtigung mit Slack
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Stoppen Sie eine Instanz mit einem bestimmten Tag in Boto3
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Betreiben Sie TwitterBot mit Lambda, Python
Python und Hardware-Verwenden von RS232C mit Python-
[Python] Scraping in AWS Lambda
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Post to Slack mit Python 3
[Python] Ordnerüberwachung mit Watchdog
PyTorch mit AWS Lambda [Lambda-Import]
Veröffentlichen Sie regelmäßig Bilder von Papillon auf Python + AWS Lambda + Slack
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Python mit Pyenv und Venv
Erstellen Sie mit AWS CDK Python ganz einfach Netzwerkinfrastruktur und EC2
Funktioniert mit Python und R.
Bearbeiten von Kintondaten mit dem Python & C Data ODBC-Treiber von AWS Lambda
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
Bereiten Sie eine Umgebung für die Verwendung von OpenCV und Pillow mit AWS Lambda vor
Ich habe ChatOps mit Slack x API Gateway x Lambda (Python) x RDS ausprobiert
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
Zusammenfassung bei Verwendung von AWS Lambda (Python)
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
[AWS] API mit API Gateway + Lambda erstellen
Scraping mit Python, Selen und Chromedriver
Gesichtserkennung mit Lambda (Python) + Erkennung
Kratzen mit Python und schöner Suppe
Schreiben Sie die AWS Lambda-Funktion in Python
Führen Sie Python planmäßig auf AWS Lambda aus
JSON-Codierung und -Decodierung mit Python