Docker Container Health Check Script
Docker container'ları için kapsamlı health check script. HTTP endpoint kontrolü, memory/CPU izleme ve alert mekanizması.
By Tolgahan
·
·
251 görüntülenme
#!/bin/bash
# Docker Container Health Check Script
# Kullanım: ./health-check.sh [container_name] [endpoint]
set -euo pipefail
CONTAINER=${1:-"my-spring-app"}
ENDPOINT=${2:-"http://localhost:8080/actuator/health"}
MAX_RETRIES=3
RETRY_DELAY=5
SLACK_WEBHOOK=${SLACK_WEBHOOK_URL:-""}
# Renk kodları
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log() { echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1"; }
# Container çalışıyor mu?
check_container_running() {
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
log "${RED}CRITICAL: Container '${CONTAINER}' çalışmıyor!${NC}"
return 1
fi
log "${GREEN}Container '${CONTAINER}' çalışıyor${NC}"
return 0
}
# HTTP health check
check_http_health() {
local attempt=1
while [ $attempt -le $MAX_RETRIES ]; do
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
--max-time 5 "$ENDPOINT" 2>/dev/null || echo "000")
if [ "$HTTP_STATUS" = "200" ]; then
log "${GREEN}Health check OK (HTTP $HTTP_STATUS)${NC}"
return 0
fi
log "${YELLOW}Attempt $attempt/$MAX_RETRIES failed (HTTP $HTTP_STATUS)${NC}"
attempt=$((attempt + 1))
sleep $RETRY_DELAY
done
log "${RED}CRITICAL: Health check failed after $MAX_RETRIES attempts${NC}"
return 1
}
# Memory kullanımı kontrolü
check_memory_usage() {
MEM_USAGE=$(docker stats --no-stream --format "{{.MemPerc}}" "$CONTAINER" | tr -d '%')
MEM_LIMIT=$(docker stats --no-stream --format "{{.MemUsage}}" "$CONTAINER")
if (( $(echo "$MEM_USAGE > 90" | bc -l) )); then
log "${RED}WARNING: Memory usage ${MEM_USAGE}% ($MEM_LIMIT)${NC}"
return 1
fi
log "${GREEN}Memory: ${MEM_USAGE}% ($MEM_LIMIT)${NC}"
return 0
}
# Restart count kontrolü
check_restart_count() {
RESTARTS=$(docker inspect --format='{{.RestartCount}}' "$CONTAINER" 2>/dev/null || echo "0")
if [ "$RESTARTS" -gt 3 ]; then
log "${RED}WARNING: Container ${RESTARTS} kez restart olmuş${NC}"
return 1
fi
log "${GREEN}Restart count: ${RESTARTS}${NC}"
return 0
}
# Ana kontrol
main() {
log "=== Health Check: ${CONTAINER} ==="
FAILED=0
check_container_running || FAILED=1
[ $FAILED -eq 0 ] && check_http_health || FAILED=1
[ $FAILED -eq 0 ] && check_memory_usage || true
check_restart_count || true
if [ $FAILED -eq 1 ]; then
log "${RED}=== HEALTH CHECK FAILED ===${NC}"
# Opsiyonel: Container restart
# docker restart "$CONTAINER"
exit 1
fi
log "${GREEN}=== ALL CHECKS PASSED ===${NC}"
exit 0
}
main
#!/bin/bash
# Docker Container Health Check Script
# Kullanım: ./health-check.sh [container_name] [endpoint]
set -euo pipefail
CONTAINER=${1:-"my-spring-app"}
ENDPOINT=${2:-"http://localhost:8080/actuator/health"}
MAX_RETRIES=3
RETRY_DELAY=5
SLACK_WEBHOOK=${SLACK_WEBHOOK_URL:-""}
# Renk kodları
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log() { echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1"; }
# Container çalışıyor mu?
check_container_running() {
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
log "${RED}CRITICAL: Container '${CONTAINER}' çalışmıyor!${NC}"
return 1
fi
log "${GREEN}Container '${CONTAINER}' çalışıyor${NC}"
return 0
}
# HTTP health check
check_http_health() {
local attempt=1
while [ $attempt -le $MAX_RETRIES ]; do
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
--max-time 5 "$ENDPOINT" 2>/dev/null || echo "000")
if [ "$HTTP_STATUS" = "200" ]; then
log "${GREEN}Health check OK (HTTP $HTTP_STATUS)${NC}"
return 0
fi
log "${YELLOW}Attempt $attempt/$MAX_RETRIES failed (HTTP $HTTP_STATUS)${NC}"
attempt=$((attempt + 1))
sleep $RETRY_DELAY
done
log "${RED}CRITICAL: Health check failed after $MAX_RETRIES attempts${NC}"
return 1
}
# Memory kullanımı kontrolü
check_memory_usage() {
MEM_USAGE=$(docker stats --no-stream --format "{{.MemPerc}}" "$CONTAINER" | tr -d '%')
MEM_LIMIT=$(docker stats --no-stream --format "{{.MemUsage}}" "$CONTAINER")
if (( $(echo "$MEM_USAGE > 90" | bc -l) )); then
log "${RED}WARNING: Memory usage ${MEM_USAGE}% ($MEM_LIMIT)${NC}"
return 1
fi
log "${GREEN}Memory: ${MEM_USAGE}% ($MEM_LIMIT)${NC}"
return 0
}
# Restart count kontrolü
check_restart_count() {
RESTARTS=$(docker inspect --format='{{.RestartCount}}' "$CONTAINER" 2>/dev/null || echo "0")
if [ "$RESTARTS" -gt 3 ]; then
log "${RED}WARNING: Container ${RESTARTS} kez restart olmuş${NC}"
return 1
fi
log "${GREEN}Restart count: ${RESTARTS}${NC}"
return 0
}
# Ana kontrol
main() {
log "=== Health Check: ${CONTAINER} ==="
FAILED=0
check_container_running || FAILED=1
[ $FAILED -eq 0 ] && check_http_health || FAILED=1
[ $FAILED -eq 0 ] && check_memory_usage || true
check_restart_count || true
if [ $FAILED -eq 1 ]; then
log "${RED}=== HEALTH CHECK FAILED ===${NC}"
# Opsiyonel: Container restart
# docker restart "$CONTAINER"
exit 1
fi
log "${GREEN}=== ALL CHECKS PASSED ===${NC}"
exit 0
}
main
AI Asistan
Sorularını yanıtlamaya hazır