base
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
Revision 0957
|
||||
-------------------
|
||||
수정일 : 2014-03-03
|
||||
수정자 : 노경민
|
||||
|
||||
- CHG: 패키지관련 파일 tags 디렉토리 이동
|
||||
- python3_dist_CentOS54.tar.gz 파일 tags/release/utils/log_manager 디렉토리 이동
|
||||
|
||||
|
||||
Revision 0944
|
||||
-------------------
|
||||
수정일 : 2014-01-28
|
||||
수정자 : 정기욱
|
||||
|
||||
- CHG: 스케줄 시작 시각 수정
|
||||
- log_manager.py 의 START_TIME 값 수정
|
||||
|
||||
Revision 0909
|
||||
-------------------
|
||||
수정일 : 2013-12-27
|
||||
수정자 : 정기욱
|
||||
|
||||
- NEW: SVN 신규 등록
|
||||
- log_manager 소스 등록
|
||||
@@ -0,0 +1,135 @@
|
||||
status-save.php
|
||||
=============================================
|
||||
|
||||
-------------------
|
||||
작성일 : 2013-12-24
|
||||
작성자 : 정기욱
|
||||
-------------------
|
||||
|
||||
|
||||
Contents
|
||||
========
|
||||
|
||||
- 개요
|
||||
- 설치 바이너리 위치
|
||||
- 설치 절차
|
||||
- 알려진 문제
|
||||
- License
|
||||
|
||||
|
||||
개요
|
||||
========
|
||||
|
||||
Cloud Storage 내에 운영되는 각 서버는 다양한 경로에 서비스 관련 log를 남기고 있다. 이 log를 정리(삭제)하기 위해 각
|
||||
|
||||
제어서버의 crontab 과 FHS의 rc_mngd가 그 역활을 하고있으나 log 삭제에 대한 롤이 없어 방치된 log 또한 존재한다.
|
||||
|
||||
또한 각 데몬들의 배포 시 항상 crontab에 log 삭제에 대한 항목을 넣어주어야 하는 불편함이 따른다.
|
||||
|
||||
|
||||
일부 데몬들에 해당 기능 추가가 가능하나 소스 수정의 부가적인 작업이 필요하며
|
||||
|
||||
DBLB 나 RCDB 처럼 별도의 서비스 데몬이 추가되지 않은 장비의 경우 이 또한 적용할 수 없다.
|
||||
(참고로 FHS는 fimngd에 해당 기능이 탑제되어 있다.)
|
||||
|
||||
|
||||
이 문제를 해결하기 위해서 기존 서비스 데몬과 별개로 작동하는 'log 자동 삭제 프로세스'을 개발하게되었으며 그 명칭이 log_manager 이다.
|
||||
|
||||
log_manager 는 python 으로 작성된 log_manager.py 스크립트를 수행하는 역활을 하며 수행 결과는 시스템log(/var/log/messages)에 남겨지게 된다.
|
||||
|
||||
|
||||
설치 바이너리 위치
|
||||
==================
|
||||
|
||||
세부사항은 '설치 절차' 참고
|
||||
|
||||
/user/service/python3
|
||||
/user/service/bin/log_manager
|
||||
/user/service/scripts/log_manager.py
|
||||
|
||||
|
||||
설치 절차
|
||||
=========
|
||||
|
||||
가. yum 을 사용하여 설치
|
||||
|
||||
# yum install log_manager
|
||||
|
||||
나. 바이너리 복사를 통한 설치
|
||||
|
||||
1. Pyhon 바이너리 설치
|
||||
# cd /user/service/
|
||||
# tar xvzf python3_dist_CentOS54.tar.gz
|
||||
|
||||
2. log_manager 배포
|
||||
|
||||
# cp log_manager /user/service/log_manager
|
||||
# cp log_manager.py /user/service/log_manager.py
|
||||
|
||||
|
||||
|
||||
다. 수동 설치
|
||||
status-save.sh 에 포함된 php 스크립트 구동을 위해 서버에 PHP 관련 패키지를 설치한다.
|
||||
|
||||
1. Python Source 설치
|
||||
|
||||
# wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tgz
|
||||
# tar xvzf Python-3.3.2.tgz
|
||||
# cd Python-3.3.2
|
||||
# ./configure --prefix=/user/service/python3
|
||||
# make
|
||||
# make install
|
||||
|
||||
2. Python 추가 Class 설치(source 다운로드 실패 시 다음 페이지 참조 https://pypi.python.org/pypi/schedule)
|
||||
|
||||
# wget https://pypi.python.org/packages/source/s/schedule/schedule-0.2.1.tar.gz
|
||||
# tar xvzf schedule-0.2.1.tar.gz
|
||||
# cd schedule-0.2.1
|
||||
# /user/service/python3/bin/python3 setup.py install
|
||||
|
||||
3. log_manager.py 수행 스크립트 작성
|
||||
|
||||
# vi /user/service/bin/log_manager
|
||||
|
||||
/user/service/python3/bin/python3 -u /user/service/python3/log_manager.py $
|
||||
|
||||
4. log_manager.py 를 /user/service/bin 에 복사해 놓는다.
|
||||
|
||||
# cat /user/service/bin/log_manager.py
|
||||
|
||||
# coding: utf-8
|
||||
|
||||
import schedule # ----> schedule.every()
|
||||
import time # ----> time.sleep()
|
||||
import random # ----> random.randint()
|
||||
import syslog # ----> syslog.syslog()
|
||||
import os # ----> os.popen()
|
||||
|
||||
|
||||
FIND_DIR = '/user/service/logs /user/db/pgsql/logs /log/db/logs /usr/service/logs/soldrived' # log 파일 디렉토리 위치 설정
|
||||
FIND_CONDITION = ' -atime +29 -a -type f -a -name *.log ' # 삭제할 log 파일 검색 조건
|
||||
START_TIME = '06:00' # log 파일 삭제 시각 설정
|
||||
|
||||
|
||||
def job1(): # job1()은
|
||||
x = random.randint(1,7000) # Class random()의 randint 기능으로 x의 정수 범위를 지정하고
|
||||
time.sleep(x) # 초 단위의 x의 시간 동안 다음 라인의 수행을 중지시킨다.
|
||||
cmd1 = "'find " + FIND_DIR + FIND_CONDITION + "| wc -l 2>&1'" #
|
||||
work1 = os.popen(cmd1).readline() # Class os()의 popen 기능으로 cmd1을 수행시키고 readline() 모듈로 그 결과값을 읽어 드린다.
|
||||
syslog.syslog(str("Will be deleted log files: " + work1)) # Class syslog()의 syslog 기능으로 시스템log(/var/log/messages)에 work1의 결과를 기록한다.
|
||||
cmd2 = "'find " + FIND_DIR + FIND_CONDITION + "|xargs rm -rf 2>&1'" #
|
||||
work2 = os.popen(cmd2) # Class os()의 popen 기능으로 cmd2을 수행시킨다.
|
||||
|
||||
|
||||
schedule.every(1).day.at(START_TIME).do(job1) # Class schedule()의 every 기능으로 START_TIME에 지정된 시각에 job1을 수행하고
|
||||
while True: #
|
||||
schedule.run_pending() #
|
||||
time.sleep(10) # 매 10초 마다 반복적으로 스케줄러가 지정된 시각에 동작할 수 있도록 한다.
|
||||
|
||||
|
||||
알려진 문제
|
||||
===========
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
/user/service/python3/bin/python3 -u /user/service/bin/log_manager.py &
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# coding: utf-8
|
||||
|
||||
import schedule # ----> schedule.every()
|
||||
import time # ----> time.sleep()
|
||||
import random # ----> random.randint()
|
||||
import syslog # ----> syslog.syslog()
|
||||
import os # ----> os.popen()
|
||||
|
||||
|
||||
FIND_DIR = '/user/service/logs /user/db/pgsql/logs /log/db/logs /usr/service/logs/soldrived' # log 파일 디렉토리 위치 설정
|
||||
FIND_CONDITION = ' -atime +29 -a -type f -a -name *.log ' # 삭제할 log 파일 검색 조건
|
||||
START_TIME = '5:00' # log 파일 삭제 시각 설정
|
||||
|
||||
|
||||
def job1(): # job1()은
|
||||
x = random.randint(1,7000) # Class random()의 randint 기능으로 x의 정수 범위를 지정하고
|
||||
# print(x)
|
||||
time.sleep(x) # 초 단위의 x의 시간 동안 다음 라인의 수행을 중지시킨다.
|
||||
cmd1 = "'find " + FIND_DIR + FIND_CONDITION + "| wc -l 2>&1'" #
|
||||
work1 = os.popen(cmd1).readline() # Class os()의 popen 기능으로 cmd1을 수행시키고 readline() 모듈로 그 결과값을 읽어 드린다.
|
||||
syslog.syslog(str("Will be deleted log files: " + work1)) # Class syslog()의 syslog 기능으로 시스템log(/var/log/messages)에 work1의 결과를 기록한다.
|
||||
cmd2 = "'find " + FIND_DIR + FIND_CONDITION + "|xargs rm -rf 2>&1'" #
|
||||
work2 = os.popen(cmd2) # Class os()의 popen 기능으로 cmd2을 수행시킨다.
|
||||
|
||||
|
||||
schedule.every(1).day.at(START_TIME).do(job1) # Class schedule()의 every 기능으로 START_TIME에 지정된 시각에 job1을 수행하고
|
||||
while True: #
|
||||
schedule.run_pending() #
|
||||
time.sleep(10) # 매 10초 마다 반복적으로 스케줄러가 지정된 시각에 동작할 수 있도록 한다.
|
||||
Reference in New Issue
Block a user