AWS Lambda + Python + Slack에서 사이트 모니터링 및 경고 알림

9258 단어 슬랙람다파이썬
운영중인 사이트가 가끔 떨어지는 경우가 있었기 때문에,
간단하지만 사이트 감시를 준비해 보았습니다.
(세상에는 서버의 메트릭스 취득을 포함한 까다로운 감시 서비스가 여러가지 있습니다만, 이번은 저비용이고 Slack과도 간단하게 연계할 수 있는 방법이라고 하는 위치에서 만들고 있습니다)

사이트의 상태를 확인하고 Slack에 알리기



그럼, 사이트 체크를 하는 코드를 써 갑니다.
대략적인 흐름으로서는, 지정된 URL의 HTTP status를 체크해, 200 이외의 사이트가 있으면, Slack에 통지하는 것이 되어 있습니다.
(반대로 문제가 없으면 Slack에게는 아무것도 통지되지 않습니다. 테스트 시에는 404페이지의 URL 등을 포함시켜 주세요.)
전체는 다음과 같습니다.

health_checker.py
# -*- coding: utf-8 -*-
import requests
import json

# 監視したいサイトのURLを配列で指定
urls = ['https://www.rakuten.co.jp/']


def post_slack_h(c):
    # SlackでIncoming Webhooksを有効にして取得したWebhook URLを記載
    post_url = 'SlackのWebhook URL'
    requests.post(post_url, data=json.dumps({
        "username": "サイト見守るくん",
        '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()


Slack에 대한 알림은 Incoming webhook을 사용합니다.



Incoming webhook 사용 절차는 아래 공식 지원을 확인하십시오.
htps : // s ck. 코 m/인 tl/쟈-jp/헤일p/아르치 ぇs/115005265063

코드 zip 파일 준비



AWS Lambda에서 외부 패키지를 가져오려면 외부 패키지의 코드도 함께 업로드해야 합니다.
이번 사용하고 있는 requests는 외부 패키지이므로, 메인 코드와 함께 zip 파일에 정리해 버립니다.
# メインコードのあるディレクトリにパッケージファイルを保存
$ pip install requests -t ./
# 圧縮してzipファイルにします
$ zip -r health_checker ./*

이제 코드와 외부 패키지를 내포한 "health_checker.zip"이라는 zip 파일이 완성됩니다.

AWS Lambda에서 함수 생성



AWS에서 Lambda 링크를 클릭하면 함수 목록 화면으로 이동합니다.
여기 화면에서 함수 만들기를 클릭합니다.


작성시의 초기 설정 화면에서는 다음과 같이 설정합니다.

옵션: 처음부터 만들기
함수 이름: 선택
런타임: Python 3.7



그런 다음 함수 편집 화면의 "함수 코드"라는 항목에서 파일을 업로드합니다.
설정은 다음 화면과 같이 합니다.
특히 주의하고 싶은 포인트는 "핸들러"입니다.
핸들러는 Lambda에서 실행할 함수를 지정하는 곳입니다.
지정하는 방법은 파일명 (확장자 없음).(지정한 파일내의) 함수명이 됩니다.
그래서 여기에서는 "health_checker.status_check"입니다.



정기 실행 설정



지금까지 작성한 코드를 Lambda에서 실행하기 전까지는 정돈했습니다.
마지막으로 코드를 정기적으로 실행하도록 설정합니다.

함수 편집 화면에서 [+ 트리거 추가]를 클릭합니다.
(아래 이미지는 이미 추가된 완성형입니다)


트리거 작성 화면에서는 다음과 같이 설정합니다.
스케줄은 Cron에서 1시간마다 실행이라는 지정을 해봅니다.cron(0 0/1 * * ? *)0/1 부분을 0/2, 0/5 등으로 하면 2시간마다, 5시간마다 간격을 변경할 수 있습니다.


비고:오류 「time out after 3.00 seconds」에 대한 대책



여러 사이트나 로드하는 데 시간이 오래 걸리는 사이트를 모니터링하면 Lambda 기본 설정 시간 초과 시간이 3초를 초과할 수 있습니다.

이를 피하기 위해 Lambda 함수 편집 화면의 중간보다 약간 아래의 "기본 설정"에서 시간 초과 시간을 조정하십시오.


마지막으로



Slack의 통지 내용의 외형에 구애되고 싶은 분은, attachment의 서식등도 활용하면 표현의 폭이 넓어집니다!

참고로 부디
htps : // 이 m / m 나카다 / ms / 643909 또는 14f306 a 74999

이상, 고맙습니다.

좋은 웹페이지 즐겨찾기