본문 바로가기
쉘스크립트애들

에러가 연달아 발생하고, 연속의 통계가 어떠냐에 따라 ifTTT 해보기

by 혜룐 2016. 9. 2.


디비에 저장하지 않고 5분마다의 에러통계를 이용해 30분의 에러통계를 구해,

쪼꼼 더 스마트하게 모니터링을 해보려고 한다.


보통.. 특정 주기마다 모니터링을 하고 임계치보다 높으면 노티를 받는데,

그때마다 노티를 받으면 시간이 지나면 그 노티를 무시하게 되는..ㅎ

그래서.. 좀 더 디벨롭하면.. 그 노티를 무시하지 않게 중요한 시점에 잘 쏴주는걸 생각해보게 된다.


여러생각을 하겠지만.. 여튼. 나는

에러가 연달아 발생하고, 연속의 통계가 어떠냐에 따라 노티를 받거나, 후속처리를 하는게 맞다고 판판단되는 유형을 작업해보았다.


어플리케이션로그를 걍 읽는거라 파일에 로깅하는걸 선택했다.

그리고 디비에 넣어 히스토리를 알순 없겠지만 이 스케쥴링을 젠킨스를 이용하기때문에,히스토리가 필요하면 할수는 있긴함


1) 5분에 통계를 저장하는 마이너룰

def hello():


status = status_bla()
_, total_minor_fileline = minor_rule(status)

if total_minor_fileline % 5 == 0:
major_rule()


2) 마이너룰과 메이저룰은 비슷하다.

단, 메이저룰에서는 에러율에 따라 해야 할일들이 정해져있따. Ifttt!!


노티를 보낸다던지, 특정 어딘가에 설정값을 저장한다던지. ifttt 를 하도록 되어있어서

그래서 마이너룰이 비정상적이거나, 데이터가 없다면 메이저파일을 지우는게 필요하다.

아니면 메이저파일 안에 timestamp 을 기록해 그 시간을 비교해야 하는 수고가 들기 때문인데.. 

처음엔 시간을 기록하고 연속성을 처리하는데 쓰려고 했지만.. 

귀찮기도 하고, 다른 방법으로 풀어내고 싶어서.. 


남기기는 하지만.. 메이저파일에 마지막 시간이 쓰려고 하는 시간하고 갭이 나면 메이저파일은 지우는걸로..

def minor_rule(status):
minor_file_name = logging(status, "minor")
total_fileline = wc_list_file(minor_file_name)

if int(total_fileline) % 5 == 0:
delete_file_older_than(get_log_filename("major", False))

error_wc = wc_error(minor_file_name)

if int(error_wc) > 0 and int(total_fileline) / int(error_wc) <= 1:
logging("{} {}".format(ERROR_WEATHER, str(datetime.now().strftime("%s"))), "major", False)
else:
logging("{} {}".format(SUCCESS_WEATHER, str(datetime.now().strftime("%s"))), "major", False)

delete_file(minor_file_name)

return minor_file_name, total_fileline


'쉘스크립트애들' 카테고리의 다른 글

UnicodeDecodeError: 'ascii' codec can't decode byte  (0) 2018.07.12
system resource check  (0) 2018.07.09
shell에서 xargs를 이용해 멀티로 wget사용해보기  (1) 2016.08.08
remote shell  (1) 2016.03.15
숫자 더하기  (0) 2016.03.15