서버를 운영 및 유지 관리하는 과정에서 CPU 부하 모니터링, 디스크 사용량 모니터링, 프로세스 번호 모니터링 등 서버의 다양한 리소스를 모니터링하여 적절한 조치가 취해지면 즉시 알람 및 알림을 제공해야 하는 경우가 많습니다. 시스템 관리자에게 이상이 발생했습니다. 이 기사에서는 Linux 시스템에서 몇 가지 일반적인 모니터링 요구 사항과 셸 스크립트 작성을 소개합니다.
기사 디렉토리:
1.Linux는 Shell을 사용하여 프로세스가 존재하는지 확인합니다
2.Linux는 Shell을 사용하여 프로세스 CPU 사용률을 감지합니다
3.Linux는 Shell을 사용하여 프로세스 메모리 사용량을 감지합니다
4.Linux는 Shell을 사용하여 프로세스 핸들 사용을 감지합니다
5.Linux는 Shell을 사용하여 TCP 또는 UDP 포트가 수신 대기 중인지 확인합니다
6.Linux는 Shell을 사용하여 특정 프로세스 이름의 실행 중인 프로세스 수를 확인합니다
7.Linux는 Shell을 사용하여 시스템 CPU 로드를 감지합니다
8.Linux는 Shell을 사용하여 시스템 디스크 공간을 감지합니다.
9. 요약
프로세스가 존재하는지 확인
프로세스를 모니터링할 때 일반적으로 프로세스 ID를 가져와야 합니다. 프로세스 ID는 프로세스의 고유 식별자입니다. 그러나 때로는 서버에서 서로 다른 사용자로 실행되는 동일한 프로세스 이름을 가진 여러 프로세스가 있을 수 있습니다. 다음 함수 GetPID 지정된 사용자 하에서 지정된 프로세스 이름의 프로세스 ID를 가져오는 기능을 제공합니다(현재는 이 사용자 하에서 이 프로세스 이름으로 프로세스 시작을 고려함). 여기에는 사용자 이름과 프로세스 이름이라는 두 가지 매개변수가 있습니다. 먼저 ps를 사용하여 프로세스 정보를 찾고 동시에 grep을 사용하여 필요한 프로세스를 필터링하고 마지막으로 sed 및 awk를 사용하여 필요한 프로세스의 ID 값을 찾습니다(이 기능은 실제 상황에 따라 수정 가능) , 기타 정보를 필터링해야 하는 경우 등).
목록 1. 프로세스 모니터링
샘플 데모:
1) 소스 프로그램(예를 들어 사용자가 루트이고 프로세스 이름이 CFTestApp인 프로세스 ID를 찾습니다.)
3) 결과 분석
위 출력에서 볼 수 있듯이 11426은 루트 사용자 아래 CFTestApp 프로그램의 프로세스 ID입니다.
4) 명령어 소개
1. ps: 시스템에서 즉시 프로세스 정보를 봅니다. 매개변수: -u
때로는 프로세스가 시작되지 않을 수도 있습니다. 프로세스 ID가 존재하는지 확인하는 기능은 다음과 같습니다.
프로세스가 존재하지 않습니다.
# 프로세스가 존재하는지 확인
If [ "-$PID" == "-" ]
그럼
{
echo "해당 프로세스가 존재하지 않습니다."
}
안녕
프로세스 CPU 사용률 감지
애플리케이션 서비스를 유지 관리하다 보면 CPU 사용량이 너무 많아 업무 정체 및 업무 중단을 초래하는 상황이 자주 발생합니다. 과도한 CPU는 비즈니스 과부하 또는 무한 루프와 같은 비정상적인 상황으로 인해 발생할 수 있습니다. 비즈니스 프로세스 CPU는 스크립트를 통해 지속적으로 모니터링됩니다. 적시에 업무 중단 등을 피하십시오. 다음 함수는 지정된 프로세스 ID에 대한 프로세스 CPU 사용률을 가져옵니다. 프로세스 ID에 대한 매개변수가 있습니다. 먼저 ps를 사용하여 프로세스 정보를 찾고, grep -v를 통해 %CPU 행을 필터링하고, 마지막으로 awk를 사용하여 CPU 사용률의 정수 부분을 찾습니다(여러 개가 있는 경우). 시스템의 CPU, CPU 사용률이 100%를 초과할 수 있습니다.
List 2. 업무프로세스 CPU 실시간 모니터링
목록 3. CPU 사용률이 한도를 초과하는지 확인
샘플 시연:
1) 소스 프로그램 (위에서 CFTestApp의 프로세스 ID를 11426으로 쿼리했다고 가정)
위 출력에서 볼 수 있듯이 CFTestApp 프로그램의 현재 CPU 사용량은 75%이며 이는 정상이며 80% 경보 제한을 초과하지 않습니다.
프로세스 메모리 사용량 감지
응용 프로그램 서비스를 유지 관리하다 보면 과도한 메모리 사용으로 인해 프로세스가 충돌하여 업무가 중단되는 상황이 자주 발생합니다(예: 32비트 프로그램의 주소 지정 가능한 최대 메모리 공간은 4G입니다. 이를 초과하면 메모리 응용 프로그램이 실패하고 실제 메모리도 제한됩니다. 과도한 메모리 사용량은 메모리 누수, 메시지 누적 등으로 인해 발생할 수 있습니다. 비즈니스 프로세스의 메모리 사용량을 스크립트를 통해 지속적으로 모니터링하여 메모리 사용량이 비정상적일 때 적시에(예: SMS를 통해) 알람을 보낼 수 있습니다. 유지보수 담당자가 적시에 이를 처리할 수 있습니다. 다음 함수는 지정된 프로세스 ID에 대한 프로세스 메모리 사용량을 가져옵니다. 프로세스 ID에 대한 매개변수가 있으며, 먼저 ps를 사용하여 프로세스 정보를 찾고, grep -v를 통해 VSZ 라인을 필터링한 다음, 1000으로 나누어 메모리 사용량을 메가바이트 단위로 가져옵니다.
목록 4. 비즈니스 프로세스의 메모리 사용량 모니터링
목록 5. 메모리 사용량이 한도를 초과하는지 확인
1) 소스 프로그램 (위에서 CFTestApp의 프로세스 ID를 11426으로 쿼리했다고 가정)
위 출력에서 볼 수 있듯이 CFTestApp 프로그램의 현재 메모리 사용량은 248M이며 이는 정상이며 1.6G 경보 제한을 초과하지 않습니다.
프로세스 핸들 사용 감지
애플리케이션 서비스를 유지 관리할 때 과도한 핸들 사용으로 인해 업무 중단이 발생하는 경우가 많습니다. 각 플랫폼에서 프로세스 핸들의 사용은 제한되어 있습니다. 예를 들어 Linux 플랫폼에서는 ulimit –n 명령(파일 열기(-n) 1024)을 사용하거나 /etc/security/limits.conf의 내용을 볼 수 있습니다. 프로세스 핸들 제한을 가져옵니다. 과도한 핸들 사용은 과도한 부하, 핸들 누수 등으로 인해 발생할 수 있습니다. 업무 프로세스의 핸들 사용은 스크립트를 통해 지속적으로 모니터링되며, 이상 발생 시 적시에 알림(예: SMS를 통해)을 전송하여 유지 관리 담당자가 확인할 수 있습니다. 적시에 처리하십시오. 다음 함수는 지정된 프로세스 ID에 대한 프로세스 핸들 사용량을 가져옵니다. 프로세스 ID에 대한 매개변수가 하나 있습니다. 먼저 ls를 사용하여 프로세스 핸들 정보를 출력한 다음 wc -l을 사용하여 출력 핸들 수를 계산합니다.
샘플 데모:
1) 소스 프로그램 (위 쿼리에서 찾은 CFTestApp의 프로세스 ID가 11426이라고 가정)
2) 결과 출력
위 출력에서 볼 수 있듯이 CFTestApp 프로그램의 현재 핸들 사용량은 528이며 이는 정상이며 900 알람 제한을 초과하지 않습니다.
4) 명령어 소개
wc: 지정된 파일의 바이트, 단어, 줄 수를 계산하고 통계 결과를 표시 및 출력합니다. 매개변수: -l은 행 수를 계산합니다. -c는 바이트를 계산합니다. -w 단어 수를 계산합니다.
TCP 또는 UDP 포트가 수신 대기 중인지 확인
포트 감지는 시스템 리소스 감지에서 자주 발생하며, 특히 네트워크 통신 상황에서는 포트 상태 감지가 매우 중요한 경우가 많습니다. 때로는 프로세스, CPU, 메모리 등은 정상적인 상태인데 포트가 비정상 상태가 되어 비즈니스가 정상적으로 운영되지 않는 경우가 있습니다. 다음 함수는 지정된 포트가 수신 대기 중인지 여부를 확인할 수 있습니다. 감지할 포트에 대한 매개변수가 있습니다. 먼저 netstat를 사용하여 포트 점유 정보를 출력한 다음 grep, awk 및 wc를 통해 수신 대기 중인 TCP 포트 수를 필터링합니다. 두 번째 명령문은 모니터링하는 UDP 포트 수를 출력합니다. .TCP 및 UDP 포트 수신이 모두 0이면 0을 반환하고, 그렇지 않으면 1을 반환합니다.
목록 6. 포트 감지
위 출력에서 볼 수 있듯이 이 Linux 서버의 포트 8080은 수신 대기 상태입니다.
4) 명령어 소개
netstat: IP, TCP, UDP, ICMP 프로토콜과 관련된 통계 데이터를 표시하는 데 사용됩니다. 일반적으로 머신의 각 포트의 네트워크 연결을 확인하는 데 사용됩니다. 매개변수: -a는 연결의 모든 소켓을 표시합니다. -n 도메인 네임 서버를 통하지 않고 IP 주소를 직접 사용합니다.
다음 함수는 특정 TCP 또는 UDP 포트가 정상 상태인지 여부도 감지합니다.
egrep: 파일에서 지정된 문자열을 찾습니다. egrep의 실행 효과는 grep -E와 같습니다. 사용되는 구문과 매개 변수는 grep 명령을 참조할 수 있습니다. grep과의 차이점은 문자열을 해석하기 위해 확장 정규 표현식 구문을 사용하는 반면 grep은 기본 정규 표현식을 사용합니다. 구문, 확장 정규식은 기본 정규식보다 더 완전한 표현식 사양을 갖습니다.
특정 프로세스 이름의 실행 중인 프로세스 수 보기
때때로 서버에서 시작된 프로세스 수를 가져와야 할 수도 있습니다. 다음 함수는 실행 중인 프로세스 수를 감지하는 것입니다. 예를 들어 프로세스 이름은 CFTestApp입니다.
서버 유지 관리를 수행할 때 과도한 시스템 CPU(사용률) 부하로 인해 업무 중단이 발생하는 경우가 있습니다. 서버에서 여러 프로세스가 실행 중일 수 있습니다. 단일 프로세스의 CPU를 보는 것은 정상이지만 전체 시스템의 CPU 부하가 비정상적일 수 있습니다. 시스템 CPU 부하를 스크립트를 통해 지속적으로 모니터링하고, 이상 발생 시 적시에 알람을 보내 유지보수 담당자가 적시에 처리하고 사고를 예방할 수 있습니다. 다음 함수는 시스템 CPU 사용량을 감지할 수 있습니다. vmstat를 사용하여 시스템 CPU의 유휴 값을 5회 가져오고 평균을 낸 후 그 차이를 100에서 계산하여 실제 CPU 사용량 값을 가져옵니다.
1) 소스 프로그램
3) 결과 분석
위 출력에서 볼 수 있듯이 현재 Linux 서버 시스템의 CPU 사용률은 87%이며 이는 정상이며 90% 경보 제한을 초과하지 않습니다.
4) 명령어 소개
vmstat: Virtual Meomory Statistics(가상 메모리 통계)의 약자로 운영체제의 가상 메모리, 프로세스, CPU 활동을 모니터링할 수 있습니다.
매개변수: -n은 출력 헤더 정보가 주기적인 루프 출력 중에 한 번만 표시됨을 나타냅니다.
시스템 디스크 공간 확인
시스템 디스크 공간 감지는 시스템 리소스 감지의 중요한 부분입니다. 시스템 유지 관리 중에 서버 디스크 공간 사용량을 확인해야 하는 경우가 많습니다. 일부 기업에서는 수시로 통화 메모, 로그 또는 임시 파일을 작성해야 하기 때문에 디스크 공간을 모두 사용하면 업무 중단이 발생할 수도 있습니다. 다음 기능은 현재 시스템에서 디렉토리의 디스크 공간 사용량을 감지할 수 있습니다. 입력 매개변수 감지해야 하는 디렉토리 이름에 대해 df를 사용하여 시스템 디스크 공간 사용량 정보를 출력한 다음 grep 및 awk를 통해 필터링하여 특정 디렉토리의 디스크 공간 사용량 비율을 얻습니다.
샘플 데모:
1) 소스 프로그램(탐지 디렉터리는 /boot)
2) 결과 출력
위 출력에서 이 Linux 서버 시스템의 /boot 디렉터리에 있는 디스크 공간의 14%가 사용되었음을 알 수 있습니다. 이는 정상이며 90% 사용 경보 제한을 초과하지 않습니다.
4) 명령어 소개
df: 파일 시스템의 디스크 공간 사용량을 확인합니다. 이 명령을 사용하면 하드 디스크가 얼마나 많은 공간을 차지하고 있는지, 현재 남은 공간은 얼마나 되는지 등의 정보를 얻을 수 있습니다. 매개변수: -k k 바이트로 표시합니다.
요약
Linux 플랫폼에서 쉘 스크립트 모니터링은 서버와 프로세스를 모니터링하는 매우 간단하고 편리하며 효과적인 방법입니다. 시스템 개발자와 프로세스 유지관리자에게 매우 유용합니다. 위 정보를 모니터링하고 알람을 보낼 수 있을 뿐만 아니라 프로세스 로그 및 기타 정보도 모니터링할 수 있습니다. 이 기사가 모든 사람에게 도움이 되기를 바랍니다.