exim 로그 파일을 구문 분석하고 송신 도메인 카운트를 생성하기 위해 파이썬 스크립트를 작성하는 방법

StackOverflow https://stackoverflow.com//questions/22010228

문제

나는 SMTP 서버에서 exim 로그 파일을 물마루 exim 로그 파일을 빌드하고, 매일, 일주일 및 월을 매일 대부분의 도메인을 보내는 것을보고하고자합니다. 나는 파이썬에 꽤 새로운 것이고 나는 이것을 달성하는 방법을 고생하고있다.

EXIM 로그 파일의 관련 줄은 일반적으로 다음과 같습니다.

Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=smtp.mail.net [000.00.34.17]

Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=smtp.mail.net [000.00.34.17]

Feb 24 00:00:23 smtp1.mail.net exim[5661]: 2014-02-24 00:00:23 1Wuniq-mail-idSm-1h => someuser@somedomain.com R=mail T=pop_mail_net H=mta.mail.net [000.00.34.6]

Feb 24 00:00:23 smtp1.mail.net exim[5661]: 2014-02-24 00:00:23 1Wuniq-mail-idSm-1h Completed
.

sys, osre 모듈은이 (?)를 달성하기에 충분해야합니다. 나는 또한 크론에서 매일 스크립트를 실행하고 싶기 때문에 사전을 사용하고 싶습니다.

주요 문제는 다음과 같습니다. Kan i grep 물통에만 해당 라인 만 누르고 있습니까? Exim은 많이 로그를 기록하고 "=> 및 ->"가 포함 된 라인을 grep에 넣고 싶습니다. UNIQ Maild ID와 함께 "1W"로 시작합니다. 또한 매일 Scriptrun의 경우 스크립트는 "꼬리"물러 러 로그 파일을 사용해야하며 스크립트가 실행 된 마지막으로 로그 파일을 분석 한 마지막 위치에서 시작해야합니다. 신뢰할 수있는 매일 보내는 도메인 카운트를 생성하려면이 옵션이 필요합니다.

도움이 매우 높이 평가 될 것입니다.

도움이 되었습니까?

해결책

먼저 파일을 역순으로 읽을 수 있습니다 :

    logFileData = []
    with open( pathToLogFile, "r" ) as logfile:
            logFileData = reversed( logfile.readlines() )
.

다음에서 원하는 각 로그 파일 데이터의 일부를 얻을 수 있습니다.

    for line in logFileData:
            temp = ""
            if '=>' in line:
                    temp = line.split('=>')
            elif '->' in line:
                    temp = line.split('->')

            if temp:
                    ## Get the first substring after splitting at '->/=>'; 
                    ##   From that substring, get the last substring after splitting at all whitespaces.

                    address = temp[0].split()[-1].strip()
                    timestampParts = temp[0].split()[:3]  #Get each part of the date
                    timestampString = " ".join( timestampParts )

                    ##   Get the last two characters of interest from it.
                    if address.startswith("1W"):
                             pass  #Replace with your functionality here
.

문자열의 파싱 시간은 python DateUtil 패키지를 살펴보십시오.또한 관련 질문 답변 됨 .

이것은 이것이 당신이 마지막으로 떠난 곳에서 당신이 '기억'할 수없는 것을 의미합니다.이를 위해 읽을 때 로그 파일 자체를 편집하여 고유 한 기호로 중단 한 위치를 표시 할 수 있습니다.다음을 읽으면 파일의 끝에서 기호로만 읽습니다.

편집 : CONTEDENTED timestamp 계산

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top