100초 이상 걸릴 경우 이메일을 보내는 쉘 스크립트

100초 이상 걸릴 경우 이메일을 보내는 쉘 스크립트

mysql에서 실행하면 show engine innodb status다음 줄이 나타납니다 ---TRANSACTION 17610C9A, ACTIVE 504 sec starting index read.

키워드 이후의 시간(초)이 ACTIVE100을 초과하는 경우를 모니터링한 다음 이메일 알림을 보내는 스크립트가 필요합니다.

답변1

value=$(show engine innodb status | grep TRANSACTION | grep ACTIVE | \
  sed -e 's/.*ACTIVE //' -e 's/\([[:digit:]]\{1,\}\).*/\1/')
if [ "$value" -gt 100 ]
then
  send email here
fi

출력에 다른 줄이 있을 수 있는 것처럼 들리기 때문에 무엇을 grep해야 할지 잘 모르겠습니다. grep의 목표는 "ACTIVE NNN" 부분을 찾아야 하는 줄만 포함하는 것입니다.

sed 표현식은 선행 부분(.*에서 "ACTIVE"까지)을 제거한 다음 하나 이상의 숫자와 일치하고 숫자 뒤의 모든 항목을 제거합니다. 결과 값이 100보다 엄격하게 크면 이메일을 보내십시오.

답변2

나는 다음과 같은 일을 할 것입니다 :

detected=(
  mysql --defaults-extra-file=/etc/mysql/debian.cnf --raw -Be '
     show engine innodb status' | perl -ln -0777 -e '
       while (/(\*\*\* \(\d+\) TRANSACTION:\s+TRANSACTION \S+ ACTIVE (\d+).*?)(?=\*\*\*)/sg) {
         print $1 if $2 > 100;
       }'
)
if [ -n "$detected" ]; then
mailx -s "$subject" "$addresses" << EOF
Some transactions took more than 100 seconds:

$detected
EOF
fi

참고로 위의 형식은 내가 본 형식에 맞게 조정되었으며 다음과 같습니다.

*** (1) TRANSACTION:
TRANSACTION AE523D, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 9 lock struct(s), heap size 1248, 4 row lock(s), undo log entries 2
MySQL thread id 40705, OS thread handle 0x7fa6d8197700, query id 5697977 localhost bugs updating
DELETE FROM tokens WHERE token = 'JpLgGK5Ygn'
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 32823 n bits 280 index `PRIMARY` of table `bugs`.`tokens` trx id AE523D lock_mode X locks rec but not gap waiting
Record lock, heap no 212 PHYSICAL RECORD: n_fields 7; compact format; info bits 32
 0: len 10; hex 4a704c67474b3559676e; asc JpLgGK5Ygn;;
 1: len 6; hex 000000ae523b; asc     R;;;
 2: len 7; hex 6c0000c01f0572; asc l     r;;
 3: len 3; hex 80000f; asc    ;;
 4: len 8; hex 80001255ef969792; asc    U    ;;
 5: len 7; hex 73657373696f6e; asc session;;
 6: len 17; hex 6372656174655f6174746163686d656e74; asc create_attachment;;

*** (2) TRANSACTION:

관련 정보