글 수정

작성자 본인만 수정할 수 있습니다

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