서버 작동 및 유지 보수 프로세스 중에는 CPU로드 모니터링, 디스크 사용 모니터링, 프로세스 번호 모니터링 등과 같은 서버의 다양한 리소스를 모니터링해야합니다. 시스템에서 이상이 발생할 때 즉시 경고하고 시스템 관리자에게 알립니다. 이 기사에서는 Linux 시스템에서 몇 가지 일반적인 모니터링 요구 사항과 Shell Scripts 작성을 소개합니다.
기사 디렉토리 :
1. Linux는 쉘을 사용하여 프로세스가 존재하는지 확인합니다
2. Linux는 쉘을 사용하여 프로세스 CPU 사용을 감지합니다
3. Linux는 쉘을 사용하여 프로세스 메모리 사용을 감지합니다
4. Linux는 쉘을 사용하여 프로세스 핸들 사용을 감지합니다
5.Linux는 Shell을 사용하여 TCP 또는 UDP 포트가 듣고 있는지 확인합니다.
6.Linux는 쉘을 사용하여 실행중인 프로세스 수를 봅니다.
7. Linux는 Shell을 사용하여 시스템 CPU 부하를 감지합니다
8. Linux는 쉘을 사용하여 시스템 디스크 공간을 감지합니다
9. 요약
프로세스가 있는지 확인하십시오
프로세스를 모니터링 할 때는 일반적으로 프로세스의 ID를 가져와야합니다. 프로세스 ID는 프로세스의 고유 식별자이지만 때로는 프로세스 이름이 동일한 여러 프로세스가 서버의 다른 사용자에서 실행될 수 있습니다. 아래의 함수 getPid는 지정된 사용자에서 지정된 프로세스 이름의 프로세스 ID를 얻는 기능을 제공합니다 (현재이 사용자 에서이 프로세스 이름으로 프로세스를 시작하는 것만 고려). 사용자 이름과 프로세스 이름의 두 가지 매개 변수가 있습니다. 먼저 PS를 사용하여 프로세스 정보를 찾고 GREP를 통해 필요한 프로세스를 필터링하고 SED 및 AWK를 통해 프로세스의 ID 값을 찾습니다 (이 기능은 다른 정보 필터링과 같은 실제 조건에 따라 수정 될 수 있음).
목록 1. 프로세스 모니터링
코드 사본은 다음과 같습니다.
함수 getPid #user #name입니다
{
psuser = $ 1
psname = $ 2
pid =`ps -u $ psuser | grep $ psname | grep -v grep | grep -v vi | grep -v dbx/n
| grep -tave | grep -v start | grep -v stop | sed -n 1p | awk '{print $ 1}'`
echo $ pid
}
샘플 데모 :
1) 소스 프로그램 (예를 들어, 사용자의 프로세스 ID를 루트로 찾고 프로세스 이름은 cftestapp입니다).
코드 사본은 다음과 같습니다.
pid =`getpid root cftestapp`
echo $ pid
2) 결과 출력
코드 사본은 다음과 같습니다.
11426
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력에서 11426이 루트 사용자의 CFTESTAPP 프로그램의 프로세스 ID임을 알 수 있습니다.
4) 명령 소개
1. PS : 시스템에서 즉각적인 프로세스 정보를 봅니다. 매개 변수 : -u <사용자 식별 코드> 사용자에게 속하는 프로그램의 상태를 나열하고 사용자 이름을 사용하여 지정할 수도 있습니다. -p <프로세스 식별 코드> 프로세스 식별 코드를 지정하고 프로세스 상태를 나열하십시오. -o 출력 형식 2. grep : 문자열과 일치하는 파일에서 현재 줄을 찾는 데 사용됩니다. 매개 변수 : -V 리버스 선택, 즉 '검색 문자열'내용이없는 줄. 3. SED : 표준 입력에서 파일 또는 내보내는 파일을 편집하는 비 결과 텍스트 편집기이며 한 번에 한 줄의 컨텐츠 만 처리 할 수 있습니다. 매개 변수 : -N 다음 입력 라인을 읽고 다음 명령을 사용하여 첫 번째 명령 대신 새 줄을 처리합니다. P 플래그 인쇄 라인 4. AWK : Linux/UNIX에서 텍스트 및 데이터를 처리하기위한 프로그래밍 언어. 데이터는 표준 입력, 하나 이상의 파일 또는 다른 명령의 출력에서 나올 수 있습니다. 사용자 정의 기능 및 동적 정규식과 같은 고급 기능을 지원하며 Linux/UNIX에서 강력한 프로그래밍 도구입니다. 명령 줄에 사용되지만 스크립트로 사용됩니다. AWK의 텍스트 및 데이터 처리 방법 : 첫 번째 줄에서 마지막 줄까지 파일을 단계별로 스캔하여 특정 패턴을 일치하는 행을 찾고 있으며 해당 라인에서 원하는 것을 수행합니다. 처리 동작이 지정되지 않으면 일치하는 행이 표준 출력 (화면)에 표시됩니다. 모드가 지정되지 않으면 작업에서 지정된 모든 행이 처리됩니다. 매개 변수 : -f fs 또는 필드 -세파기 FS : 입력 파일 Delimiter를 지정하십시오. fs는 문자열 또는 -f :와 같은 정규 표현식입니다.
때로는 프로세스가 시작되지 않았을 수도 있습니다. 다음 기능은 프로세스 ID가 존재하는지 확인하는 것입니다. 이 프로세스가 출력을 실행하지 않으면
코드 사본은 다음과 같습니다.
프로세스가 존재하지 않습니다.
# 프로세스가 있는지 확인하십시오
[ "-$ pid"== "-"]
그 다음에
{
Echo "프로세스가 존재하지 않습니다."
}
fi
프로세스 CPU 사용을 감지합니다
애플리케이션 서비스를 유지할 때는 종종 CPU로 인해 비즈니스 차단을 겪어 비즈니스 중단이 발생합니다. CPU가 너무 높으면 과도한 사업 부하 또는 죽은주기와 같은 비정상적인주기 때문일 수 있습니다. 비즈니스 프로세스의 CPU는 스크립트를 통해 적시에 모니터링되며, CPU 활용이 비정상적 일 때 유지 보수 담당자에게 적시에 알릴 수 있으므로 유지 보수 담당자는 신속하게 분석, 위치 및 비즈니스 중단을 피할 수 있습니다. 다음 함수는 지정된 프로세스 ID의 프로세스 CPU 사용을 얻을 수 있습니다. 프로세스 ID로 매개 변수가 있습니다. 먼저 PS를 사용하여 프로세스 정보를 찾고 GREP -V를 통해 %CPU 행을 필터링하고 마지막으로 AWK를 통해 CPU 사용률의 정수 부분을 찾습니다 (시스템에 여러 CPU가있는 경우 CPU 사용률은 100 %를 초과 할 수 있습니다).
목록 2. 비즈니스 프로세스 CPU의 실시간 모니터링
코드 사본은 다음과 같습니다.
기능 getcpu
{
cpuvalue =`ps -p $ 1 -o pcpu | grep -v cpu | awk '{print $ 1}'| awk -F. '{print $ 1}'`
echo $ cpuvalue
}
다음 기능은 위의 함수 getCPU를 통해이 프로세스의 CPU 활용을 얻은 다음 조건부 명령문을 사용하여 CPU 사용이 한계를 초과하는지 여부를 결정하는 것입니다. 80%를 초과하면 (실제 상황에 따라 조정할 수 있음) 경보가 출력되며, 그렇지 않으면 일반 정보가 출력됩니다.
목록 3. CPU 사용이 한도를 초과하는지 여부를 결정하십시오
코드 사본은 다음과 같습니다.
함수 checkpu
{
PID = $ 1
cpu =`getcpu $ pid`
[$ CPU -GT 80]
그 다음에
{
Echo“CPU의 사용은 80%보다 큽니다”
}
또 다른
{
Echo“CPU의 사용은 정상입니다”
}
fi
}
샘플 데모 :
1) 소스 프로그램 (위에서 CFTestapp의 프로세스 ID가 쿼리되었다고 가정하면 11426)
코드 사본은 다음과 같습니다.
CheckCPU 11426
2) 결과 출력
코드 사본은 다음과 같습니다.
CPU의 사용은 75입니다
CPU의 사용은 정상입니다
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력에서 알 수 있듯이 : CFTESTAPP 프로그램의 현재 CPU 사용은 75%이며, 이는 정상이며 80%이상의 경보 한계는 없습니다.
프로세스 메모리 사용을 감지합니다
애플리케이션 서비스를 유지할 때 과도한 메모리 사용으로 인해 프로세스가 충돌하여 비즈니스 중단이 발생하는 경우가 종종 있습니다 (예 : 32 비트 프로그램이 해결할 수있는 최대 메모리 공간은 4G, 메모리를 초과하면 메모리가 실패하고 물리적 메모리도 제한적입니다). 과도한 메모리 사용량은 메모리 누출, 메시지 축적 등으로 인한 것일 수 있습니다. 비즈니스 프로세스의 메모리 사용량은 스크립트를 통해 적시에 적시에 모니터링 될 수 있으며, 메모리 사용이 적시에 적시에 처리되도록 메모리 사용이 비정상적 일 때 (SMS를 통한) 적시에 알람을 전송할 수 있습니다. 다음 함수는 지정된 프로세스 ID의 프로세스 메모리 사용을 얻을 수 있습니다. 프로세스 ID로 매개 변수가 있는데, 먼저 PS를 사용하여 프로세스 정보를 찾아 GREP -V를 통해 VSZ 라인을 필터링 한 다음 1000을 나누어 메모 바이트로 메모리 사용을 가져옵니다.
목록 4. 비즈니스 프로세스 메모리 사용 모니터링
코드 사본은 다음과 같습니다.
기능 getMem
{
memusage =`ps -o vsz -p $ 1 | grep -v vsz`
((Memusage /= 1000))))
echo $ memusage
}
다음 기능은 위의 함수 getMem을 통해이 프로세스의 메모리 사용을 얻은 다음 조건부 명령문을 사용하여 메모리 사용이 한계를 초과하는지 여부를 결정하는 것입니다. 1.6G를 초과하면 (실제 상황에 따라 조정할 수 있음) 알람이 출력되며, 그렇지 않으면 일반 정보가 출력됩니다.
리스팅 5. 메모리 사용이 한계를 초과하는지 여부를 결정하십시오
코드 사본은 다음과 같습니다.
mem =`getmem $ pid`
[$ mem -gt 1600]
그 다음에
{
Echo“메모리 사용은 1.6G보다 큽니다”
}
또 다른
{
Echo“메모리 사용은 정상입니다”
}
fi
샘플 데모 :
1) 소스 프로그램 (위에서 CFTestapp의 프로세스 ID가 쿼리되었다고 가정하면 11426)
코드 사본은 다음과 같습니다.
mem =`getmem 11426 '
Echo "메모리의 사용은 $ mem m"
[$ mem -gt 1600]
그 다음에
{
Echo "메모리 사용은 1.6G보다 큽니다"
}
또 다른
{
에코 "메모리의 사용은 정상입니다"
}
fi
2) 결과 출력
코드 사본은 다음과 같습니다.
메모리 사용은 248m입니다
메모리 사용은 정상입니다
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력에서 CFTESTAPP 프로그램의 현재 메모리 사용이 248m이며, 이는 정상이며 1.6G를 초과하는 경보 제한이 없음을 알 수 있습니다.
프로세스 핸들 사용을 감지합니다
애플리케이션 서비스를 유지할 때 과도한 핸들 사용으로 인해 비즈니스 중단이 발생합니다. 각 플랫폼은 제한된 사용으로 프로세스 핸들을 사용합니다. 예를 들어, Linux 플랫폼에서는 Ulimit n 명령 (Open Files (-n) 1024)를 사용하거나 /etc/security/limits.conf의 내용을보고 프로세스 핸들 제한을 얻을 수 있습니다. 핸들이 너무 높아지면 핸들 누출은 과도한 부하, 핸들 누출 등으로 인한 것일 수 있습니다. 비즈니스 프로세스 핸들 사용은 스크립트를 통해 적시에 모니터링되며, 적시에 적시에 처리하기 위해 비정상 (SMS를 통한 SMS와 같은)의 경우 적시에 알람을 전송할 수 있습니다. 다음 함수는 지정된 프로세스 ID의 프로세스 핸들 사용을 얻을 수 있습니다. 프로세스 ID로 매개 변수가 있습니다. 먼저 LS를 사용하여 프로세스 핸들 정보를 출력 한 다음 WC -L을 통해 출력 핸들 수를 계산합니다.
코드 사본은 다음과 같습니다.
기능 getDes
{
des =`ls/proc/$ 1/fd | wc -l`
echo $ des
}
다음 기능은 위의 함수 getDes를 통해이 프로세스의 핸들 사용을 얻은 다음 조건 문을 사용하여 핸들 사용이 한계를 초과하는지 여부를 결정하는 것입니다. 900을 초과하는 경우 (실제 상황에 따라 조정할 수 있음) 경보는 출력되며, 그렇지 않으면 일반 정보가 출력됩니다.
코드 사본은 다음과 같습니다.
des =`getdes $ pid`
[$ des -gt 900]
그 다음에
{
Echo“DES의 수는 900보다 큽니다”
}
또 다른
{
Echo“DES의 수는 정상입니다”
}
fi
샘플 데모 :
1) 소스 프로그램 (위에서 찾은 CFTESTAPP의 프로세스 ID가 11426이라고 가정)
코드 사본은 다음과 같습니다.
des =`getdes 11426`
echo "des의 수는 $ des"
[$ des -gt 900]
그 다음에
{
에코 "DE의 수는 900보다 큽니다"
}
또 다른
{
echo "des의 수는 정상입니다"
}
fi
2) 결과 출력
코드 사본은 다음과 같습니다.
DES의 수는 528입니다
DES의 수는 정상입니다
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력에서 CFTESTAPP 프로그램의 현재 핸들이 528이며, 이는 정상이며 900 이상의 경보 제한이 없음을 알 수 있습니다.
4) 명령 소개
WC : 지정된 파일의 바이트, 단어 및 줄 수를 통계하고 통계 결과를 출력에 표시합니다. 매개 변수 : -L 행 수를 계산합니다. -C 바이트 수를 계산하십시오. -W 수 카운트 단어 수.
TCP 또는 UDP 포트가 듣고 있는지 확인하십시오
포트 감지는 종종 시스템 리소스 감지, 특히 네트워크 통신에서 발생하는 경우 종종 포트 상태 감지가 매우 중요합니다. 때로는 프로세스, CPU, 메모리 등이 정상 상태 일 수 있지만 포트는 비정상 상태에 있으며 비즈니스는 정상적으로 실행되지 않습니다. 다음 함수는 지정된 포트가 듣고 있는지 여부를 결정할 수 있습니다. 감지 할 포트 인 매개 변수가 있습니다. 먼저 Netstat를 사용하여 포트 점유 정보를 출력 한 다음 GREP, AWK, WC를 통해 TCP 포트의 출력 번호를 필터링합니다. 두 번째 진술은 UDP 포트의 모니터 수를 출력하는 것입니다. TCP 및 UDP 포트가 모두 0 인 경우 0을 반환하고 그렇지 않으면 1을 반환하십시오.
목록 6. 포트 감지
코드 사본은 다음과 같습니다.
기능 듣기
{
tcplisteningnum =`netstat -an | Grep ": $ 1"| /N
awk '$ 1 == "tcp"&& $ nf == "듣기"{print $ 0}'| wc -l`
udplisteningnum =`netstat -an | grep ": $ 1" /n
| awk '$ 1 == "udp"&& $ nf == "0.0.0.0:*"{print $ 0}'| wc -l`
((ListeningNum = tcplisteningnum + udplisteningnum))))))
[$ listingNum == 0] 인 경우
그 다음에
{
에코 "0"
}
또 다른
{
에코 "1"
}
fi
}
샘플 데모 :
1) 소스 프로그램 (예 : 포트 8080의 상태가 듣고 있는지 쿼리)
코드 사본은 다음과 같습니다.
Islisten =`듣기 8080 '
[$ islisten -eq 1] 인 경우
그 다음에
{
에코 "포트가 듣고있다"
}
또 다른
{
Echo "포트가 듣고 있지 않다"
}
fi
2) 결과 출력
코드 사본은 다음과 같습니다.
포트가 듣고 있습니다
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력 에서이 Linux 서버의 8080 포트가 청취 상태에 있음을 알 수 있습니다.
4) 명령 소개
NETSTAT : IP, TCP, UDP 및 ICMP 프로토콜과 관련된 통계 데이터를 표시하는 데 사용되며 일반적으로 기계의 각 포트의 네트워크 연결 상태를 확인하는 데 사용됩니다. 매개 변수 : -a는 모든 연결에 소켓을 표시합니다. -N 도메인 이름 서버가 아닌 IP 주소를 직접 사용하십시오.
다음 함수는 또한 TCP 또는 UDP 포트가 정상 상태인지 여부를 감지하는 것입니다.
코드 사본은 다음과 같습니다.
tcp : netstat -an | egrep $ 1 | awk '$ 6 == "듣기"&& $ 1 == "tcp"{print $ 0}'
UDP : NETSTAT -AN | eGrep $ 1 | awk '$ 1 == "udp"&& $ 5 == "0.0.0.0:*"{print $ 0}'
명령 소개
egrep : 파일에서 지정된 문자열을 찾으십시오. Egrep의 실행 효과는 Grep -e와 같습니다. 사용 된 구문 및 매개 변수는 GREP 명령을 참조 할 수 있습니다. Grep과의 차이점은 문자열을 해석하는 방법입니다. EGREP는 확장 된 정규식 구문을 사용하여 해석되며 GREP는 기본 정규식 구문을 사용합니다. 확장 정규 표현식은 기본 정규 표현보다 더 완전한 표현 사양을 갖습니다.
실행 프로세스 수를 확인하십시오
때로는 서버에서 프로세스의 시작 수를 가져와야 할 수도 있습니다. 다음 기능은 프로세스 이름이 Cftestapp과 같은 실행중인 프로세스 수를 감지하는 것입니다.
코드 사본은 다음과 같습니다.
runnum =`ps -ef | grep -v vi | grep -v tail | grep "[ /] cftestapp"| grep -v grep | WC -L
시스템 CPU로드를 감지하십시오
서버를 유지할 때 과도한 시스템 CPU (사용)로드로 인해 때때로 비즈니스 중단이 발생합니다. 서버에서 여러 프로세스를 실행할 수 있습니다. 단일 프로세스의 CPU를 보는 것은 정상이지만 전체 시스템의 CPU로드는 비정상적 일 수 있습니다. 시스템 CPU로드는 스크립트를 통해 적시에 모니터링되며, 이상이 적시에 알람을 전송할 수 있으며, 이는 유지 보수 요원이 적시에 다루고 사고를 방지 할 수 있도록 촉진합니다. 다음 함수는 시스템 CPU 사용을 감지 할 수 있습니다. VMSTAT를 사용하여 시스템 CPU의 유휴 값을 5 배, 평균 값을 취한 다음 100과의 차이를 가져 와서 현재 CPU의 실제 점유 값을 얻으십시오.
코드 사본은 다음과 같습니다.
기능 getSyscpu
{
cpuidle =`vmstat 1 5 | sed -n '3, $ p' /n
| awk '{x = x + $ 15} end {print x/5}'| awk -f. '{print $ 1}'
cpunum =`echo "100- $ cpuidle"| bc`
에코 $ cpunum
}
샘플 데모 :
1) 소스 프로그램
코드 사본은 다음과 같습니다.
cpu =`getsyscpu '
Echo "시스템 CPU는 $ CPU"
[$ CPU -GT 90]
그 다음에
{
Echo "시스템 CPU 사용은 90%보다 큽니다"
}
또 다른
{
Echo "시스템 CPU의 사용은 정상입니다"
}
fi
2) 결과 출력
코드 사본은 다음과 같습니다.
시스템 CPU는 87입니다
시스템 CPU의 사용은 정상입니다
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력에서 Linux 서버 시스템의 현재 CPU 사용률은 87%이며 이는 정상이며 90%이상의 경보 제한이 없음을 알 수 있습니다.
4) 명령 소개
VMSTAT : 운영 체제의 가상 메모리, 프로세스 및 CPU 활동을 모니터링 할 수있는 가상 Meomory 통계의 약어.
매개 변수 : -N은주기적인 순환 출력 중에 출력 된 헤더 정보가 한 번만 표시되는 경우를 의미합니다.
시스템 디스크 공간을 감지하십시오
시스템 디스크 공간 감지는 시스템 리소스 감지의 중요한 부분입니다. 시스템 유지 보수 중에는 종종 서버 디스크 공간의 사용법을 확인해야합니다. 일부 비즈니스는 언제든지 전화 시트, 로그 또는 임시 파일을 작성해야하므로 디스크 공간이 소진되면 사업 중단을 유발할 수도 있습니다. 다음 함수는 현재 시스템 디스크 공간에서 디렉토리의 디스크 공간 사용을 감지 할 수 있습니다. 입력 매개 변수는 감지 해야하는 디렉토리 이름이며, DF를 사용하여 시스템 디스크 공간 사용 정보를 출력 한 다음 GREP 및 AWK 필터링을 통해 디렉토리의 디스크 공간 사용 백분율을 얻습니다.
코드 사본은 다음과 같습니다.
함수 getDiskSpc
{
[$# -ne 1]
그 다음에
반환 1
fi
폴더 = "$ 1 $"
디스크 스페이스 =`df -k | grep $ 폴더 | awk '{print $ 5}'| awk -f% '{print $ 1}'
echo $ 디스크 스페이스
}
샘플 데모 :
1) 소스 프로그램 (감지 디렉토리는 /boot)
코드 사본은 다음과 같습니다.
폴더 = "/boot"
디스크 스페이스 =`getDiskSpc $ 폴더 '
Echo "시스템 $ 폴더 디스크 공간은 $ diskspace%입니다"
[$ diskspace -gt 90] 인 경우
그 다음에
{
Echo "시스템 디스크 사용 ($ 폴더)은 90%보다 큽니다"
}
또 다른
{
Echo "시스템 디스크 사용 ($ 폴더)은 정상입니다."
}
fi
2) 결과 출력
코드 사본은 다음과 같습니다.
시스템 /부트 디스크 공간은 14%입니다.
시스템 디스크 (/boot) 사용은 정상입니다
[dyu@xilinuxbldsrv shell] $
3) 결과 분석
위의 출력에서 알 수 있듯이 : 현재이 Linux 서버 시스템의 /부트 디렉토리의 디스크 공간은 14%로 사용되었으며, 이는 정상이며 90% 이상의 경보 제한은 없습니다.
4) 명령 소개
DF : 파일 시스템의 디스크 공간 사용법을 확인하십시오. 이 명령은 하드 디스크가 점유 한 공간 및 남은 공간의 양과 같은 정보를 얻는 데 사용될 수 있습니다. 매개 변수 : -K는 K 바이트에 표시됩니다.
요약
Linux 플랫폼에서 Shell Script Monitoring은 서버 및 프로세스를 모니터링하는 매우 간단하고 편리하며 효과적인 방법으로 시스템 개발 및 프로세스 유지 관리 직원에게 매우 도움이됩니다. 위의 정보를 모니터링하고 경보를 보내는 것뿐만 아니라 프로세스 로그 및 기타 정보를 모니터링 할 수 있습니다. 이 기사가 모두에게 도움이되기를 바랍니다.