달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
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은 여러 행이 리턴되는 경우 처리를 못 해주기 때문에
# 프로세스가 여러 개인 경우 가장 큰 값만 반환

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 사용률 모니터를 위한 쉘 스크립트 

# 매개 변수로 프로세스 이름과 임계 값을 받아
# 프로세스의 메모리 사용량과 임계 값을즈를 비교해
# 임계 값 아래면 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 값) 크기 수집 규칙을 위한 쉘 스크립트
 
# 매개 변수로 프로세스 이름을 받아 가상 메모리 크기를 반환
# 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

# 매개 변수로 프로세스 이름과 임계 값을 받아
# 프로세스의 메모리 사용량과 임계 값을 비교해
# 임계 값 아래면 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



프로세스의 메모리(가상 메모리 - 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
 
:
Posted by 커널64