init
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user