>  기사  >  백엔드 개발  >  Python은 파일의 실시간 모니터링을 구현합니다.

Python은 파일의 실시간 모니터링을 구현합니다.

高洛峰
高洛峰원래의
2017-02-25 09:59:281904검색

비즈니스 안정성 요구 사항이 상대적으로 높은 경우, 문제를 적시에 감지하기 위해 운영 및 유지 관리에서 특정 조건이 충족되면 수동적으로 기다리지 않고 즉시 애플리케이션 로그를 분석해야 하는 경우가 있습니다. 문제가 발생하려면 예를 들어 nginx의 $request_time 및 $upstream_response_time을 모니터링하고 가장 시간이 많이 걸리는 요청을 분석한 다음, 이때 로그인을 분석해야 합니다. 긴 문장을 발견하면 경고하고 알림을 보냅니다. 물론 이는 파일을 판단하거나 분석해야 하는 모든 곳에 적용할 수 있는 시나리오입니다. . 그래서 오늘은 Python을 사용하여 실시간으로 파일을 모니터링하는 방법을 살펴 보겠습니다.

첫 번째 방법:

이것은 Linux에 tail 명령이 있다는 것을 모두가 알고 있으므로 이해하기 가장 간단하고 쉽습니다. 따라서 Popen() 함수를 사용하여 이 명령을 직접 호출하여 출력을 얻을 수 있습니다.

logfile='access.log'
command='tail -f ‘+logfile+'|grep “timeout”‘
popen=subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
while True:
line=popen.stdout.readline().strip()
print line

두 번째 유형:

Python을 사용하여 파일을 조작합니다. 현재 파일 위치와 이동할 위치를 각각 얻기 위한 파일 객체입니다. 코드는 다음과 같습니다.

import time
file = open(‘access.log')
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line,

세 번째 방법:

파이썬의 Yield를 사용하여 생성기 함수를 구현한 다음 이 생성기 함수를 호출하면 로그 파일이 변경될 때 새 줄이 인쇄되며 코드는 다음과 같습니다.

import time
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
if __name__ == ‘__main__':
logfile = open(“access-log”,”r”)
loglines = follow(logfile)
for line in loglines:
print line,

마지막으로eek() 함수의 사용법을 설명합니다. 이 함수는 2개의 매개변수를 받습니다: file.seek(off, whence=0), 이동 오프 작업 표시(파일 포인터) ) 파일에서 양수는 끝 방향으로, 음수는 시작 방향으로 이동합니다. whence 매개변수가 설정된 경우, wherece에 의해 설정된 시작 위치가 우선합니다. 0은 시작을 나타내고, 1은 현재 위치를 나타내고, 2는 파일의 끝 위치를 나타냅니다.

위의 세 가지 일반적인 방법은 자신의 비즈니스 로직에 따라 특정 로그 분석 코드를 구현하면 됩니다.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 또한 모든 분들이 PHP 중국어 웹사이트를 구독하시기를 바랍니다.

파이썬의 실시간 파일 모니터링에 대한 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.