1.イメージの作成
以下のコマンドとDockerfileでPython3.7、requests、slackがインストールされたコンテナを作成します。
docker build --no-cache -t slack-requests:1.0 .
Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
&& apk --no-cache --virtual pydeps add gcc \
g++ \
python3-dev \
musl-dev \
cython \
libffi-dev \
&& pip install requests \
&& pip install slackclient \
&& apk del --purge pydeps
CMD ["/bin/sh"]
2. 以下のサンプルプログラムでrequestsとslackを活用して簡単なURLの生死監視・エラーチェックを行うことができます。
下記monitor_urls.pyの他に監視したいURLを保持したurls.txt(1行に1URLを書いてください)と通知時のメッセージヘッダーを保持したheader.txtを同じフォルダに用意します。
Botsの登録などはあらかじめ行い、TOKENを控えてください。
monitor_urls.py
import os
import requests
from requests.exceptions import ConnectionError
import slack
import json
header = ""
with open(os.environ['HEADER']) as fheader:
header = fheader.read()
with open(os.environ['URLS']) as furls:
urls = furls.readlines()
errors=[]
for url in urls:
url = url.rstrip('\n')
try:
result = requests.get(url, timeout=10)
if result.status_code >= 400:
errors.append({'status_code':result.status_code, 'reason':result.reason, 'url':url})
except ConnectionError as err:
errors.append({'status_code':-1, 'reason':'No response', 'url':url})
if len(errors) > 0:
client = slack.WebClient(token=os.environ['SLACK_TOKEN'])
response = client.chat_postMessage(
channel=os.environ['SLACK_CHANNEL'],
username=os.environ['SLACK_USER'], icon_emoji=os.environ['SLACK_ICON'],
text=header + json.dumps(errors, indent=2))
実行は以下のコマンドを実行します。slackへのトークン情報やurlを格納したファイルなどの情報は環境変数を指定して渡します。
docker run -e SLACK_TOKEN='<slack token>' \
-e SLACK_CHANNEL='#general' \
-e SLACK_USER='mybot' \
-e SLACK_ICON=':cat:' \
-e URLS='/tmp/query.txt'
-e HEADER='/tmp/header.txt'
-v `pwd`:/tmp -it slack-requests:1.0 /usr/local/bin/python3 /tmp/monitor_urls.py
0 件のコメント:
コメントを投稿