-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.sh
More file actions
executable file
·229 lines (202 loc) · 5.58 KB
/
run.sh
File metadata and controls
executable file
·229 lines (202 loc) · 5.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#!/bin/bash
# Redis Monitoring Stack 관리 스크립트
# 사용법: ./run.sh [start|stop|restart|status|logs|backup|clean]
set -e
# 색상 코드
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 사용법 출력
usage() {
echo "사용법: $0 [command]"
echo
echo "Commands:"
echo " start - 서비스 시작"
echo " stop - 서비스 중지"
echo " restart - 서비스 재시작"
echo " status - 서비스 상태 확인"
echo " logs - 로그 확인"
echo " backup - 데이터 백업"
echo " clean - 정리 (컨테이너, 볼륨, 이미지)"
echo " health - 헬스체크"
echo " monitor - 실시간 모니터링"
echo
exit 1
}
# 서비스 시작
start_services() {
log_info "서비스 시작 중..."
docker compose up -d
log_success "서비스가 시작되었습니다."
sleep 5
show_status
}
# 서비스 중지
stop_services() {
log_info "서비스 중지 중..."
docker compose down
log_success "서비스가 중지되었습니다."
}
# 서비스 재시작
restart_services() {
log_info "서비스 재시작 중..."
docker compose restart
log_success "서비스가 재시작되었습니다."
sleep 5
show_status
}
# 상태 확인
show_status() {
log_info "서비스 상태:"
echo "=================================================="
docker compose ps
echo
# 포트 확인
log_info "포트 사용 상태:"
echo "Redis Main (6379):"
netstat -ln | grep :6379 || echo " 포트 미사용"
echo "Redis Sub (6380):"
netstat -ln | grep :6380 || echo " 포트 미사용"
echo "Prometheus (9090):"
netstat -ln | grep :9090 || echo " 포트 미사용"
echo
}
# 로그 확인
show_logs() {
if [ $# -eq 2 ]; then
log_info "$2 서비스 로그:"
docker compose logs -f "$2"
else
log_info "전체 서비스 로그:"
docker compose logs -f
fi
}
# 백업
backup_data() {
log_info "데이터 백업 시작..."
if [ -f ./backup.sh ]; then
./backup.sh
else
log_error "backup.sh 파일이 없습니다. deploy.sh를 먼저 실행해주세요."
exit 1
fi
}
# 정리
clean_all() {
log_warning "모든 컨테이너, 볼륨, 이미지를 정리합니다."
read -p "계속하시겠습니까? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "정리 시작..."
docker compose down -v --remove-orphans
docker system prune -f
log_success "정리 완료"
else
log_info "정리가 취소되었습니다."
fi
}
# 헬스체크
health_check() {
log_info "헬스체크 실행 중..."
echo "=================================================="
# Redis Main 체크
echo -n "Redis Main: "
if docker exec redis-main redis-cli ping &> /dev/null; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}FAIL${NC}"
fi
# Redis Sub 체크
echo -n "Redis Sub: "
if docker exec redis-sub redis-cli ping &> /dev/null; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}FAIL${NC}"
fi
# Prometheus 체크
echo -n "Prometheus: "
if curl -s http://localhost:9090/-/healthy &> /dev/null; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}FAIL${NC}"
fi
# Redis Exporter Main 체크
echo -n "Redis Exporter Main: "
if curl -s http://localhost:9121/metrics &> /dev/null; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}FAIL${NC}"
fi
# Redis Exporter Sub 체크
echo -n "Redis Exporter Sub: "
if curl -s http://localhost:9122/metrics &> /dev/null; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}FAIL${NC}"
fi
echo "=================================================="
}
# 실시간 모니터링
monitor_services() {
log_info "실시간 모니터링 시작 (Ctrl+C로 종료)"
echo "=================================================="
while true; do
clear
echo -e "${BLUE}Redis Monitoring Stack - $(date)${NC}"
echo "=================================================="
# 컨테이너 상태
docker compose ps
echo
# 메모리 사용량
echo "메모리 사용량:"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" | head -6
echo
# Redis 정보
echo "Redis 정보:"
echo -n "Main - 연결된 클라이언트: "
docker exec redis-main redis-cli info clients | grep connected_clients | cut -d: -f2 | tr -d '\r' || echo "N/A"
echo -n "Sub - 연결된 클라이언트: "
docker exec redis-sub redis-cli info clients | grep connected_clients | cut -d: -f2 | tr -d '\r' || echo "N/A"
echo
sleep 5
done
}
# 메인 로직
case "${1:-}" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
show_status
;;
logs)
show_logs "$@"
;;
backup)
backup_data
;;
clean)
clean_all
;;
health)
health_check
;;
monitor)
monitor_services
;;
*)
usage
;;
esac