PHP로 손쉽게 서버 리소스 모니터링
7719 단어 PHP
검색하면 다양한 툴이 있어 선정에 고민하는 곳입니다만, 고성능일 필요가 없으면 자작으로 좋잖아!
그래서 PHP로 손쉽게 서버 리소스의 모니터링을 해보겠습니다.
환경
로드 애버리지
// 過去1分間のロードアベレージを取得
$loadAverage = sys_getloadavg()[0];
if ($loadAverage > 1) {
// ロードアベレージが1を超えてたらアラートを飛ばす処理
}
디스크
$diskFree = (int) disk_free_space('/') / 1024 / 1024; // 空き(MB)
$diskTotal = (int) disk_total_space('/') / 1024 / 1024; // 合計(MB)
if ($diskFree / $diskTotal < 0.1) {
// ディスク使用率が90%を超えてたらアラートを飛ばす処理
}
메모리
// freeコマンドでtotal(メモリ合計)とavailable(利用可能な空きメモリ)の値を取得
[$memoryTotal, $memoryAvailable] = explode(' ', chop(`free -m | grep Mem | awk '{ print $2,$7 }'`));
if ($memoryAvailable / $memoryTotal < 0.1) {
// メモリ使用率が90%を超えてたらアラートを飛ばす処理
}
위는 free 명령으로 available 항목이 있다고 가정합니다.
예를 들어 CentOS 6 등은 여유 메모리를 얻는 방법이 다르지만 여기에서는 할애합니다.
메모리(MySQL)
// psコマンドでMySQLプロセスのRSS (Resident Set Size)を取得
$mysqlRss = chop(`ps -u mysql uh | awk '{ print $6 }'`) ?: 0;
$mysqlRss = round($mysqlRss / 1024, 1); // MB
메모리(Apache)
// psコマンドでApache親プロセスのRSSを取得
$apacheRss = chop(`ps -u root uh | grep httpd | grep -v grep | awk '{ print $6 }'`) ?: 0;
$apacheRss = round($apacheRss / 1024, 1); // MB
// pgrepコマンドでApache子プロセス数とUSS(Unique Set Size)合計を取得
exec('pgrep httpd -U apache | while read p; do cat /proc/$p/smaps | awk \'BEGIN { a = 0 } /Private/ { a += $2 } END { print a }\'; done', $apacheProcesses);
$apacheCount = count($apacheProcesses);
$apacheUss = round(array_sum($apacheProcesses) / 1024, 1); // MB
$apacheAverage = round($apacheUss / $apacheCount / 1024, 1); // MB
위는 MPM이 prefork라고 가정합니다.
다른 MPM이나 nginx와 같은 경우에는 그에 맞게 만들어야합니다.
메모리(slab)
// meminfoからslabのメモリ使用量を取得
$slab = chop(`cat /proc/meminfo | grep Slab | awk '{ print $2 }'`);
$slab = round($slab / 1024, 1); // MB
메모리(tmpfs)
// dfコマンドからtmpfsのメモリ使用量を取得
$tmpfs = chop(`df -k | grep tmpfs | awk '{ a += $3 } END { print a }'`);
$tmpfs = round($tmpfs / 1024, 1); // MB
cron으로 로그 저장
위와 같은 스크립트를 cron으로 매분 실행하여 로그 파일에 저장.
이번에는 CSV 형식으로 로그를 남겨두고 Google Chart Tools를 사용하여 그래프화해 보았습니다.
이어서 CPU 사용률이나 전송량 등도 표시할 수 있도록 하고 있습니다.
CPU 사용률 등은 vmstat 명령으로부터 산출,
전송량은/proc/net/dev의 정보를 로그에 남기면서, 전회 로그와의 차분으로부터 매분의 전송량을 산출하고 있습니다.
사이고에게
OSS의 감시 툴 등에는 도저히 없습니다만, 간편&초경량이므로, 흥미가 있으면 꼭 참고해 주세요.
Reference
이 문제에 관하여(PHP로 손쉽게 서버 리소스 모니터링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shigakin/items/06a1ea55885df3de0a44텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)