2012. 7. 23. 23:44
UNIX / Linux 간단한 쉘 스크립트 Etc.2012. 7. 23. 23:44
UNIX Linux SCX Cross Platform SCOM System Center XPlatform
SCOM 2012 프로젝트 중 UNIX 및 Linux 서버들에 대한 모니터링 규칙을 작성하면서 만든 간단한 쉘 스크립트들 입니다. vbs만 써 봤지 쉘 스크립트는 거의 처음이라 간단한 스크립트도 어렵군요.;;;
참고로, SCOM의 쉘 스크립트 규칙과 모니터는 두 줄 이상 반환되면 처리를 못 하더군요.. 그러므로, 필요로하는 값만! 반환되도록 스크립트를 만들어야 합니다. 에이전트 설치 시 함께 설치되는 CIM Provider를 이용해 보려고도 해 보았는데 오히려 결과 값을 가공해야 하는 과정이 필요해 그냥 범용적인 명령으로 처리했습니다.
프로세스 실행 여부 확인
# 실행 중인 프로세스 목록을 필터링해 개수가 1개 이상인 경우 GOOD, 개수가 0개인 경우 BAD 반환
if [ "$(ps -ef | grep <Process Name> | grep -v grep | wc -l)" != 0 ];then echo GOOD;else echo BAD;fi
메모리 사용률 모니터링
# SCX_MemoryStatisticalInformation 클래스를 쿼리해 여유 메모리 비율이 10% 이하면 BAD, 이상이면 GOOD 반환
if [ "$(/opt/microsoft/scx/bin/tools/scxcimcli xq "select * from SCX_MemoryStatisticalInformation" -n root/scx | grep PercentAvailableMemory | sed 's/\;$//' | awk {'print $3'})" -gt 10 ];then echo GOOD;else echo BAD;fi
프로세스의 CPU 사용률 수집 규칙을 위한 쉘 스크립트
# 매개 변수로 프로세스 이름을 받아 CPU 사용률을 반환
SCOM 2012 프로젝트 중 UNIX 및 Linux 서버들에 대한 모니터링 규칙을 작성하면서 만든 간단한 쉘 스크립트들 입니다. vbs만 써 봤지 쉘 스크립트는 거의 처음이라 간단한 스크립트도 어렵군요.;;;
참고로, SCOM의 쉘 스크립트 규칙과 모니터는 두 줄 이상 반환되면 처리를 못 하더군요.. 그러므로, 필요로하는 값만! 반환되도록 스크립트를 만들어야 합니다. 에이전트 설치 시 함께 설치되는 CIM Provider를 이용해 보려고도 해 보았는데 오히려 결과 값을 가공해야 하는 과정이 필요해 그냥 범용적인 명령으로 처리했습니다.
프로세스 실행 여부 확인
# 실행 중인 프로세스 목록을 필터링해 개수가 1개 이상인 경우 GOOD, 개수가 0개인 경우 BAD 반환
if [ "$(ps -ef | grep <Process Name> | grep -v grep | wc -l)" != 0 ];then echo GOOD;else echo BAD;fi
메모리 사용률 모니터링
# SCX_MemoryStatisticalInformation 클래스를 쿼리해 여유 메모리 비율이 10% 이하면 BAD, 이상이면 GOOD 반환
if [ "$(/opt/microsoft/scx/bin/tools/scxcimcli xq "select * from SCX_MemoryStatisticalInformation" -n root/scx | grep PercentAvailableMemory | sed 's/\;$//' | awk {'print $3'})" -gt 10 ];then echo GOOD;else echo BAD;fi
프로세스의 CPU 사용률 수집 규칙을 위한 쉘 스크립트
# 매개 변수로 프로세스 이름을 받아 CPU 사용률을 반환
# SCOM은 여러 행이 리턴되는 경우 처리를 못 해주기 때문에
# 프로세스가 여러 개인 경우 가장 큰 값만 반환
PROCESS=$1
if [ $# -ne 1 ]
then
echo ========================
echo Process Name is required.
exit
fi
# Parameter is Process Name
PROCESS=$1
PerfResult=`ps -e -o pcpu,args | grep $PROCESS | grep -v grep | awk {'print $1'} | awk '{printf("%d\n",$1 + 0.5)}'`
typeset currel_max=0
for i in $PerfResult
do
if [ $currel_max -lt $i ]
then
currel_max=$i
fi
done
echo $currel_max
프로세스의 CPU 사용률 모니터를 위한 쉘 스크립트
프로세스의 CPU 사용률 모니터를 위한 쉘 스크립트
# 매개 변수로 프로세스 이름과 임계 값을 받아
# 프로세스의 메모리 사용량과 임계 값을즈를 비교해
# 임계 값 아래면 GOOD, 임계 값 초과면 BAD을 반환
PROCESS=$1
THRESHOLD=$2
if [ $# -ne 2 ]
then
echo =========================
echo 2 Parameters are required
echo ProcessName and Threshold
exit
fi
PerfResult=`ps -e -o pcpu,args | grep $PROCESS | grep -v grep | awk {'print $1'} | awk '{printf("%d\n",$1 + 0.5)}'`
typeset currel_max=0
for i in $PerfResult
do
if [ $currel_max -lt $i ]
then
currel_max=$i
fi
done
if [ $currel_max -gt $THRESHOLD ]
then
echo BAD
else
echo GOOD
fi
프로세스의 메모리(가상 메모리 - top 명령의 VIRT 값) 크기 수집 규칙을 위한 쉘 스크립트
# 매개 변수로 프로세스 이름을 받아 가상 메모리 크기를 반환
프로세스의 메모리(가상 메모리 - top 명령의 VIRT 값) 크기 수집 규칙을 위한 쉘 스크립트
# 매개 변수로 프로세스 이름을 받아 가상 메모리 크기를 반환
# SCOM은 여러 행이 리턴되는 경우 처리를 못 해주기 때문에
# 프로세스가 여러 개인 경우 가장 큰 값만 반환
PROCESS=$1
if [ $# -ne 1 ]
then
echo ========================
echo Process Name is required.
exit
fi
# Parameter is Process Name
PROCESS=$1
PerfResult=`ps -eo vsz,args | grep $PROCESS | grep -v grep | awk {'print $1'}`
# In case of many instances, Return Maximum value
typeset currel_max=0
for i in $PerfResult
do
if [ $currel_max -lt $i ]
then
currel_max=$i
fi
done
echo $currel_max
프로세스의 메모리(가상 메모리 - top 명령의 VIRT 값) 크기 모니터를 위한 쉘 스크립트 #1
# 매개 변수로 프로세스 이름과 임계 값을 받아
프로세스의 메모리(가상 메모리 - top 명령의 VIRT 값) 크기 모니터를 위한 쉘 스크립트 #1
# 매개 변수로 프로세스 이름과 임계 값을 받아
# 프로세스의 메모리 사용량과 임계 값을 비교해
# 임계 값 아래면 GOOD, 임계 값 초과면 BAD을 반환
PROCESS=$1
THRESHOLD=$2
if [ $# -ne 2 ]
then
echo =========================
echo 2 Parameters are required
echo ProcessName and Threshold
exit
fi
PerfResult=`ps -eo vsz,args | grep $PROCESS | grep -v grep | awk {'print $1'}`
# In case of many instances, Return Maximum value
typeset currel_max=0
for i in $PerfResult
do
if [ $currel_max -lt $i ]
then
currel_max=$i
fi
done
if [ $currel_max -gt $THRESHOLD ]
then
echo BAD
else
echo GOOD
fi
# HP-UX에서는 export UNIX95=1 옵션을 주어야 합니다.
프로세스의 메모리(가상 메모리 - top 명령의 VIRT 값) 크기 모니터를 위한 쉘 스크립트 #2
# 매개 변수로 프로세스 이름과 하한, 상한 임계값을 받아
# 매개 변수로 프로세스 이름과 하한, 상한 임계값을 받아
# 프로세스의 메모리 사용량과 임계 값을 비교해 WARNING, ERROR 또는 GOOD을 반환
PROCESS=$1
THRESHOLD1=$2
THRESHOLD2=$3
if [ $# -ne 3 ]
then
echo ===================================================================
echo usage: MonMEM.sh [ProcessName] [Warning Threshold] [Error Threshold]
exit
fi
# HP-UX에서는 export UNIX95=1 옵션을 주어야 합니다.
PerfResult=`export UNIX95=1; ps -eo vsz,args | grep $PROCESS | grep -v grep | awk {'print $1'}`
# In case of many instances, Return Maximum value
typeset currel_max=0
for i in $PerfResult
do
if [ $currel_max -lt $i ]
then
currel_max=$i
fi
done
if [ $currel_max -gt $THRESHOLD1 ]
then
if [ $currel_max -gt $THRESHOLD2 ]
then
echo ERROR
else
echo WARNING
fi
else
echo GOOD
fi