728x90
Turnserver를 운영하다 보면 프로세스가 비정상적으로 종료되거나 트래픽 처리에 문제가 생길 수 있습니다.
이를 자동으로 탐지하고 대응하는 스크립트 작성법과 함께, 효율적인 로그 관리 방법까지 정리해 보겠습니다.
1. 준비 작업
iftop 설치
본 스크립트는 iftop을 사용해 트래픽을 모니터링합니다. 따라서, 먼저 iftop을 설치해야 합니다.
Ubuntu/Debian
sudo apt update
sudo apt install iftop
CentOS/RHEL
sudo yum install epel-release
sudo yum install iftop
설치가 완료되면 다음 명령으로 iftop이 정상적으로 작동하는지 확인해 보세요.
sudo iftop -h
2. Turnserver 프로세스 확인 및 재시작 스크립트
#!/bin/bash
# 환경 변수 설정
LD_LIBRARY_PATH=/usr/local/openssl-1.0.2k/lib:$LD_LIBRARY_PATH
PATH=/usr/local/openssl-1.0.2k/bin:$PATH
# 로그 파일 경로
YYYYMM="`date +%Y%m`"
logfile="/turnserver/check_turn_${YYYYMM}.log"
# 프로세스 상태 확인 후 구동
if [ `ps -ef | grep turnserver | grep -v grep | wc -l` -eq 0 ] ;
then
echo "[`date`] turnserver down" >> "$logfile"
echo "[`date`] `which openssl`" >> "$logfile"
cd /turnserver
turnserver -o -a -f -v
fi
exit 0
- ps -ef | grep turnserver | grep -v grep으로 TURN 서버 프로세스를 확인합니다.
- 실행 중인 프로세스가 없으면 로그를 기록하고 서버를 재시작합니다.
3. 트래픽 모니터링 스크립트
#!/bin/bash
sleep 30
# 디렉터리 설정
dir=/turnserver
# 15초간 트래픽 체크
traffic=`iftop -t -s 15 > $dir/iftop.log`
# 데이터 추출
data=`sed -n -e '/send rate/p' $dir/iftop.log | awk '{ print $5}' | sed 's/[^0-9.]//g' `
datanum=$(printf %.f $data);
line=`cat $dir/traffic.log | wc -l`
echo $datanum
# 트래픽 15 이하일 경우 프로세스 kill
if [ $datanum -lt 15 ]; then
echo $data 15 down
echo `date` turn traffic !!!!!error!!!!! $data MB >> $dir/error.log
kill -9 `ps -ef | grep turn | grep -v grep | awk '{print $2}'`
else
echo `date` turn traffic $data MB >> $dir/traffic.log
if [ $line -gt 1000 ]; then
`cat /dev/null > $dir/traffic.log`
fi
fi
- 트래픽 측정
- iftop -t -s 15로 15초 동안 트래픽을 측정합니다.
- sed와 awk를 이용해 send rate 값을 추출하고 숫자만 남깁니다.
- 트래픽 확인
- 측정된 트래픽이 15 Mbps 미만일 경우 로그를 남기고 TURN 서버를 종료합니다.
- 서버 종료
- ps -ef | grep turn으로 서버 프로세스를 찾은 후 kill -9 명령으로 종료합니다.
- 로그 관리
- 트래픽 로그 파일이 1000줄을 초과하면 초기화합니다.
4. 로그 관리 스크립트
오래된 로그를 주기적으로 삭제하기 위한 스크립트입니다.
#!/bin/bash
cd /root
find ./*.log -ctime +7 -exec rm -f {} \;
- /root 디렉터리에서 .log 파일 중 7일 이상 지난 파일을 삭제합니다.
5. 스크립트 Crontab 등록
* * * * * /bin/bash /turnserver/check_turn_process.sh
* * * * * /bin/bash /turnserver/check_traffic.sh
0 0 * * * /bin/bash /root/logdel.sh
6. 스크립트 내용 수정 (내용 추가)
pgrep 사용
ps -ef | grep 대신 pgrep 명령어를 사용하면 코드가 간결해집니다.
if ! pgrep -x "turnserver" > /dev/null; then
echo "[`date`] turnserver down" >> "$logfile"
cd /turnserver
turnserver -o -a -f -v
fi
- 장점
- pgrep -x는 정확히 일치하는 프로세스 이름만 확인합니다.
- 불필요한 파이프(grep -v grep)를 제거하여 효율적입니다.
awk로 데이터 추출 단순화
sed와 awk를 조합하지 않고 awk만으로도 동일한 작업이 가능합니다.
data=$(awk '/send rate/ { gsub(/[^0-9.]/, "", $5); print $5 }' "$dir/iftop.log")
- 장점
- 데이터 추출과 필터링을 한 단계로 처리해 코드가 간결해집니다.
728x90
반응형
'OS > Linux' 카테고리의 다른 글
Linux - CentOS 7/8 & Ubuntu 18/20 서버 튜닝: 성능과 안정성을 높이는 방법 (0) | 2024.11.27 |
---|---|
Linux - OpenSSL 소스 설치 가이드: SSH 및 NTP 데몬 문제 해결과 올바른 설정 (0) | 2024.11.21 |
Linux - CentOS 7 프로세스 크래시 디버깅 (0) | 2024.11.14 |
Linux - CentOS 8 네트워크 설정(NetworkManager / nmcli) (0) | 2024.11.13 |
Linux - Crontab에서 Command Not Found 오류 해결 (0) | 2024.11.12 |