İçeriğe geç
bash

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
bash
#!/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
Bu snippet'i göm
<iframe src="https://tolgahan.dev/snippets/docker-container-health-check-script/embed" width="100%" height="400" frameborder="0"></iframe>
Paylaş: