DockerとTelegramBotを使用して組織の作業を監視する
多くの人は、ウェブサイトや店舗などに突然何かが起こったかどうか、特にお金、時間、労力を必要としない場合に知りたいと思っています。しかし、これは非常に簡単です:かなりの自由時間を費やした後、データベースに定期的にクエリを実行し、それらに基づいていくつかのメトリックを計算し、それらをしきい値と比較するDockerコンテナを作成します。しきい値を超えた場合は、関係者に通知してください。
最初のステップは、ボットを起動することです。あなたは5分でこれを行う方法をグーグルすることができます。たとえば、最近ここに記事がありました。また、複数の人がメッセージを受信することを計画している場合、ボットはグループに追加するための許可が必要です。これを行うには、ボットを作成するときに、BotFatherコマンド「/ setjoingroups」を記述する必要があります。その後、実際には、グループを作成し、ボットとメッセージの受信に関心のあるすべての人を追加する必要があります。
pytelegrambotapi , CHAT_ID , , , , «/start». . , , , CHAT_ID :
import logging
import telebot
bot = telebot.TeleBot(TOKEN)
chat_id = CHAT_ID
logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, ', /start')
bot.polling()
:
bot.send_message(chat_id=CHAT_ID, text=TEXT)
, . , . , , - .
, . pymysql. :
import datetime
import os
from contextlib import closing
import pymysql
from pymysql.cursors import DictCursor
from constants import *
class Monitor:
def __init__(self):
self.starttime = datetime.datetime.today()
self.port = 3306
self.host = os.environ.get('MYSQL_HOST')
self.user = os.environ.get('USER')
self.password = os.environ.get('MYSQL_PWD')
self.db_name = 'backend'
def sms_log(self):
with closing(pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password,db=self.db_name, charset='utf8', cursorclass=DictCursor)) as connection:
end_time = datetime.datetime.today()
start_time = end_time - datetime.timedelta(minutes=TIME_PERIOD)
st_time = start_time.strftime('%Y-%m-%d %H:%M:%S')
end_time = end_time.strftime('%Y-%m-%d %H:%M:%S')
with connection.cursor() as cursor:
query = f"SELECT COUNT(*) FROM sms_log WHERE created_at BETWEEN '{st_time}' AND '{end_time}'"
cursor.execute(query)
for row in cursor:
result = row['COUNT(*)']
if result < SMS_COUNT_ALERT:
return f" {TIME_PERIOD} \
f"{start_time.strftime('%H:%M')} " \
f" {result} , : {SMS_COUNT_ALERT}"
, , , . :
def main():
bot = telebot.TeleBot(TOKEN)
chat_id = CHAT_ID
logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG)
monitor = Monitor()
while True:
"""
15 (TIME_PERIOD) .
"""
result = monitor.sms_log()
if result:
bot.send_message(
chat_id=chat_id,
text=result,
disable_notification=not monitor.is_day()
)
. . .
sleep(TIME_PERIOD*60)
, , :
disable_notification=not monitor.is_day()
@staticmethod
def is_day():
if 9 <= (datetime.datetime.today()).hour <= 23:
return True
else:
return False
.
, , - , .
:
FROM python:3.6-alpine
COPY requirements.txt requirements.txt
RUN python -m venv venv
RUN venv/bin/pip install -r requirements.txt
RUN apk add bash
COPY src src
COPY .gitignore .gitignore
COPY boot.sh boot.sh
CMD ["bash", "./boot.sh"]
requirements.txt:
PyMySQL==1.0.2
pyTelegramBotAPI==3.7.6
boot.sh:
#!/bin/sh
source venv/bin/activate
exec python ./src/bot.py
bashのインストールをスキップして、に置き換えることができます。/bin/sh
デバッグするときは慣れていますが、戦闘条件では不要です。新しい画像を選択することもできますが、これで問題ありません。
今、あなたはそれを構築する必要があります:
docker build -t bot:latest .
そして、コマンドでデータベースに接続するための環境変数を渡すことによって実行します。
docker run --name bot -d -e USER= -e MYSQL_HOST= -e \ MYSQL_PWD= bot:latest
そして、あなたはメッセージを待つことができます。まあ、または待たないでください、それはすべてメトリックに依存します。最大半日営業。ただし、それらを使用することで、システムを24時間監視できます。ほとんど無料です。
次に、たとえば、計算されたメトリックのZabbixまたはログ、グラフ、レポートなどの同様のツールへの転送を構成できます。