본문 바로가기

OS/Linux

Linux - Turnserver 프로세스 및 트래픽 문제 자동화

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
  1. ps -ef | grep turnserver | grep -v grep으로 TURN 서버 프로세스를 확인합니다.
  2. 실행 중인 프로세스가 없으면 로그를 기록하고 서버를 재시작합니다.

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
  1. 트래픽 측정
    • iftop -t -s 15로 15초 동안 트래픽을 측정합니다.
    • sed와 awk를 이용해 send rate 값을 추출하고 숫자만 남깁니다.
  2. 트래픽 확인
    • 측정된 트래픽이 15 Mbps 미만일 경우 로그를 남기고 TURN 서버를 종료합니다.
  3. 서버 종료
    • ps -ef | grep turn으로 서버 프로세스를 찾은 후 kill -9 명령으로 종료합니다.
  4. 로그 관리
    • 트래픽 로그 파일이 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
반응형