https://github.com/alenales/reporing
Отправка ежедневной отчетности в Telegram и настройка алертов.
https://github.com/alenales/reporing
alert python sql telegram-bot
Last synced: about 1 month ago
JSON representation
Отправка ежедневной отчетности в Telegram и настройка алертов.
- Host: GitHub
- URL: https://github.com/alenales/reporing
- Owner: AlenaLes
- Created: 2022-12-12T19:55:53.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-04T20:40:59.000Z (over 2 years ago)
- Last Synced: 2026-01-01T10:42:11.818Z (6 months ago)
- Topics: alert, python, sql, telegram-bot
- Language: Python
- Homepage:
- Size: 25.4 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Настройка отправки отчетности и алертов в telegram
## Краткое описание
Проект направлен на ежедневную отправку основных метрик в telegram в установленное время. Данные взяты из приложения, объединяющее ленту новостей и сообщений. Также в чат telegram направляются алерты с информацией по отклонениям метрик от нормы.
Стэк:
- JupiterHub
- Clickhouse
- Airflow
- Superset
- Python
## Ежедневная отчетность по ленте новостей
Подключаемся к базе данных и сразу зададим все условия для отправки итоговых отчетов в нужный чат. Отчеты за полный вчерашний день будут приходить каждый день в 11:00 по МСК.
```
#подключаемся к базе данных
connection = {
'host': 'https://clickhouse.lab.karpov.courses',
'database':'simulator_20221020',
'user':'student',
'password':'dpo_python_2020'
}
# Зададим параметры
default_args = {
'owner': 'a-lesihina', # Владелец операции
'depends_on_past': False, # Зависимость от прошлых запусков
'retries': 1, # Кол-во попыток выполнить DAG
'retry_delay': timedelta(minutes=1), # Промежуток между перезапусками
'start_date': datetime(2022, 11, 15) # Дата начала выполнения DAG
}
```
В файле Feed_report и Full_report можно посмотреть настройку графиков и способ подсчета метрик.
В результате ежедневно получаем следующий отчет:

## Ежедневная отчетность по ленте новостей и сообщениям
Данные для таблцы получаем тем же образом, что и на предыдущей отчетности.
В данной отчетности отражается информация:
- значения ключевых метрик за предыдущий день
- график с значениями метрик за предыдущие 7 дней
- отражены метрики: DAU, Просмотры, Лайки, CTR
В результате получаем следующую отчетность:



## Настройка алертов
Система с периодичностью в 15 минут проверяет ключевые метрики, такие,как: активные пользователи в ленте / мессенджере, просмотры, лайки, CTR, количество отправленных сообщений.
В случае обнаружения аномального значения, в чат направляется алерт и график.
Используем квартили для определения верхних и нижних допустимых значений.
```
def check_anomalys(df, metric,a=3, n=6):
df['25'] = df[metric].shift(1).rolling(n).quantile(0.25)
df['75'] = df[metric].shift(1).rolling(n).quantile(0.75)
df['iqr'] = df['75'] - df['25']
df['up'] = df['75'] + a*df['iqr']
df['low'] = df['25'] - a*df['iqr']
df['up'] = df['up'].rolling(n, center=True, min_periods=1).mean()
df['low'] = df['low'].rolling(n, center=True, min_periods=1).mean()
if df[metric].iloc[-1] < df['low'].iloc[-1] or df[metric].iloc[-1] > df['up'].iloc[-1]:
is_alert = 1
else:
is_alert = 0
return is_alert, df
```
После, с помощью SQL, объединяем данные в одну таблицу для создания единого таска и настраиваем внешний вид сообщения и графиков. Итоговое сообщение выглядит следующим образом:
