Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Простейший скрипт для отправки сообщений о нагрузке в Telegram : Oracle

22.12.2024 9:00


16.08.2024 12:49
У меня есть вьюшка, с помощью которой я в Zabbix передаю сигнал о появившейся в базе нештатной нагрузке, которой считается любая нагрузка от неизвестного модуля, длящаяся больше 3 минут.
SQL код:
CREATE OR REPLACE FORCE EDITIONABLE VIEW "ZABBIX"."BORED_SESS" ("MODULE") AS 
  select '<b>Пользователь : </b>'||username||chr(10)||'<b>С терминала : </b>'||terminal||'('||machine||'/'||osuser||')'||chr(10)||'<b>Программа : </b>'||program||'('||module||'/'||action||')'||chr(10)||'<b>Ожидание : </b>'||event||chr(10)||'<b>Время ожидания : </b>'||last_call_et||' сек.'||chr(10)
      FROM sys.v_$session 
     WHERE     module NOT IN ('uploader',
                                'Balance',
                                'DBMS_SCHEDULER',
                                'AGENT')
           AND TYPE = 'USER'
           AND status = 'ACTIVE'
           AND last_call_et > 180; 
К сожалению, заббикс не очень богат вариантами отправки каких-то достаточно длинных сообщений, особенно многострочных, в связи с чем я накидал простейший скрипт, ругающийся юзерам о том, что на самом деле происходит. Сначала хотел разделять параметры в баше, но возни с разделителями оказалось сильно больше, чем если сразу собирать шаблон сообщения прямо запросом. Вот, не ругайте, это заготовка для реализации каких-то будущих фантазий. Поставил в крон раз в 5 минут.
Код:
#!/bin/bash
. /home/oracle/.bash_profile
send_telegram_message() {
  local bot_token="$1"
  local chat_id="$2"
  local message="$3"
  local url="https://api.telegram.org/bot${bot_token}/sendMessage"
  curl -s -x 'http://proxy:3128' -X POST $url -d chat_id=$chat_id -d parse_mode='HTML' -d text="$message"
}

BOT_TOKEN="xxxxx"
CHAT_ID="-100xxxxxxxxxxxx"

tmpfile=/tmp/sess_id.tmp

export NLS_LANG=AMERICAN_AMERICA.UTF8
sqlplus -S /nolog <<EOF > /tmp/sess_id.tmp
connect / as sysdba
set head off
set pages 0
set linesize 1000
select * from zabbix.bored_sess;
exit;
EOF
cat /tmp/sess_id.tmp.

MESSAGE=`cat /tmp/sess_id.tmp`

grep 'no rows selected' /tmp/sess_id.tmp|| send_telegram_message "$BOT_TOKEN" "$CHAT_ID" "<b>С прискорбием сообщаю о нештатной нагрузке в базе</b> 💩
$MESSAGE"
16.08.2024 13:23
Хорошо бы какой-нибудь еще shell_escape сделать или вроде того...
Часовой пояс GMT +3, время: 09:00.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.