비즈니스 안정성 요구 사항이 상대적으로 높은 경우, 문제를 적시에 감지하기 위해 운영 및 유지 관리에서 특정 조건이 충족되면 수동적으로 기다리지 않고 즉시 애플리케이션 로그를 분석해야 하는 경우가 있습니다. 문제가 발생하려면 예를 들어 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 중국어 홈페이지를 주목해주세요!