2015-01-30 2 views
-2

분석 access_log를 원한다면 방문자 ip, date, pageview 또는 image view를 mysql 테이블에 저장하십시오.php best way analysis access_log

나는 cron 작업을 사용하여 매분 PHP 스크립트를 호출하고 access_log를 열 계획이다.

그러나 이제 access_log에는 이미 500MB가 넘으며 분당 약 0.4MB가 증가합니다. (보통 50-350 레코드)

그래서 어떻게 큰 파일을 PHP에서 열 수 있습니까? 마지막 500 레코드를 읽은 다음 regex는 마지막 순간의 레코드를 얻습니다. 내 서버에는 32GB RAM이 있지만 메모리에는 아무런 문제가 없지만 CPU 사용량은 더 적어야합니다. 누구든지 간단한 코드로 나를 도울 수 있습니까? 감사.

편집 @Jeremiah Winsley에 의해

걸릴 조언, 내 httpd.conf 파일에 ROTATELOGS를 사용합니다. 그러나 로그가 작성되지 않았습니다. 문제가 어디에 있습니까?

<IfModule log_config_module> 
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com                      bined 
    LogFormat "%h %l %u %t \"%r\" %>s %b" common 
    <IfModule logio_module> 
     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I                       %O" combinedio 
    </IfModule> 
    CustomLog "logs/access_log" combined env=!dontlog 
    CustomLog "|sbin/rotatelogs -f logs/my_log 60" combined env=!dontlog 
    #create a my_log every 1 minute. 
    SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog 
    SetEnvIf Remote_Addr "::1" dontlog 
</IfModule> 
+0

현재 코드를 입력하십시오. – cmorrissey

+1

그 일을하는 것은 잘못된 길입니다. 로그 분석 서비스를 사용하는 대신 실제로 스스로 처리해야하는 경우 cron과 함께 logrotate를 사용하여 매분 라이브 액세스 로그를 읽는 대신 적당한 간격으로 로그 파일을 구문 분석해야합니다. –

+0

@Jeremiah Winsley, 어떻게 logrotate에 설정 하시겠습니까? 그것이 두 번 살릴 수 있다면. 하나는 원래 access_log이고, 모든 시간에 로그를 저장합니다. 분당 다른 액세스 정보. 감사. –

답변

0

바퀴를 재발 명하지 마십시오. 항상 다른 사람들이 개발했을지도 모르는 도구를 찾으십시오. 웹 서버는 오랫동안 사용되어 왔으며 로그 파서와 서버 도구가 많이 있습니다.

이 PHP 파서를 사용해보고 시간을 절약하십시오.

https://github.com/kassner/log-parser

으로 내가 라이브 파일에 그것을 할 것이라고 지적했다. 아마도 5 ~ 10 분마다 cronjob을 설치하고 파일을 더 자주 회전시켜야합니다. 그리고 최근 회전 된 파일을 사용하십시오. 그러나 이로 인해 많은 파일이 생성 될 수 있습니다.