Skip to content

Алерт при всплеске медленных запросов MySQL

long_query_time = 1, slow_query_log включён. Нужно понимать, когда количество медленных запросов в минуту резко вырастает (deploy сломал индекс, ORM начал N+1).

Рецепт

bash
#!/usr/bin/env bash
# Count slow queries logged in the last 60 seconds. Alert above THRESHOLD.
LOG="/var/log/mysql/mysql-slow.log"
THRESHOLD=${THRESHOLD:-20}

SINCE=$(date -u -d "1 minute ago" "+%Y-%m-%dT%H:%M")
COUNT=$(awk -v t="$SINCE" '
  /^# Time:/ { ts = substr($3 " " $4, 1, 16) }
  /^# Query_time/ && ts >= t { c++ }
  END { print c+0 }
' "$LOG")

if [ "$COUNT" -gt "$THRESHOLD" ]; then
  curl -X POST "$SLACK_WEBHOOK" \
    --data "{\"text\":\"MySQL: $COUNT slow queries in the last minute (threshold $THRESHOLD)\"}"
fi

То же самое в Enterno.io

Page-speed regression обычно следует за медленными SQL-запросами. PageSpeed checker + Navigator-monitor с историей дают тот же сигнал на уровне TTFB, без доступа к slow-log.

Настроить Performance monitor → ← Все рецепты

Похожие рецепты