2009-06-15 1 views
1

일부 nagios 경고를 시스템에 추가하려고합니다. 일부는 nginx/apache 로그 (또는 해당 로그에서 값을 파싱하는)를 치는 특정 이벤트의 비율을 모니터링합니다. 지금까지 문제에 접근 한 방식 간단한 쉘 스크립트를 사용하여 로그를 25 초 동안 임시 파일에 꼬리말로 붙이고 프로세스를 죽인 다음 임시 파일에 대해 awk 등을 실행합니다. 여기서 목표는 25 초 동안 로그를 "샘플"로 만들어 분석을 수행하는 것입니다.지정된 간격 동안 파일 (또는 유사)을 tail-f하는 방법은 무엇입니까?

이것은 임시 파일로 인해 디스크 IO가 증가하기 때문에 분명히 이상적이지 않습니다. 실제로 원하는 것은 몇 초 후에 파이프를 완전히 종료시키는 "강화 된"tail -f입니다. 즉 :

꼬리 -f - 간격 '5 초'| grep "/ serve"

5 초 동안 로그를 꼬리면서 "/ serve"가있는 모든 행을 표시합니다.

나는 루비 스크립트를 아주 빨리 처리 할 수 ​​있다고 생각하지만,이 작업을 수행하는 데 더 복잡한 방법이 없었는지 확인하고 싶었습니다. 높은 수준에서 마지막 N 초 동안 로그의 샘플을 가져 오는 더 좋은 방법이 있습니까 (아니요, 타임 스탬프를 파싱하지 않을 것임)

답변

0

약간 다른 접근 방식을 제공하는 방법을 말해 프로브 프로세스가 임의의 시간 동안 일시 중지되는 것을 원하지 않습니다. 그것은 최악의 경우, Nagios가 다른 것들을 덜 자주 확인하게하거나 수표를 "뭉치 게"만들 것입니다.

신속하게 (즉시) 실행되고 파일의 마지막 몇 줄을 파싱하여 주어진 시간보다 늦은 타임 스탬프로 흥미로운 것을 반환하는 스크립트는 어떻게됩니까?

2

해결책을 찾았습니다. "apt-get install timeout":

편집 : 실제로 이것은 꼬리를 없애고 정상적으로 종료하지 않으므로 전체 파이프가 손실됩니다. 내가하고 싶은 일은 :

타임 아웃 -15 5 tail -f /mnt/log/nginx/nginx-access.log | grep '/ javascripts'| 하는 Nagiios 사용자로, 자신을

(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve 
+0

timeout -s15 5 tail -f /mnt/log/nginx/nginx-access.log | grep '/ javascripts'| wc -l – diyism

0

내가 그 생각을 해요 : -l 화장실

많은 자바 스크립트 파일, 최근 5 초 등

관련 문제