37 lines
2.5 KiB
Bash
Executable File
37 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Здоровье инстансов на кубе DST: под, ping с проверкой БД и файлов, ошибки в логах за 10 минут.
|
|
# loopctl check loop5b9df1ba7220 loop00c13bf5471f
|
|
# loopctl check --db 135.106.201.42 все инстансы, у которых в DSN этот хост (после сбоя базы)
|
|
# loopctl check --all
|
|
# Вывод: id, домен, ready/рестарты, ping, ошибок, строк про БД, самая частая ошибка. Проблемные — в конце.
|
|
set -euo pipefail
|
|
. "$(dirname "$0")/lib/common.sh"
|
|
|
|
if [ "${1:-}" = --db ] || [ "${1:-}" = --all ]; then
|
|
F=$([ "$1" = --db ] && echo "${2:?хост БД}" || echo "")
|
|
IDS=$(kubectl --context "$DST" -n loop get mattermost -o json | jq -r --arg f "$F" \
|
|
'.items[]|select(.spec.replicas>0)|select($f=="" or any(.spec.mattermostEnv[]?; .name=="MM_SQLSETTINGS_DATASOURCE" and (.value|contains($f))))|.metadata.name')
|
|
else
|
|
IDS=$*
|
|
fi
|
|
[ -n "$IDS" ] || { echo "укажи loop id, --db <хост> или --all"; exit 1; }
|
|
|
|
one() {
|
|
local id=$1 h p c L e d top
|
|
h=$(kubectl --context "$DST" -n loop get mattermost "$id" -o jsonpath='{.spec.ingress.host}')
|
|
p=$(kubectl --context "$DST" -n loop get pods -l installation.mattermost.com/installation="$id" -o json | jq -r '[.items[]|"\(.status.containerStatuses[0].ready)/\(.status.containerStatuses[0].restartCount)"]|join(",")')
|
|
c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "https://$h/api/v4/system/ping?get_server_status=true")
|
|
L=$(kubectl --context "$DST" -n loop logs "deploy/$id" --since=10m 2>/dev/null || true)
|
|
e=$(grep -cE '"level":"(error|fatal|critical)"' <<<"$L" || true)
|
|
d=$(grep -ciE 'too many clients|connection slots|i/o timeout|failed to grab connection|bad connection' <<<"$L" || true)
|
|
top=$(grep -E '"level":"(error|fatal|critical)"' <<<"$L" | jq -r .msg 2>/dev/null | sort | uniq -c | sort -rn | head -1 | sed 's/^ *//' | cut -c1-80)
|
|
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$id" "$h" "${p:--}" "$c" "$e" "$d" "$top"
|
|
}
|
|
export -f one; export DST KUBECONFIG
|
|
OUT=$(printf '%s\n' $IDS | xargs -P 12 -I{} bash -c 'one {}')
|
|
printf 'id\tdomain\tready/restarts\tping\terrors\tdb\ttop error\n'
|
|
# сначала здоровые, проблемные (не ready, ping не 200, ошибки БД) — внизу
|
|
awk -F'\t' '$3 ~ /^true/ && $4==200 && $6==0' <<<"$OUT" | sort -t$'\t' -k2
|
|
echo "--- проблемные:"
|
|
awk -F'\t' '!($3 ~ /^true/ && $4==200 && $6==0)' <<<"$OUT" | sort -t$'\t' -k2
|