#!/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