Files
Sankofa/scripts/diagnose-ceph-issues.sh

186 lines
5.6 KiB
Bash
Raw Normal View History

#!/bin/bash
# Comprehensive Ceph diagnostic script
# Run on R630-01 as root
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo "=========================================="
echo "Ceph Cluster Diagnostic"
echo "=========================================="
echo ""
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}ERROR: Please run as root${NC}"
exit 1
fi
echo -e "${BLUE}=== 1. Ceph Cluster Health ===${NC}"
echo "-----------------------------------"
if command -v ceph &> /dev/null; then
echo "Ceph Health:"
ceph health 2>&1 || echo -e "${RED}Cannot get health${NC}"
echo ""
echo "Ceph Health Detail:"
ceph health detail 2>&1 | head -20 || echo -e "${RED}Cannot get health detail${NC}"
else
echo -e "${RED}ceph command not found${NC}"
fi
echo ""
echo -e "${BLUE}=== 2. Ceph Monitor Status ===${NC}"
echo "-----------------------------------"
if command -v ceph &> /dev/null; then
echo "Monitor Status:"
ceph mon stat 2>&1 || echo -e "${RED}Cannot get monitor status${NC}"
echo ""
echo "Monitor Dump:"
ceph mon dump 2>&1 | head -30 || echo -e "${RED}Cannot get monitor dump${NC}"
else
echo -e "${RED}ceph command not found${NC}"
fi
echo ""
echo -e "${BLUE}=== 3. Ceph OSD Status ===${NC}"
echo "-----------------------------------"
if command -v ceph &> /dev/null; then
echo "OSD Tree:"
ceph osd tree 2>&1 || echo -e "${RED}Cannot get OSD tree${NC}"
echo ""
echo "OSD Details:"
ceph osd df 2>&1 || echo -e "${RED}Cannot get OSD details${NC}"
else
echo -e "${RED}ceph command not found${NC}"
fi
echo ""
echo -e "${BLUE}=== 4. Bootstrap Keyring Check ===${NC}"
echo "-----------------------------------"
echo "Standard location (/var/lib/ceph/bootstrap-osd/):"
if [ -d "/var/lib/ceph/bootstrap-osd" ]; then
ls -la /var/lib/ceph/bootstrap-osd/ 2>/dev/null || echo "Directory exists but empty"
else
echo -e "${YELLOW}Directory does not exist${NC}"
fi
echo ""
echo "Proxmox location (/etc/pve/priv/):"
if [ -d "/etc/pve/priv" ]; then
ls -la /etc/pve/priv/ceph.client.bootstrap-osd.keyring 2>/dev/null || echo -e "${YELLOW}Bootstrap keyring not found${NC}"
echo "All Ceph keyrings in /etc/pve/priv/:"
ls -la /etc/pve/priv/ceph* 2>/dev/null || echo "No Ceph keyrings found"
else
echo -e "${YELLOW}/etc/pve/priv does not exist${NC}"
fi
echo ""
echo "Bootstrap client in auth list:"
if command -v ceph &> /dev/null; then
ceph auth list 2>&1 | grep -i bootstrap || echo -e "${YELLOW}No bootstrap client found${NC}"
else
echo -e "${RED}ceph command not found${NC}"
fi
echo ""
echo -e "${BLUE}=== 5. Ceph Services Status ===${NC}"
echo "-----------------------------------"
echo "Ceph Target:"
systemctl status ceph.target --no-pager 2>&1 | head -10 || echo "Service not found"
echo ""
echo "Ceph Monitor Services:"
systemctl list-units --type=service | grep ceph-mon || echo "No monitor services found"
for mon in $(systemctl list-units --type=service | grep ceph-mon | awk '{print $1}'); do
echo " $mon:"
systemctl status $mon --no-pager 2>&1 | head -5
done
echo ""
echo "Ceph OSD Services:"
systemctl list-units --type=service | grep ceph-osd | head -5 || echo "No OSD services found"
echo ""
echo -e "${BLUE}=== 6. Network Connectivity ===${NC}"
echo "-----------------------------------"
echo "Ceph Monitor Ports:"
netstat -tlnp 2>/dev/null | grep 6789 || ss -tlnp 2>/dev/null | grep 6789 || echo "No listeners on port 6789"
echo ""
echo "Monitor Addresses (from mon dump):"
if command -v ceph &> /dev/null; then
MON_ADDRS=$(ceph mon dump 2>/dev/null | grep -E "addr|rank" | head -10)
if [ ! -z "$MON_ADDRS" ]; then
echo "$MON_ADDRS"
echo ""
echo "Testing connectivity to monitors:"
echo "$MON_ADDRS" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+' | while read addr; do
ip=$(echo $addr | cut -d: -f1)
port=$(echo $addr | cut -d: -f2)
echo -n " Testing $ip:$port ... "
if timeout 2 bash -c "echo > /dev/tcp/$ip/$port" 2>/dev/null; then
echo -e "${GREEN}✓ Reachable${NC}"
else
echo -e "${RED}✗ Not reachable${NC}"
fi
done
else
echo -e "${YELLOW}Cannot get monitor addresses${NC}"
fi
else
echo -e "${RED}ceph command not found${NC}"
fi
echo ""
echo -e "${BLUE}=== 7. Proxmox Ceph Integration ===${NC}"
echo "-----------------------------------"
echo "pveceph command:"
which pveceph || echo -e "${YELLOW}pveceph not found${NC}"
echo ""
if command -v pveceph &> /dev/null; then
echo "pveceph status:"
pveceph status 2>&1 || echo "pveceph status failed"
fi
echo ""
echo -e "${BLUE}=== 8. Ceph Configuration ===${NC}"
echo "-----------------------------------"
echo "Ceph config file:"
if [ -f "/etc/ceph/ceph.conf" ]; then
echo " /etc/ceph/ceph.conf exists"
cat /etc/ceph/ceph.conf 2>/dev/null | head -20
elif [ -f "/etc/pve/ceph.conf" ]; then
echo " /etc/pve/ceph.conf exists"
cat /etc/pve/ceph.conf 2>/dev/null | head -20
else
echo -e "${YELLOW}No Ceph config file found${NC}"
fi
echo ""
echo "Ceph cluster name:"
if command -v ceph &> /dev/null; then
ceph --version 2>&1 || true
# Try to get cluster name
ceph config dump 2>&1 | grep "cluster" | head -5 || true
fi
echo ""
echo "=========================================="
echo -e "${GREEN}Diagnostic Complete${NC}"
echo "=========================================="
echo ""
echo "Summary of findings:"
echo " - Review Ceph health status above"
echo " - Check bootstrap keyring locations"
echo " - Verify monitor connectivity"
echo " - Check if pveceph is available"
echo ""