etc

OSM의 연결상태 모니터링 기능 (리눅스 크론탭)

inderrom 2023. 8. 3. 11:22

OSM API의 연결상태를 주기적으로 모니터링하기 위한 기능개발


1. 쉘 스크립트 작성 : PSQL 연결(데이터베이스) 및  LOG를 DB에 저장

  • 리눅스 접속 
  •  쉘 스크립트 생성 : vi [파일명]  
#!/bin/bash 

url="https://tile.openstreetmap.org"

# 2>&1은 에러 로그 뿐만 아닌 정상 로그도 가져오는 것
response=$(curl -I "$url" 2>&1)

# 변수에서 "HTTP/"을 찾아 대소문자 구분 없이(-i) 찾은 뒤, 
# 그 결과에서 두 번째 컬럼(공백으로 구분된 부분) 즉, HTTP 상태 코드를 http_status 변수에 저장
http_status=$(echo "$response" | grep -i "HTTP/" | awk '{print $2}')

# 데이터타입이 timestamp
current_time=$(date +"%Y-%m-%d %H:%M:%S")

echo "URL : $url"
echo "Response : $response"
echo "HTTP STATUS : $http_status"
echo "Current Time : $current_time"
                  
if [ "$http_status" == "200" ]; then
        
        log_message="$response"
      
        success=1
else 
        log_message="$response"
    
        success=0
fi  
    
echo "Log Message : $log_message"
echo "Success : $success"

# 보안을 위해 비밀번호는 환경변수를 사용하여 입력한다.
export PGPASSWORD="password"

psql -h 호스트주소 -p 포트번호  -d 데이터모델 -U 유저명 <<EOF
INSERT INTO 테이블명 (컬럼1,컬럼2,컬럼3)
VALUES ('$current_time', '$log_message', '$success');
EOF

echo " PSQL 로그 저장 완료"

 

 

2. 실행 권한을 준다.

chmod -x scripts.sh

 

 

3. 크론탭 작성

# 크론탭 작성
crontab -e
# 크론탭 리스트
crontab -l

- 원하는 주기에 맞게 작성하면 된다. 

ex) 매분마다 실행시 ( 꼭 *에 띄어쓰기)

* * * * * /path/scripts.sh

 

4. 크론탭 로그 위치

tail -f /var/log/syslog

 

*** 로그에서 No MTA installed, discarding output 에러가 발생하는 경우

- 메일전송 관리자가 없어서 발생하는 오류. 아래 명령어 입력

sudo apt-get install postfix

 


만약, 실행시 DB에 저장되지 않는 경우 여러가지가 존재하지만

1. ./scripts.sh 명령어를 통하여 스크립트가 실행되는지 확인.

-> 나의 경우에는 date 형식을 지키지 않아  insert가 제대로 안되었다. 형식을 고쳐주니 바로 해결됨.

2. 이외에도 방화벽이나 네트워크 문제

3. 데이터베이스 사용자 권한

4. 스크립트 실행권한

5. 커넥션 오류 

정도를 살펴봐야할 것이다.