•  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
r1
r1

(새 문서)
1[목차]
2== 개요 ==
3KT GTV 서버 환경점검을 위해 사용하는 스크립트이다.
4공통 점검 내역은 동일하게 수행하나 LSM/ADC 서버와 VOD 서버 역할이 달라 점검내용이 다른 부분이 있다.
5
6== 공통 점검 내역 ==
71. HW 모델명 확인
82. HDD 및 RAID 구성, 상태 점검
93. 시스템 로그 점검
104. NIC 사용 현황 점검
115. Bond 및 IP 설정 점검
126. Routing 점검
137. OS 버전 점검
148. OS Disk 용량 점검
159. /data Disk 용량 점검
1610. 시간동기화 점검
1711. GateWay Ping 점검
1812. 서버 부팅 관련 설정파일 점검
1913. 프로세스 서비스 이중화 상태 점검
2014. 프로세스 포트 및 상태 점검
2115. CPU 사용률 점검
22
23== LSM/ADC 서버 점검 내역 ==
241. LBAdmin 상태 점검
252. LFMServer 로그 점검
263. LFMSinkModule 로그 점검
274. CiGLBServer 로그 점검
285. L_ADS 로그 점검
296. ADSController 로그 점검
307. ADSClient 로그 점검
318. LoadBalancer2 로그 점검
32
33
34== VOD 서버 점검 내역 ==
351. CIHVODServer 로그 점검
36
37
38== 스크립트 본문 및 사용 방법 ==
39{{{ ## 사용법 ##
401. 아래 스크립트를 복사해 서버에 .sh 파일로 만들어 준다.
41 # vim Server_Check.sh
422. 스크립트 실행 권한을 부여 한다.
43 # chmod +x Server_Check.sh
443. 스크립트 수행 시 숫자 7과 해당 서버를 명시한다.
45 LSM 서버일 경우
46 # ./Server_Check.sh 7 LSM
47 ADC 서버일 경우
48 # ./Server_Check.sh 7 ADC
49 VOD 서버일 경우
50 # ./Server_Check.sh 7 VOD
51
52
53#!/bin/bash
54# -*- coding : UTF-8 -*-
55# version : 1.0.0
56# create date : 2021-11-18
57# update date : 2025-02-10
58# ----------------------------------------------
59# Copyright (c) 2021
60# @author mir kim
61# Server_Check.sh
62
63scriptName="Server_Check.sh"
64scriptVersion="20250210"
65check_failures=""
66output_file="/home/castis/output_data_$(date +'%Y-%m-%d_%H-%M').txt"
67ENV=$(env | grep LANG)
68
69manPage="""
70 SYNOPSIS
71 ./Server_Check.sh [?|-h]
72
73 This script works as follows.
74 1. H/W 점검 결과 추출
75 2. Network 상태 점검 결과 추출
76 3. OS 상태 점검 결과 추출
77 4. 이중화 점검 결과 추출
78 5. 서비스 현황 점검 결과 추출
79 6. 종합의견 결과 추출
80 7. JSON 형식으로 반환
81
82 함수 Make_Json_List() parameter
83
84 ex) Make_Json_List 생성유형 \"점검항목 큰 제목\" \"점검항목\" \"점검기준 값\" \"상세 점검 방법\" \"점검 결과 값\" \"양호/불량\"
85
86 OPTIONS
87 ? or -h
88 Show this help message and exit
89
90 """
91
92#local functions start
93ServerName=$(hostname)
94
95# 점검 결과 Result
96Success="양호"
97Fail="불량"
98
99# server model
100Server_Product=$(dmidecode | grep Prod | head -1 | cut -d : -f2 | awk '{print $1, $2, $3, $4}')
101
102function f_Usage() {
103 echo "$manPage"
104}
105
106Item_Num=1
107
108function Make_Json_List() {
109 # echo "DEBUG: 매개변수 -> $1 | $2 | $3 | $4 | $5 | $6"
110 case $1 in
111 First_Start)
112 echo -e "--------------------------------------------"
113 echo -e "점검 내용 : $3"
114 echo -e "결과: $5"
115 echo -e "상태: $6"
116 echo -e "--------------------------------------------"
117 ;;
118 Start)
119 echo -e "점검 내용 : $3"
120 echo -e "결과: $5"
121 echo -e "상태: $6"
122 echo -e "--------------------------------------------"
123 ;;
124 Middle)
125 echo -e "점검 내용 : $3"
126 echo -e "결과: $5"
127 echo -e "상태: $6"
128 echo -e "--------------------------------------------"
129 ;;
130 End)
131 echo -e "점검 내용 : $3"
132 echo -e "결과: $5"
133 echo -e "상태: $6"
134 echo -e "--------------------------------------------"
135 ;;
136 First_Single)
137 echo -e "점검 내용 : $3"
138 echo -e "결과: $5"
139 echo -e "상태: $6"
140 echo -e "--------------------------------------------"
141 ;;
142 Single)
143 echo -e "점검 내용 : $3"
144 echo -e "결과: $5"
145 echo -e "상태: $6"
146 echo -e "--------------------------------------------"
147 ;;
148 esac
149}
150
151# H/W 점검 결과 추출
152function HW_Check() {
153 # [ H/W 모델명 확인 ]
154 Make_Json_List First_Start "HardwareCheck" "H/W 모델명. 확인" "육안확인 결과" "dmidecode | grep 'Product Name'" "$(dmidecode | grep "Product Name" | head -1 | cut -d : -f2 | awk '{print $1, $2, $3, $4}')" "$Success"
155
156 # [ HDD 용량 및 RAID 구성 점검]
157
158 # Dell 서버
159 if [[ $Server_Product =~ "PowerEdge" ]]; then
160
161 battery_status=$(omreport storage battery | grep "Status" | grep -v Ok)
162 disk_status=$(omreport storage pdisk controller=0 | grep "Power Status" -v | grep -w Status | grep -v Ok)
163
164 if [ -n "$battery_status" ] || [ -n "$disk_status" ]; then
165 Make_Json_List Middle "" "Dell HDD상태 및 RAID 구성 점검" "Fail 또는 Error 있음" "omreport storage battery" "DISK, cache_battery 점검필요" "$Fail"
166 else
167 Make_Json_List Middle "" "Dell HDD상태 및 RAID 구성 점검" "Fail 또는 Error 없음" "omreport storage pdisk controller=0" "이상없음" "$Success"
168 fi
169
170 # Gen9 서버
171 elif [[ $Server_Product =~ "Gen9" ]]; then
172 HP="hpssacli"
173
174 # Gen10 서버
175 elif [[ $Server_Product =~ "Gen10" ]]; then
176 HP="ssacli"
177
178 # G8 이하 버전 HP 서버
179 else
180 HP="hpacucli"
181 fi # 여기서 if 문을 닫습니다.
182
183 # HP 서버
184 if [ ! -z $HP ]; then
185
186 cache_battery_status=$($HP ctrl all show config detail | egrep -i "Cache Status|controller status" | grep -i "Failed")
187
188 for list in logicaldrive physicaldrive; do
189 drive_check=$($HP ctrl all show config detail | grep -i "failed")
190 case $? in
191 0)
192 drive_check+=(${list})
193 ;;
194 esac
195 done
196
197 if [ -n "$drive_check" ] || [ -n "$cache_battery_status" ]; then
198 Make_Json_List Middle "" "HPE HDD 상태 및 RAID 구성 점검" "Fail 또는 Error 있음" "$HP ctrl all show detail" "DISK 또는 cache_battery 상태 점검필요" "$Fail"
199 else
200 Make_Json_List Middle "" "HPE HDD 상태 및 RAID 구성 점검" "Fail 또는 Error 없음" "$HP ctrl all show detail" "이상없음" "$Success"
201 fi
202 fi
203
204 # [ 시스템 로그 점검]
205 Syslog=$(grep -im 11 error /var/log/messages | egrep -vc "L2 Error|drive_cmd")
206 if [ $Syslog -le 10 ]; then
207 Make_Json_List Middle "" "시스템 로그 점검" "에러 없음" "grep -i Error /var/log/messages" "이상없음" "$Success"
208 else
209 Make_Json_List Middle "" "시스템 로그 점검" "에러 없음" "grep -i Error /var/log/messages" "점검필요" "$Fail"
210 fi
211}
212
213# Network 상태 점검 결과 추출
214function Network_Check() {
215
216 # [ NIC 사용 현황]
217 OS_Version=$(awk '{print $(NF-1)}' /etc/redhat-release)
218 USE_Bond=$(ls -al /etc/sysconfig/network-scripts/ifcfg-bond* | egrep -w "ifcfg-bond0$|ifcfg-bond1$|ifcfg-bond2quot; -c 2>/dev/null)
219
220 case $OS_Version in
221
222 6.4 | 6.6 | 6.9)
223 Alias=$(grep -c 'alias bond' /etc/modprobe.d/bonding.conf)
224 ;;
225
226 5 | 5.4 | 5.7)
227 Alias=$(grep -c 'alias bond' /etc/modprobe.conf)
228 ;;
229
230 7.5.1804)
231 Alias=$(echo $USE_Bond)
232 ;;
233 esac
234
235 case $USE_Bond in
236
237 $Alias)
238 Make_Json_List Start "NetworkCheck" "NIC 사용 현황" "-" "ethtool ethX\\\ncat /etc/modprobe.conf\\\ncat /etc/modprobe.d/bonding.conf" "이상없음" "$Success"
239 ;;
240 *)
241 Make_Json_List Start "NetworkCheck" "NIC 사용 현황" "-" "ethtool ethX\\\ncat /etc/modprobe.conf\\\ncat /etc/modprobe.d/bonding.conf" "점검필요" "$Fail"
242 ;;
243 esac
244
245 # [ IP 설정 확인]
246
247 # vpc 사용 여부
248 ip addr show vpcmanage >/dev/null 2>/dev/null
249
250 case $? in
251
252 0)
253 Manage_IP=$(ip addr show vpcmanage | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }')
254 Service_IP=$(ip addr show vpcservice | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }')
255
256 Make_Json_List Middle "" "IP 설정 확인" "-" "ifconfig 명령으로 IP 설정 확인" "$Manage_IP\\\n$Service_IP" "$Success"
257 ;;
258 *)
259 # bond2 사용 여부
260 ip addr show bond2 >/dev/null 2>/dev/null
261
262 case $? in
263
264 0)
265 Manage_IP=$(ip addr show bond0 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1)
266 Service1_IP=$(ip addr show bond1 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1)
267 Service2_IP=$(ip addr show bond2 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1)
268
269 Make_Json_List Middle "" "IP 설정 확인" "-" "ifconfig 명령으로 IP 설정 확인" "Manage_IP: $Manage_IP, Service1_IP: $Service1_IP, Service2_IP : $Service2_IP" "$Success"
270 ;;
271 *)
272 Manage_IP=$(ip addr show bond0 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1)
273 Service_IP=$(ip addr show bond1 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1)
274
275 Make_Json_List Middle "" "IP 설정 확인" "-" "ifconfig 명령으로 IP 설정 확인" "$Manage_IP: $Manage_IP, Service_IP: $Service_IP" "$Success"
276
277 ;;
278 esac
279 ;;
280 esac
281
282 # 관리 및 서비스 네트워크 Link 상태 점검
283 for list in $(grep "ONBOOT=yes" /etc/sysconfig/network-scripts/ifcfg-bond[0-9] | awk -F'ifcfg-' '{ split($2,arr,":"); print arr[1] }'); do
284 case $list in
285 bond1)
286 # 후지쯔 서버
287 if [[ $Server_Product =~ "PRIMERGY" ]]; then
288
289 NIC_Fail_Cnt=$(grep "$Active_NIC" /proc/net/bonding/bond1 -A 2 | grep Count | cut -d : -f2 | awk '{ if ( $1 >= 100 ){print}}' | wc -l)
290 Active_NIC=$(grep "MASTER_SLAVE" /usr/local/castis/bfod/bfod.cfg | awk -F'=' '{ print $NF }')
291 grep "$Active_NIC" /proc/net/bonding/${list} -A 2 | grep "Status" | grep -vq "up"
292 Link_Status=$?
293 else
294
295 NIC_Fail_Cnt=$(grep Count /proc/net/bonding/$list | cut -d : -f2 | awk '{ if ( $1 >= 100 ){print}}' | wc -l)
296 grep "Status" /proc/net/bonding/${list} | grep -vq "up"
297 Link_Status=$?
298 fi
299 ;;
300
301 *)
302 NIC_Fail_Cnt=$(grep Count /proc/net/bonding/$list | cut -d : -f2 | awk '{ if ( $1 >= 100 ){print}}' | wc -l)
303 grep "Status" /proc/net/bonding/${list} | grep -vq "up"
304 Link_Status=$?
305 ;;
306 esac
307 done
308
309 # [ Routing 설정 점검]
310
311 #bond2 존재 여부
312 src_Cnt=$(ip route show | grep "src" | wc -l)
313 Static_IP_Cnt=$(grep "IPADDR" /etc/sysconfig/network-scripts/ifcfg-* | egrep -v "#|127.0.0.1" | wc -l)
314 case $src_Cnt in
315 $Static_IP_Cnt)
316 Make_Json_List End "" "Routing 설정 점검" "" "route -n routing 정보 확인" "이상없음" "$Success"
317 ;;
318 *)
319 Make_Json_List End "" "Routing 설정 점검" "" "route -n routing 정보 확인" "점검필요" "$Fail"
320 ;;
321 esac
322}
323
324# OS 상태 점검 결과 추출
325function OS_Check() {
326
327 OS_Limit_Space=70
328 L_Data_Limit_Space=90
329 V_Data_Limit_Space=92
330
331 # [ OS/Kerne 버전 ]
332
333 OS_Version=$(awk -F 'release' '{ print $2 }' /etc/redhat-release | awk '{ print $(NF-1) }')
334 Make_Json_List Start "OSCheck" "OS/Kernel 버전" "-" "cat /etc/redhat-release\\\n uname -a" "$OS_Version" "$Success"
335
336 # [ OS_디스크 용량 점검]
337 OS_Free_Space=$(df -h | grep -w "/" | awk '{ print $(NF-1) }' | cut -d'%' -f1)
338 if [ $OS_Free_Space -lt $OS_Limit_Space ]; then
339
340 Make_Json_List Middle "" "OS 디스크 용량 점검 - ( 마운트위치: / )" "${OS_Limit_Space}% 미만" "df -h 명령으로 / 의 사용률 확인" "이상없음" "$Success"
341 else
342 Make_Json_List Middle "" "OS 디스크 용량 점검 - ( 마운트위치: / )" "${OS_Limit_Space}% 미만" "df -h 명령으로 / 의 사용률 확인" "점검필요" "$Fail"
343 fi
344
345 # [ 스토리지_디스크 용량 점검]
346 Data_Fail_Cnt=0
347 case $1 in
348 LSM | ADC)
349 for list in $(df -h | egrep "/data" | grep "%" | awk '{ print $NF }'); do
350
351 if [ $(df -h | grep -w "$list" | awk '{ print $(NF-1) }' | cut -d'%' -f1) -gt $L_Data_Limit_Space ]; then ((Data_Fail_Cnt++)); fi
352 done
353
354 case $Data_Fail_Cnt in
355 0)
356 Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${L_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "이상없음" "$Success"
357 ;;
358 *)
359 Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${L_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "점검필요" "$Fail"
360 ;;
361 esac
362 ;;
363 VOD)
364
365 if df -h | egrep -q "/data"; then
366 for list in $(df -h | egrep "/data" | grep "%" | awk '{ print $NF }'); do
367 if [ $(df -h | grep -w "$list" | awk '{ print $(NF-1) }' | cut -d'%' -f1) -gt $V_Data_Limit_Space ]; then
368 ((Data_Fail_Cnt++))
369 fi
370 done
371 else
372 # /data 디렉토리가 없으면 점검필요로 처리
373 Data_Fail_Cnt=1
374 fi
375
376 case $Data_Fail_Cnt in
377
378 0)
379 Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${V_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "이상없음" "$Success"
380 ;;
381 *)
382 Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${V_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "점검필요" "$Fail"
383 ;;
384 esac
385 ;;
386 esac
387
388 # [ 시간동기화 확인]
389 ntpq -p | egrep -q '\+|\*'
390
391 case $? in
392 0)
393 Make_Json_List Middle "" "시간동기화 확인" "*220.73.142.71\\\n*220.73.142.73" "ntpq -p 명령으로 시간 동기화 동작 상태 확인" "이상없음" "$Success"
394 ;;
395 *)
396 Make_Json_List Middle "" "시간동기화 확인" "*220.73.142.71\\\n*220.73.142.73" "ntpq -p 명령으로 시간 동기화 동작 상태 확인" "점검필요" "$Fail"
397 ;;
398 esac
399
400 # GATEWAY PING 확인
401
402 ifconfig bond2 >/dev/null 2>/dev/null
403 if [ $? -eq 0 ]; then
404 Service_GW=($(ip route show | grep default -A 2 | grep "nexthop via" | awk -F'via ' '{ split($2,arr," "); print arr[1] }'))
405 Service_Interface=($(ip route show | grep default -A 2 | grep "nexthop via" | awk -F'dev ' '{ split($2,arr," "); print arr[1] }'))
406 else
407 Service_GW=($(ip route show | grep default -A 2 | grep via | awk -F'via ' '{ split($2,arr," "); print arr[1] }'))
408 Service_Interface=($(ip route show | grep default -A 2 | grep via | awk -F'dev ' '{ split($2,arr," "); print arr[1] }'))
409
410 fi
411 Service_GW_Result=0
412
413 for ((NIC_Cnt = 0; NIC_Cnt < ${#Service_GW[@]}; NIC_Cnt++)); do
414 ping -I ${Service_Interface[$NIC_Cnt]} ${Service_GW[$NIC_Cnt]} -c 1 >/dev/null 2>/dev/null
415 ((Service_GW_Result = $Service_GW_Result + $?))
416 done
417
418 if [ $Service_GW_Result -eq 0 ]; then
419 Make_Json_List Middle "" "GATEWAY_PING 확인" "정상" "ping '${Service_GW[*]}' (${Service_Interface[*]})" "이상없음" "$Success"
420 else
421 Make_Json_List Middle "" "GATEWAY_PING 확인" "정상" "ping '${Service_GW[*]}' (${Service_Interface[*]})" "점검필요" "$Fail"
422 fi
423
424 # [ 서버 부팅 시 스크립트 권한 확인, 고성능서버 설정 확인 등 ]
425
426 sum_Result=()
427
428 #crontab (파일 권한 및 소유자 확인)
429 ls -l /etc/crontab | awk '{ print $1 }' | egrep -q "^-rw-"
430 cron_Authority=$?
431 ls -ltr /etc/crontab | awk '{ print $3 }' | grep -q "root"
432 cron_Manager=$?
433
434 if [ $cron_Authority -eq 0 ] && [ $cron_Manager -eq 0 ]; then
435 cron_Result=0
436 else
437 cron_Result=" cron "
438 fi
439
440 #sysctl.conf (파일에 해당 문자열이 있는지 확인인)
441 grep -wq "TCP Setting by CASTIS" /etc/sysctl.conf
442 sysctl_Result=$?
443
444 if [ $sysctl_Result -ne 0 ]; then sysctl_Result=" sysctl "; fi
445
446 #rc.local (심볼릭 링크 설정 확인인)
447 ls -ltr /etc/rc.local | egrep "^lrwx" | awk '{ print $NF }' | egrep -q "rc.d/rc.local"
448 rclocal_Authority=$?
449 if [ $rclocal_Authority -ne 0 ]; then rclocal_Authority=" rclocal_Authority "; fi
450
451 Omission_Ps=()
452 case $1 in
453 LSM | ADC)
454 #AD node check
455 echo $(hostname) | grep -wq "AD"
456 AD_Check=$?
457
458 case $AD_Check in
459 0)
460 rc_local_Ps=("ServiceMonitorCtl" "NetIOCtl" "CiMonitoringAgentMonitor")
461 ;;
462 1)
463 rc_local_Ps=("ServiceMonitorCtl" "NetIOCtl" "LFMSinkModuleMonitor" "CiMonitoringAgentMonitor")
464 ;;
465 esac
466
467 # share storage check
468 grep -q "Virtual" /usr/local/castis/LoadBalancer2.cfg
469 Share_Data_Result=$?
470
471 if [ $Share_Data_Result -eq 0 ]; then rc_local_Ps+=("CenterFileManagerCtl"); fi
472 ;;
473 VOD)
474 # share storage check
475 grep -q "Shared_Base_Directory" /usr/local/castis/vod.cfg
476 Share_Data_Result=$?
477
478 rc_local_Ps=("ServiceMonitorCtl" "eStreamServer" "NetIOCtl" "ADMMonitor")
479 if [ $Share_Data_Result -eq 0 ]; then rc_local_Ps+=("CenterFileWorkerCtl"); fi
480 ;;
481 esac
482
483 for ((PS_Cnt = 0; PS_Cnt < ${#rc_local_Ps[@]}; PS_Cnt++)); do
484
485 grep -v '#' /etc/rc.local | grep -q "${rc_local_Ps[$PS_Cnt]}"
486 if [ $? -ne 0 ]; then Omission_Ps+=(${rc_local_Ps[$PS_Cnt]}); fi
487
488 done
489
490 for list in $cron_Result $sysctl_Result $rclocal_Authority; do
491 if [ "$list" != "0" ]; then sum_Result+=($list); fi
492 done
493
494 if [ ! $sum_Result ] && [ ! $Omission_Ps ]; then
495 Make_Json_List End "" "서버 부팅 시 스크립트 설정 누락 확인, 고성능 서버 설정 확인 등" "정상" "rc.local, crontab, sysctl.conf" "이상없음" "$Success"
496 else
497 Make_Json_List End "" "서버 부팅 시 스크립트 설정 누락 확인, 고성능 서버 설정 확인 등" "정상" "rc.local, crontab, sysctl.conf" "${sum_Result[*]} ${Omission_Ps[*]} 점검필요" "$Fail"
498 fi
499}
500
501# 이중화 점검
502function Cluster_Check() {
503
504 #[ 프로세스 이중화 테스트 점검 ]
505 grep -v "#" /usr/local/castis/svcmonitor.cfg | grep -q "Service1_My_Priority=0"
506 # Master_Cnt = 1 : backup, 0: Active
507 Master_Cnt=$?
508 VIP_Up_Fail_Cnt=0
509
510 for V_IP in $(grep "Representative_NIC" /usr/local/castis/svcmonitor.cfg | grep -v "#" | cut -d '=' -f2 | sort -u); do
511 ip addr show | grep -q "secondary ${V_IP}"
512 if [ $? -ne 0 ]; then ((VIP_Up_Fail_Cnt++)); fi
513 done
514
515 case $VIP_Up_Fail_Cnt in
516 0)
517 Make_Json_List Single "ClusterCheck" "프로세스 이중화 테스트 점검" "-" "LSM에서 실행 중이면 정상, ADC에서 실행중이면 절체로 판단" "이상없음" "$Success"
518 return 0
519 ;;
520 *)
521 case $Master_Cnt in
522 0)
523 Make_Json_List Single "ClusterCheck" "프로세스 이중화 테스트 점검" "-" "LSM에서 실행 중이면 정상, ADC에서 실행중이면 절체로 판단" "점검필요" "$Fail"
524 return 1
525 ;;
526 1)
527 Make_Json_List Single "ClusterCheck" "프로세스 이중화 테스트 점검" "-" "LSM에서 실행 중이면 정상, ADC에서 실행중이면 절체로 판단" "이상없음" "$Success"
528 return 1
529 ;;
530 esac
531 ;;
532 esac
533
534}
535
536# 서비스 현황 점검
537Service_Solution_Status_Check() {
538
539 DAY=$(date +%F)
540 MONTH=$(date +%Y-%m)
541 EVENTLOG_DAY=$(date +%Y%m%d)
542 OS_Version=$(awk '{print $(NF-1)}' /etc/redhat-release)
543
544 # LSM 포트 변수 정의
545 LFMServer_PORT="8549"
546 LFMSinkModule_PORT="8550"
547 LoadBalancer2_PORT="50890"
548 ADSController_PORT="904"
549 ADSClient_PORT="911"
550 L_ADS_PORT="30000"
551 L_GSDM_PORT="18079"
552 L_NRM_PORT="18081"
553 file_requester_PORT="18084"
554 cache_manager_PORT="8081"
555 NetIOServer3_PORT="32128"
556 CiMonitoringAgent_PORT="30002"
557 ServiceMonitor_PORT="3511"
558
559 # VOD 포트 변수 정의
560 CiHVODServer_PORT="554"
561 ADM_PORT="40080"
562 ADS_PORT="30000"
563 NetIOServer3_PORT="32128"
564 cache_manager_PORT="8081"
565 CiMonitoringAgent_PORT="30002"
566
567 # LISTEN
568 LISTEN_OUTPUT=$(netstat -tnpl | awk '/LISTEN/ {split($4, a, ":"); print a[length(a)]}' | sed 's/\/.*//g')
569
570 # 누락된 항목을 저장할 변수
571 MISSING_ITEMS=""
572 ISSUES_FOUND=0
573
574 # LSM과 VOD 구분하여 점검
575 case $1 in
576 LSM)
577 for PORT_LSM in ServiceMonitor_PORT LFMServer_PORT LFMSinkModule_PORT LoadBalancer2_PORT ADSController_PORT ADSClient_PORT L_ADS_PORT L_GSDM_PORT L_NRM_PORT file_requester_PORT cache_manager_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do
578 PORT=${!PORT_LSM}
579 if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then
580 MISSING_ITEMS+="$PORT_LSM($PORT), "
581 TEMP_MISSING_ITEMS+="$PORT_LSM($PORT) "
582 ISSUES_FOUND=1
583 printed_items[$PORT_LSM]=$PORT
584 fi
585 done
586 sleep 3
587 for PORT_LSM in ServiceMonitor_PORT LFMServer_PORT LFMSinkModule_PORT LoadBalancer2_PORT ADSController_PORT ADSClient_PORT L_ADS_PORT L_GSDM_PORT L_NRM_PORT file_requester_PORT cache_manager_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do
588 PORT=${!PORT_LSM}
589 if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then
590 if [[ -z "${printed_items[$PORT_LSM]}" ]]; then
591 MISSING_ITEMS+="$PORT_LSM($PORT), "
592 ISSUES_FOUND=1
593 printed_items[$PORT_LSM]=$PORT
594 fi
595 fi
596 done
597 ;;
598 ADC)
599 for PORT_LSM in ServiceMonitor_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do
600 PORT=${!PORT_LSM}
601 if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then
602 MISSING_ITEMS+="$PORT_LSM($PORT), "
603 TEMP_MISSING_ITEMS+="$PORT_LSM($PORT) "
604 ISSUES_FOUND=1
605 printed_items[$PORT_LSM]=$PORT
606 fi
607 done
608 sleep 3
609 for PORT_LSM in ServiceMonitor_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do
610 PORT=${!PORT_LSM}
611 if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then
612 if [[ -z "${printed_items[$PORT_LSM]}" ]]; then
613 MISSING_ITEMS+="$PORT_LSM($PORT), "
614 ISSUES_FOUND=1
615 printed_items[$PORT_LSM]=$PORT
616 fi
617 fi
618 done
619 ;;
620 VOD)
621 # VOD 포트 점검
622 for PORT_VOD in CiHVODServer_PORT ADM_PORT ADS_PORT NetIOServer3_PORT cache_manager_PORT CiMonitoringAgent_PORT; do
623 PORT=${!PORT_VOD}
624 if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then
625 MISSING_ITEMS+="$PORT_LSM($PORT), "
626 TEMP_MISSING_ITEMS+="$PORT_LSM($PORT) "
627 ISSUES_FOUND=1
628 printed_items[$PORT_LSM]=$PORT
629 fi
630 done
631 sleep 3
632 for PORT_VOD in CiHVODServer_PORT ADM_PORT ADS_PORT NetIOServer3_PORT cache_manager_PORT CiMonitoringAgent_PORT; do
633 PORT=${!PORT_VOD}
634 if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then
635 if [[ -z "${printed_items[$PORT_LSM]}" ]]; then
636 MISSING_ITEMS+="$PORT_LSM($PORT), "
637 ISSUES_FOUND=1
638 printed_items[$PORT_LSM]=$PORT
639 fi
640 fi
641 done
642 ;;
643 esac
644
645 # 결과 출력
646 if [ $ISSUES_FOUND -eq 0 ]; then
647 Make_Json_List Single "ServiceCheck" " 포트 및 프로그램 상태 확인" "모두 LISTEN 상태" "netstat 명령으로 포트 및 프로그램 확인" "이상없음" "$Success"
648 else
649 MISSING_ITEMS_STR=${MISSING_ITEMS%, }
650 Make_Json_List Single "ServiceCheck" " 포트 및 프로그램 상태 확인" "LISTEN 확인 실패: $MISSING_ITEMS_STR" "netstat 명령으로 포트 및 프로그램 확인" "$MISSING_ITEMS_STR 점검필요" "$Fail"
651 fi
652
653 # CPU 사용률 확인
654 VMSTAT=$(vmstat 1 3 | awk '{print $15}' | sed -n 4p)
655
656 if [ "$1" != "VOD" ] && [ $2 -ne 0 ]; then
657 if [ $VMSTAT -ge 30 ]; then
658 Make_Json_List Single "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "이상없음" "$Success"
659 else
660 Make_Json_List Single "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "불량" "$Fail"
661 fi
662 else
663 if [ $VMSTAT -ge 30 ]; then
664 Make_Json_List Start "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "이상없음" "$Success"
665 else
666 Make_Json_List Start "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "불량" "$Fail"
667 fi
668 fi
669
670 # LBADMIN 상태 확인, 로그 기반 장애 내역 점검
671 if [ "$1" != "VOD" ]; then
672
673 if [ $2 -eq 0 ]; then
674 Server_Error_Cnt=$(/usr/local/castis/tools/vodcmd all status | grep "Error" | awk '{ print $1 }' | xargs echo)
675 if [ -z "$Server_Error_Cnt" ]; then
676
677 Make_Json_List Middle "" "LBAdmin 상태 확인" "-" "LBAdmin에서 LB서버 상태 확인 ( Running, Pause, Error )" "이상없음" "$Success"
678
679 else
680 Make_Json_List Middle "" "LBAdmin 상태 확인" "-" "LBAdmin에서 LB서버 상태 확인 ( Running, Pause, Error )" "${Server_Error_Cnt} 점검필요" "$Fail"
681 fi
682
683 LFM_DIST_LOG1=0
684 LFM_DIST_LOG2=0
685 GLB_LIMIT="30"
686 LB_EVENT_LIMIT="30"
687 LB_CI_LIMIT="30"
688 LFM_EVENT_LIMIT="30"
689 LFM_CI_LIMIT="30"
690 LFMSINK_LIMIT="30"
691 LNRM_LIMIT=30
692 LGSDM_LIMIT=30
693 ADS_LIMIT=30
694 ADC_LIMIT=30
695 ADSCONTROLLER_LIMIT=30
696 UNIXTIME_20=$(date +%s -d '20 minute ago')
697 #OTV
698 if [ $OS_Version == "7.5.1804" ]; then
699 #CiGLBServer
700 if [ -d /var/log/castis/glb_log ]; then
701 LOG_FILE=$(ls -ltr /var/log/castis/glb_log/GLB.log 2>/dev/null)
702 if [ ! -f "$LOG_FILE" ]; then
703 Make_Json_List Middle "" "CiGLBServer 동작 확인" "LOG 파일 없음" "CiGLBServer: $LOG_FILE 파일 없음" "GLB 로그파일 여부 점검필요" "$Fail"
704 else
705 GLB_CI_LOG=$(egrep -ic "error|Fail" "$LOG_FILE")
706 if [ "$GLB_CI_LOG" -ge "$GLB_LIMIT" ]; then
707 Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 있음" "CiGLBServer: $LOG_FILE 'error|fail'" "점검필요" "$Fail"
708 else
709 Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 없음" "CiGLBServer: $LOG_FILE 'error|fail'" "이상없음" "$Success"
710 fi
711 fi
712 else
713 Make_Json_List Middle "" "CiGLBServer 동작 확인" "디렉터리 없음" "CiGLBServer: /var/log/castis/glb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
714 fi
715 #LoadBalancer2
716 if [ -d /var/log/castis/lb_log ]; then
717 LOG_FILES="/var/log/castis/lb_log/LoadBalancer2.log 2>/dev/null"
718 if [ -z "$LOG_FILES" ]; then
719 Make_Json_List End "" "LoadBalancer2 동작 확인" "LOG 파일 없음" "LoadBalancer2: /var/log/castis/lb_log 파일 없음" "LoadBalancer2.log 로그파일 여부 점검필요" "$Fail"
720 else
721 LB_CI_LOG=$(egrep -i "error|Fail" $LOG_FILES | grep -vc "LimitCacheContent list" | awk -F':' '{ sum += $2 } END { print sum }')
722 LB_EVENT_LOG=$(egrep -ic "error|Fail" /var/log/castis/lb_log/EventLog[$EVENTLOG_DAY].log 2>/dev/null || echo 0)
723 if [ $LB_CI_LOG -ge $LB_CI_LIMIT ] || [ $LB_EVENT_LOG -ge $LB_EVENT_LIMIT ]; then
724 Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 있음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "LoadBalancer2.log 점검필요" "$Fail"
725 else
726 Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 없음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "이상없음" "$Success"
727 fi
728 fi
729 else
730 Make_Json_List End "" "LoadBalancer2 동작 확인" "디렉터리 없음" "LoadBalancer2: /var/log/castis/lb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
731 fi
732 else
733 #LFMServer
734 if [ -d /var/log/castis/lfm_log ]; then
735 # 최근 LFMServer.log" 파일 5개 선택택
736 LOG_FILES=$(ls /var/log/castis/lfm_log/$MONTH/${DAY}* | tail -5 | awk '{ print $NF }' 2>/dev/null)
737 if [ -z "$LOG_FILES" ]; then
738 Make_Json_List Middle "" "LFMServer 동작 확인" "LOG 파일 없음" "LFMServer: /var/log/castis/lfm_log/LFMServer.log" "LFMServer.log 로그파일 여부 점검필요" "$Fail"
739 else
740 # 선택된 파일에서 에러와 실패 패턴 검색
741 LFM_CI_LOG=$(egrep -v "Infor|match|Source file" $LOG_FILES | egrep -ic "error|Fail" 2>/dev/null)
742 if [ $LFM_CI_LOG -ge $LFM_CI_LIMIT ]; then
743 Make_Json_List Middle "" "LFMServer 동작 확인" "Fail 또는 Error 있음" "LFMServer: /var/log/castis/lfm_log/LFMServer.log 'error|fail'" "LFMServer.log 점검필요" "$Fail"
744 else
745 Make_Json_List Middle "" "LFMServer 동작 확인" "Fail 또는 Error 없음" "LFMServer: /var/log/castis/lfm_log/LFMServer.log 'error|fail'" "이상없음" "$Success"
746 fi
747 fi
748 else
749 Make_Json_List Middle "" "LFMServer 동작 확인" "디렉터리 없음" "LFMServer: /var/log/castis/lfm_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
750 fi
751 # LFMSinkModule
752 if [ -d /var/log/castis/lfmsinkmodule_log ]; then
753 # 최근 LFMSinkModule.log 파일 5개 선택
754 LOG_FILES=$(ls /var/log/castis/lfmsinkmodule_log/${MONTH}/${DAY}* | tail -5 | awk '{ print $NF }' 2>/dev/null)
755 if [ -z "$LOG_FILES" ]; then
756 Make_Json_List Middle "" "LFMSinkModule 동작 확인" "LOG 파일 없음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log/LFMSinkModule.log" "LFMSinkModule.log 로그파일 여부 점검필요" "$Fail"
757 else
758 LFMSINKMODULE_LOG=$(egrep -ic "error|Fail" $LOG_FILES)
759 if [ $LFMSINKMODULE_LOG -ge $LFMSINK_LIMIT ]; then
760 Make_Json_List Middle "" "LFMSinkModule 동작 확인" "Fail 또는 Error 있음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log/LFMSinkModule.log 'error|fail'" "LFMSinkModule.log 점검필요" "$Fail"
761 else
762 Make_Json_List Middle "" "LFMSinkModule 동작 확인" "Fail 또는 Error 없음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log/EventLog.log 'error|fail'" "이상없음" "$Success"
763 fi
764 fi
765 else
766 Make_Json_List Middle "" "LFMSinkModule 동작 확인" "디렉터리 없음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
767 fi
768
769 # CiGLBServer
770 if [ -d /var/log/castis/glb_log ]; then
771 LOG_FILE="/var/log/castis/glb_log/GLB.log"
772 if [ -z "$LOG_FILES" ]; then
773 Make_Json_List Middle "" "CiGLBServer 동작 확인" "LOG 파일 없음" "CiGLBServer: $LOG_FILE 파일 없음" "GLB 로그파일 여부 점검필요" "$Fail"
774 else
775 GLB_CI_LOG=$(egrep -ic "error|Fail" $LOG_FILES)
776 if [ $GLB_CI_LOG -ge $GLB_LIMIT ]; then
777 Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 없음" "CiGLBServer: /var/log/castis/glb_log/EventLog.log 'error|fail'" "점검필요" "$Fail"
778 else
779 Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 없음" "CiGLBServer: /var/log/castis/glb_log/EventLog.log 'error|fail'" "이상없음" "$Success"
780 fi
781 fi
782 else
783 Make_Json_List Middle "" "CiGLBServer 동작 확인" "디렉터리 없음" "CiGLBServer: /var/log/castis/glb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
784 fi
785
786 # L_ADS
787 if [ -d /var/log/castis/L_ads_log ]; then
788 LOG_FILES=$(ls /var/log/castis/L_ads_log/${MONTH}/${DAY}* 2>/dev/null)
789 if [ -z "$LOG_FILES" ]; then
790 Make_Json_List Middle "" "L_ADS 동작 확인" "LOG 파일 없음" "L_ADS: /var/log/castis/L_ads_log/EventLog.log" "Event 로그파일 여부 점검필요" "$Fail"
791 else
792 ADS_LOG=$(egrep -v "Infor" $LOG_FILES | egrep -ic "error|Fail")
793 if [ $ADS_LOG -ge $ADS_LIMIT ]; then
794 Make_Json_List Middle "" "L_ADS 동작 확인" "Fail 또는 Error 없음" "L_ADS: /var/log/castis/L_ads_log/EventLog.log 'error|fail'" "점검필요" "$Fail"
795 else
796 Make_Json_List Middle "" "L_ADS 동작 확인" "Fail 또는 Error 없음" "L_ADS: /var/log/castis/L_ads_log/EventLog.log 'error|fail'" "이상없음" "$Success"
797 fi
798 fi
799 else
800 Make_Json_List Middle "" "L_ADS 동작 확인" "디렉터리 없음" "L_ADS: /var/log/castis/L_ads_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
801 fi
802
803 # ADSController
804 if [ -d /var/log/castis/adscontroller_log ]; then
805 LOG_FILES=$(ls /var/log/castis/adscontroller_log/$MONTH/${DAY}* 2>/dev/null)
806 if [ -z "$LOG_FILES" ]; then
807 Make_Json_List Middle "" "ADSController 동작 확인" "LOG 파일 없음" "ADSController: /var/log/castis/adscontroller_log/EventLog.log" "Event 로그파일 여부 점검필요" "$Fail"
808 else
809 ADSCONTROLLER_LOG=$(egrep -v "Infor" $LOG_FILES | egrep -ic "error|Fail")
810 if [ $ADSCONTROLLER_LOG -ge $ADSCONTROLLER_LIMIT ]; then
811 Make_Json_List Middle "" "ADSController 동작 확인" "Fail 또는 Error 없음" "ADSController: /var/log/castis/adscontroller_log/EventLog.log 'error|fail'" "EventLog.log 점검필요" "$Fail"
812 else
813 Make_Json_List Middle "" "ADSController 동작 확인" "Fail 또는 Error 없음" "ADSController: /var/log/castis/adscontroller_log/EventLog.log 'error|fail'" "이상없음" "$Success"
814 fi
815 fi
816 else
817 Make_Json_List Middle "" "ADSController 동작 확인" "디렉터리 없음" "ADSController: /var/log/castis/adscontroller_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
818 fi
819
820 # ADSClient
821 if [ -d /var/log/castis/adc_log ]; then
822 LOG_FILES=$(ls /var/log/castis/adc_log/$MONTH/${DAY}* 2>/dev/null)
823 if [ -z "$LOG_FILES" ]; then
824 Make_Json_List Middle "" "ADSClient 동작 확인" "LOG 파일 없음" "ADSClient: /var/log/castis/adc_log/ADSClient.log " "ADSClient.log 로그파일 여부 점검필요" "$Fail"
825 else
826 ADC_LOG=$(egrep -v "Infor" $LOG_FILES | egrep -ic "error|Fail")
827 if [ $ADC_LOG -ge $ADC_LIMIT ]; then
828 Make_Json_List Middle "" "ADSClient 동작 확인" "Fail 또는 Error 없음" "ADSClient: /var/log/castis/adc_log/EADSClient.log 'error|fail'" "ADSClient.log 점검필요" "$Fail"
829 else
830 Make_Json_List Middle "" "ADSClient 동작 확인" "Fail 또는 Error 없음" "ADSClient: /var/log/castis/adc_log/ADSClient.log 'error|fail'" "이상없음" "$Success"
831 fi
832 fi
833 else
834 Make_Json_List Middle "" "ADSClient 동작 확인" "디렉터리 없음" "ADSClient: /var/log/castis/adc_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
835 fi
836
837 # LoadBalancer2
838 if [ -d /var/log/castis/lb_log ]; then
839 LOG_FILES="/var/log/castis/lb_log/LoadBalancer2.log"
840 if [ -z "$LOG_FILES" ]; then
841 Make_Json_List End "" "LoadBalancer2 동작 확인" "LOG 파일 없음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log" "LoadBalancer2.log 로그파일 여부 점검필요" "$Fail"
842 else
843 LB_CI_LOG=$(egrep -i "error|Fail" $LOG_FILES | grep -vc "LimitCacheContent list")
844 LB_EVENT_LOG=$(egrep -ic "error|Fail" /var/log/castis/lb_log/EventLog[$EVENTLOG_DAY].log 2>/dev/null || echo 0)
845
846 if [ $LB_CI_LOG -ge $LB_CI_LIMIT ]; then
847 Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 있음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "LoadBalancer2.log 점검필요" "$Fail"
848 else
849 Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 없음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "이상없음" "$Success"
850 fi
851 fi
852 else
853 Make_Json_List End "" "LoadBalancer2 동작 확인" "디렉터리 없음" "LoadBalancer2: /var/log/castis/lb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail"
854 fi
855 fi
856 fi
857
858 else
859 VOD_LIMIT=50
860 NOMEDIA_RESET_LOG_LIMIT=200000
861
862 if [ -e "/var/log/castis/vod_log/EventLog[$EVENTLOG_DAY].log" ]; then
863 EVENT_VOD_NOMEDIA_RESET_LOG=$(grep "No Media" $(ls -ltr /var/log/castis/vod_log/${MONTH}/${DAY}* | awk '{ print $NF }') | grep ted | awk -F '[' '{ split($2,arr,"]"); sum+=arr[1] } END{print sum}')
864 EVENT_VOD_ERR_LOG=$(egrep -i "Error|Fail|Invalid File.*mpg" /var/log/castis/vod_log/EventLog[$EVENTLOG_DAY].log | egrep -v "OnHTTPGet Fail|Invalid URL. SETUP Fail|RTSP Message Parsing Error|Invalid|AsyncIO Error" | wc -l)
865 else
866 EVENT_VOD_NOMEDIA_RESET_LOG=0
867 EVENT_VOD_ERR_LOG=0
868 fi
869 i=0
870
871 if [ $EVENT_VOD_ERR_LOG -ge $VOD_LIMIT ]; then
872 Service_Streaming_Status_Array[$i]="VOD ERROR로그 $VOD_LIMIT건 이상 발생"
873 ((i++))
874 fi
875
876 if [ $EVENT_VOD_NOMEDIA_RESET_LOG -ge $NOMEDIA_RESET_LOG_LIMIT ]; then
877 Service_Streaming_Status_Array[$i]="VOD No Media로그 $EVENT_VOD_NOMEDIA_RESET_LOG건 이상 발생"
878 fi 2>/dev/null
879
880 if [ ${#Service_Streaming_Status_Array[@]} -ge 1 ]; then
881 Make_Json_List End "" "CIHVODServer 동작 확인" "Fail 또는 Error 없음" "'No Media|error|fail'" "${Service_Streaming_Status_Array[@]}" "$Fail"
882 else
883 Make_Json_List End "" "CIHVODServer 동작 확인" "Fail 또는 Error 없음" "'No Media|error|fail'" "이상없음" "$Success"
884 fi
885
886 fi
887
888}
889
890#local functions end
891case $1 in
892\? | -h)
893 f_Usage
894 exit
895 ;;
896esac
897
898#Json start
899
900case $2 in
901LSM | ADC)
902 HW_Check
903 Network_Check
904 OS_Check $2
905 Cluster_Check
906 Service_Solution_Status_Check $2 $?
907
908 hw_result=$(HW_Check)
909 network_result=$(Network_Check)
910 os_result=$(OS_Check $2)
911 cluster_result=$(Cluster_Check)
912 service_solution_result=$(Service_Solution_Status_Check $2 $?)
913
914 all_results="$hw_result\n$network_result\n$os_result\n$cluster_result\n$service_solution_result"
915 ;;
916VOD)
917 HW_Check
918 Network_Check
919 OS_Check $2
920 Service_Solution_Status_Check $2
921
922 hw_result=$(HW_Check)
923 network_result=$(Network_Check)
924 os_result=$(OS_Check $2)
925 service_result=$(Service_Solution_Status_Check $2)
926
927 all_results="$hw_result\n$network_result\n$os_result\n$service_result"
928 ;;
929
930esac
931
932# 결과 중 "점검필요", "불량", "이상 발생" 텍스트가 있어야 수집
933if echo -e "$all_results" | grep -E -q "점검필요|불량|이상 발생"; then
934 echo -e "\n[점검필요 항목]"
935 echo -e "$all_results" | grep -E -q "점검필요|불량|이상 발생"
936 echo -e "$all_results" | awk '/점검 내용/ {content=$0} /상태:/ && /점검필요/ {print content; print $0; print ""}'
937else
938 echo -e "\n모든 항목이 이상없음 상태입니다."
939fi
940
941
942}}}