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