Ceph 스토리지 버킷 모니터링 자동화 스크립트 구축하기
Enterprise Storage Monitoring with Slack Integration
현대 IT 인프라에서 스토리지 모니터링은 필수적인 운영 요소입니다. 특히 Ceph과 같은 분산 스토리지 시스템에서는 버킷별 용량과 오브젝트 수를 실시간으로 추적하여 용량 계획과 성능 최적화를 수행해야 합니다.
오늘은 Ceph Object Storage의 특정 버킷을 모니터링하고, 변화 추이를 분석하여 Slack으로 알림을 보내는 자동화 스크립트를 구축하는 방법을 자세히 알아보겠습니다.
📋 시스템 요구사항
스크립트를 실행하기 위해서는 다음과 같은 환경이 준비되어야 합니다:
- Ceph Cluster: radosgw-admin 명령어 접근 가능
- jq: JSON 파싱을 위한 도구
- curl: HTTP 요청 전송
- Slack Webhook URL: 알림 채널 설정
🔧 핵심 스크립트 분석
버킷 모니터링 스크립트의 핵심 구성 요소를 살펴보겠습니다:
1. 기본 설정 및 변수 정의
#!/bin/bash
# Slack webhook URL (예시)
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/EXAMPLE/WEBHOOK/URL"
# 현재 날짜와 시간
EXECUTION_TIME=$(date)
# 이전 통계 파일 경로
STATS_FILE="/tmp/bucket_stats.txt"
# 모니터링할 버킷 이름 (예시)
BUCKET_NAME="my-data-bucket"
2. 버킷 정보 수집
# 버킷 용량과 오브젝트 개수 가져오기
BUCKET_INFO=$(radosgw-admin bucket stats --bucket=${BUCKET_NAME})
BUCKET_SIZE=$(echo "$BUCKET_INFO" | jq -r '.usage."rgw.main".size')
BUCKET_NUM_OBJECTS=$(echo "$BUCKET_INFO" | jq -r '.usage."rgw.main".num_objects')
💡 Pro Tip
radosgw-admin 명령어는 Ceph Object Gateway의 관리 도구로, 버킷의 상세 통계 정보를 JSON 형태로 제공합니다. jq를 사용하여 필요한 필드만 추출할 수 있습니다.
3. 데이터 포맷팅 함수
# 사람이 읽기 쉬운 단위로 변환
function human_readable_size() {
local size=$1
if ! [[ "$size" =~ ^[0-9]+$ ]]; then
echo "0 Bytes"
return
fi
local result=$(awk -v size="$size" '
BEGIN {
units[0] = "Bytes"; units[1] = "KB"; units[2] = "MB"
units[3] = "GB"; units[4] = "TB"; units[5] = "PB"
i = 0
while (size >= 1000 && i < 5) {
size = size / 1000
i++
}
if (i == 0) {
printf "%.0f %s", size, units[i]
} else {
printf "%.2f %s", size, units[i]
}
}')
echo "$result"
}
4. 변화량 계산
# 통계 계산 함수
function calculate_change() {
local current=$1
local previous=$2
if ! [[ "$current" =~ ^[0-9]+$ ]] || ! [[ "$previous" =~ ^[0-9]+$ ]] || [ "$previous" -eq 0 ]; then
echo "N/A"
return
fi
local change=$((current - previous))
local percentage=$(awk -v curr="$current" -v prev="$previous" 'BEGIN { printf "%.2f", ((curr - prev) / prev) * 100 }')
if [ "$change" -gt 0 ]; then
echo "+$(add_commas $change) (+${percentage}%)"
elif [ "$change" -lt 0 ]; then
echo "$(add_commas $change) (${percentage}%)"
else
echo "변화 없음 (0%)"
fi
}
✅ 장점
- 이전 데이터와 비교하여 증감률을 자동 계산
- 퍼센티지와 절대값을 동시에 표시
- 숫자에 콤마를 추가하여 가독성 향상
- 예외 상황 처리 (0으로 나누기 방지)
📊 Slack 알림 구현
수집된 데이터를 Slack으로 전송하는 부분입니다:
# 메시지 텍스트 준비
MESSAGE_TEXT="🕒 실행 시간: ${EXECUTION_TIME}
=========== 버킷 정보 ===========
- 버킷 이름: ${BUCKET_NAME}
- 용량: ${BUCKET_SIZE_HUMAN} (${BUCKET_SIZE_COMMA} Bytes)
- 오브젝트 개수: ${BUCKET_NUM_OBJECTS_COMMA}"
# 통계 정보 추가
if [ -n "$SIZE_CHANGE" ] && [ -n "$OBJECTS_CHANGE" ]; then
MESSAGE_TEXT="${MESSAGE_TEXT}
========== 이전 대비 변화 ==========
- 이전 측정: ${PREV_TIME}
- 용량 변화: ${SIZE_CHANGE}
- 오브젝트 변화: ${OBJECTS_CHANGE}"
fi
# JSON payload 생성
PAYLOAD="{
\"text\": \"\`\`\`${MESSAGE_TEXT_ESCAPED}\`\`\`\"
}"
# Slack 메시지 전송
curl -X POST -H 'Content-type: application/json' --data "$PAYLOAD" $SLACK_WEBHOOK_URL
📚 추천 도서
스토리지 시스템과 모니터링에 대해 더 자세히 알고 싶다면?
🛒 관련 서적 보러가기"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
⚙️ 실행 및 자동화 설정
1. 스크립트 실행 권한 부여
chmod +x bucket_monitoring.sh
2. Cron으로 주기적 실행
# 매 시간마다 실행
0 * * * * /path/to/bucket_monitoring.sh
# 매일 오전 9시에 실행
0 9 * * * /path/to/bucket_monitoring.sh
# 5분마다 실행 (고빈도 모니터링)
*/5 * * * * /path/to/bucket_monitoring.sh
⚠️ 주의사항
- radosgw-admin 명령어 실행 권한 확인
- Slack Webhook URL의 보안 관리
- 스토리지 I/O 부하를 고려한 실행 주기 설정
- 로그 파일 크기 관리 및 로테이션
🔍 고급 기능 확장
1. 다중 버킷 모니터링
# 여러 버킷을 배열로 관리
BUCKETS=("bucket1" "bucket2" "bucket3")
for bucket in "${BUCKETS[@]}"; do
# 각 버킷별로 모니터링 로직 실행
monitor_bucket "$bucket"
done
2. 임계값 기반 알람
# 용량 임계값 설정 (80% 초과 시 경고)
THRESHOLD_PERCENTAGE=80
if [ "$USAGE_PERCENTAGE" -gt "$THRESHOLD_PERCENTAGE" ]; then
ALERT_MESSAGE="⚠️ 경고: ${BUCKET_NAME} 용량이 ${USAGE_PERCENTAGE}%에 도달했습니다!"
send_slack_alert "$ALERT_MESSAGE"
fi
📈 성능 최적화 팁
항목 | 최적화 방법 | 효과 |
---|---|---|
API 호출 최소화 | 배치 처리로 여러 버킷 동시 조회 | 네트워크 부하 감소 |
캐싱 활용 | 이전 결과를 파일에 저장 후 재사용 | 응답 시간 단축 |
비동기 처리 | 백그라운드에서 데이터 수집 | 시스템 부하 분산 |
🎯 실제 운영 사례
이 스크립트를 실제 운영 환경에서 활용한 사례를 살펴보겠습니다:
📊 Case Study: 대용량 데이터 파이프라인 모니터링
- 환경: 일일 100TB 규모의 데이터 처리
- 도전: 실시간 용량 추적 및 이상 상황 감지
- 해결: 5분 간격 모니터링으로 99.9% 가용성 달성
- 결과: 용량 부족으로 인한 서비스 중단 0건
🔗 관련 기술 스택
이 모니터링 시스템과 함께 사용할 수 있는 다른 도구들:
- Prometheus + Grafana: 메트릭 수집 및 시각화
- ELK Stack: 로그 분석 및 검색
- Zabbix: 통합 모니터링 솔루션
- Telegraf: 메트릭 수집 에이전트
🚀 마무리
Ceph 스토리지 버킷 모니터링 자동화는 안정적인 스토리지 운영의 핵심입니다. 이 스크립트를 기반으로 다음과 같은 장점을 얻을 수 있습니다:
⚡ 실시간 모니터링
용량 변화를 실시간으로 추적하여 프로액티브한 관리 가능
📱 즉시 알림
Slack 통합으로 어디서나 즉시 상황 파악
📊 트렌드 분석
이전 데이터와 비교하여 성장 추세 분석
스토리지 인프라의 안정성과 효율성을 높이기 위해 이런 자동화 도구들을 적극 활용해보세요. 특히 DevOps 환경에서는 이러한 모니터링이 서비스 품질 향상에 직결됩니다.
💼 Enterprise Ready
프로덕션 환경에서 검증된 스크립트로
안정적인 스토리지 운영을 시작하세요!