#!/bin/bash GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}==================================================" echo "Observability Stack Status Check" echo "==================================================${NC}" echo "" # Check namespace echo -e "${YELLOW}Checking namespace...${NC}" if kubectl get namespace observability &> /dev/null; then echo -e "${GREEN}✓ Namespace 'observability' exists${NC}" else echo -e "${RED}✗ Namespace 'observability' not found${NC}" exit 1 fi echo "" # Check PVs echo -e "${YELLOW}Checking PersistentVolumes...${NC}" pvs=$(kubectl get pv 2>/dev/null | grep -E "(prometheus|loki|tempo|grafana)-data-pv" | wc -l) if [ "$pvs" -eq 4 ]; then echo -e "${GREEN}✓ All 4 PersistentVolumes found${NC}" kubectl get pv | grep -E "(prometheus|loki|tempo|grafana)-data-pv" else echo -e "${RED}✗ Expected 4 PVs, found $pvs${NC}" fi echo "" # Check PVCs echo -e "${YELLOW}Checking PersistentVolumeClaims...${NC}" pvcs=$(kubectl get pvc -n observability 2>/dev/null | grep -v NAME | wc -l) if [ "$pvcs" -eq 4 ]; then echo -e "${GREEN}✓ All 4 PersistentVolumeClaims found${NC}" kubectl get pvc -n observability else echo -e "${RED}✗ Expected 4 PVCs, found $pvcs${NC}" fi echo "" # Check Pods echo -e "${YELLOW}Checking Pods...${NC}" kubectl get pods -n observability -o wide echo "" # Count running pods total_pods=$(kubectl get pods -n observability --no-headers 2>/dev/null | wc -l) running_pods=$(kubectl get pods -n observability --field-selector=status.phase=Running --no-headers 2>/dev/null | wc -l) if [ "$total_pods" -eq 0 ]; then echo -e "${RED}✗ No pods found in observability namespace${NC}" else if [ "$running_pods" -eq "$total_pods" ]; then echo -e "${GREEN}✓ All $total_pods pods are running${NC}" else echo -e "${YELLOW}⚠ $running_pods/$total_pods pods are running${NC}" fi fi echo "" # Check Services echo -e "${YELLOW}Checking Services...${NC}" kubectl get svc -n observability echo "" # Check Ingress echo -e "${YELLOW}Checking Ingress...${NC}" if kubectl get ingress -n observability grafana-ingress &> /dev/null; then echo -e "${GREEN}✓ Grafana Ingress found${NC}" kubectl get ingress -n observability grafana-ingress else echo -e "${RED}✗ Grafana Ingress not found${NC}" fi echo "" # Check ConfigMaps echo -e "${YELLOW}Checking ConfigMaps...${NC}" configmaps=$(kubectl get configmap -n observability 2>/dev/null | grep -v NAME | wc -l) echo "Found $configmaps ConfigMaps:" kubectl get configmap -n observability --no-headers | awk '{print " - " $1}' echo "" # Test endpoints echo -e "${YELLOW}Testing service endpoints...${NC}" check_endpoint() { local name=$1 local url=$2 if kubectl run -it --rm test-$RANDOM --image=curlimages/curl --restart=Never -- \ curl -s -o /dev/null -w "%{http_code}" --max-time 5 $url 2>/dev/null | grep -q "200\|302\|401"; then echo -e "${GREEN}✓ $name is responding${NC}" else echo -e "${RED}✗ $name is not responding${NC}" fi } check_endpoint "Prometheus" "http://prometheus.observability.svc.cluster.local:9090/-/healthy" check_endpoint "Loki" "http://loki.observability.svc.cluster.local:3100/ready" check_endpoint "Tempo" "http://tempo.observability.svc.cluster.local:3200/ready" check_endpoint "Grafana" "http://grafana.observability.svc.cluster.local:3000/api/health" echo "" echo -e "${BLUE}==================================================" echo "Status Check Complete" echo "==================================================${NC}" echo "" echo "Access Grafana at: https://grafana.betelgeusebytes.io" echo "Default credentials: admin / admin" echo ""