2023.07.22 ·
조회 11,571
php에서 트래픽 로그 그래프로 확인 (nginx만 가능)
<p><?php</p><p>$logFilePath = '/var/log/nginx/access.log';</p><p>$logFile = fopen($logFilePath, 'r');</p><p>$trafficData = array();</p><p>while (!feof($logFile)) {</p><p> $line = fgets($logFile);</p><p> // 빈 줄은 건너뜁니다.</p><p> if (trim($line) == '') {</p><p> continue;</p><p> }</p><p> </p><p> // 로그 라인 파싱 로직은 이전 예제와 동일하게 적용</p><p> // 추출한 데이터를 연관 배열로 저장</p><p> $logData = array(</p><p> "ip" => $ipAddress,</p><p> "time" => $accessTime,</p><p> "method" => $requestMethod,</p><p> "url" => $requestUrl,</p><p> "status" => $statusCode,</p><p> "bytes_sent" => $bytesSent,</p><p> "referer" => $referer,</p><p> "user_agent" => $userAgent</p><p> );</p><p> // 모든 라인의 데이터를 저장하는 배열에 추가</p><p> $trafficData[] = $logData;</p><p>}</p><p>fclose($logFile);</p><p>// PHP에서 데이터를 JSON 형식으로 변환하여 JavaScript로 전달</p><p>$dataAsJson = json_encode($trafficData);</p><p>?></p><p><!DOCTYPE html></p><p><html></p><p><head></p><p> <title>Traffic Log Visualization</title></p><p> <!-- Chart.js 라이브러리 링크 --></p><p> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script></p><p></head></p><p><body></p><p> <!-- 그래프를 그릴 캔버스 요소 --></p><p> <canvas id="trafficChart" width="800" height="400"></canvas></p><p> <script></p><p> // PHP에서 전달한 JSON 데이터를 JavaScript 객체로 변환</p><p> var data = <?php echo $dataAsJson; ?>;</p><p> // 그래프를 그리기 위한 데이터 준비</p><p> var labels = data.map(item => item.time);</p><p> var bytesSent = data.map(item => parseInt(item.bytes_sent));</p><p> // 그래프 생성</p><p> var ctx = document.getElementById('trafficChart').getContext('2d');</p><p> var myChart = new Chart(ctx, {</p><p> type: 'line',</p><p> data: {</p><p> labels: labels,</p><p> datasets: [{</p><p> label: 'Bytes Sent',</p><p> data: bytesSent,</p><p> borderColor: 'rgba(75, 192, 192, 1)',</p><p> backgroundColor: 'rgba(75, 192, 192, 0.2)',</p><p> borderWidth: 1</p><p> }]</p><p> },</p><p> options: {</p><p> responsive: false,</p><p> scales: {</p><p> y: {</p><p> beginAtZero: true</p><p> }</p><p> }</p><p> }</p><p> });</p><p> </script></p><p></body></p><p></html></p><p><br></p><p>사용법: 루트 폴더에 본 파일을 원하는 이름.php로 저장시킨 후, /var/log/nginx/access.log를 심볼릭링크합니다.</p><p>심볼릭 링크? 거는법: ln -s /var/log/nginx/access.log /웹서버 주소</p><p>ex.) ln -s var/log/nginx/access.log /var/www/html</p><p><br></p><p>*심볼릭 링크한 var/log/nginx/access.log과 위의 코드가 작성된 파일이 한 디렉토리 안에 위치해야 합니다.</p>