Skip to content

Gearman 모니터링 with PHP

2013/02/01
tags:

1. 따로 웹서버 올리기.

https://github.com/yugene/Gearman-Monitor

따로 올릴때는 위에 소스를 clone해서 아파치 설정과

_config,php 파일에 아래와 같이 추가하면 바로 사용 가능

<?php
/**
 * Gearman Monitor configuration file
 *
 * The following server fields are available:
 *  - address: Gearman server address, hostname and port
 *  - name: Gearman server name to display in Gearman Monitor interface
 *
 * Example:
 * $cfgServers[$i]['address'] = '192.168.0.10:4730';
 * $cfgServers[$i]['name'] = 'Gearman server 1';
 * ++ $i;
 *
 * $cfgServers[$i]['address'] = '192.168.1.1:7003';
 * $cfgServers[$i]['name'] = 'Gearman server 2';
 * ++ $i;
 */
$i = 0;
$cfgServers = array();
$cfgServers[$i]['address'] = '192.168.0.1:4730';
$cfgServers[$i]['name'] = 'Gearman Job Server 1';
++ $i;
$cfgServers[$i]['address'] = 'gearman-job-001.test.com:4730';
$cfgServers[$i]['name'] = 'Gearman Job Server 1';
++ $i;
$cfgServers[$i]['address'] = 'gearman-job-002.test.com:4731';
$cfgServers[$i]['name'] = 'Gearman Job Server 1';
++ $i;
?>

실행 화면

gearman_monitor

서버별 job function, queue에 쌓인 job 개수, worker 개수 등을 확인할 수 있다.

2. Net_Gearman(http://pear.php.net/package/Net_Gearman) 사용하기


<?php
@include_once('Net/Gearman/Manager.php');
class testClass
{
    public function test()
    {
        try {
            echo var_dump($this->getWorkerInfo());
            echo var_dump($this->getGearmanStatus());
        } catch (Exception $e) {
            return $e;
        }
    }
    public function getWorkerInfo($sServerIp='localhost', $sServerPort='4730')
    {
        try {
            if(class_exists('Net_Gearman_Manager', true)) {
                $gearman = new Net_Gearman_Manager($sServerIp.':'.$sServerPort);
                $oWorkers = $gearman->workers();
                $gearman->disconnect();
                unset($gearman);
                return $oWorkers;
            }
        }
        catch (Exception $e) {
            return $e;
        }
    }
    public function getGearmanStatus($sServerIp='localhost', $sServerPort='4730')
    {
        try {
            if(class_exists('Net_Gearman_Manager', true)) {
                $gearman = new Net_Gearman_Manager($sServerIp.':'.$sServerPort);
                $oStatus = $gearman->status();
                $gearman->disconnect();
                unset($gearman);
                return $oStatus;
            }
        }
        catch (Exception $e) {
            return $e;
        }
    }
}
$gearman = new testClass();
$gearman->test();

gearman_monitor2

댓글 2개 leave one →
  1. 2013/02/01 12:13 오후

    안녕하세요.

    리눅스 터미널에서 nc (netcat) 을 아래와 같이 이용할 수 도 있습니다.

    http://stackoverflow.com/questions/2752431/any-way-to-access-gearman-administration

    (echo status ; sleep 0.1) | nc 127.0.0.1 4730 -w 1
    (echo workers ; sleep 0.1) | nc 127.0.0.1 4730 -w 1

    다음은 제가 사용했던 일부 코드입니다. (Net_Gearman 이 없이)

    ———————————————————

    $servers = array(
    ‘IP주소 PORT번호’,

    );

    $protos = array(
    ‘status’ => array(
    array(‘FUNCTION’, ‘TOTAL’, ‘RUNNING’, ‘AVAILABLE_WORKERS’),
    ‘%30s %-10s %-10s %s’,
    ),
    ‘workers’ => array(
    array(‘FD’, ‘IP-ADDRESS’, ‘CLIENT-ID’, ‘FUNCTION’),
    ‘%30s %-20s %-10s %s’,
    ),
    );

    foreach ($servers as $server) {

    echo PHP_EOL;
    echo ‘> ‘ . $server . ‘ ‘ . str_repeat(‘-‘, 60) . PHP_EOL;

    foreach ($protos as $proto => $info) {

    echo ” [$proto]” . PHP_EOL;

    $out = array();

    exec(“(echo $proto ; sleep 0.1) | nc $server -w 1″, $out);

    echo sprintf($info[1], $info[0][0], $info[0][1], $info[0][2], $info[0][3]) . PHP_EOL;

    foreach ($out as $line) {
    $line = trim(str_replace(‘:’, ”, $line));
    if ($line === ‘.’) {
    continue;
    }

    list($col0, $col1, $col2, $col3) = preg_split(‘/[\t\s]+/’, $line);
    echo sprintf($info[1], $col0, $col1, $col2, $col3) . PHP_EOL;
    }
    echo PHP_EOL;
    }
    }

    ———————————————————

    그럼 ^^; 수고하세요.

    • 2013/03/08 11:48 오전

      오~ 감사합니다.^^
      Net_Gearman을 설치하지 않아도 된다니 유용하겠네요.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: