从Monit :: HTTP perl模块获取的Undef数据和进程/系统状态

时间:2012-12-06 15:40:45

标签: perl monit

任何人都知道或已经使用Monit :: HTTP模块通过HTTP与monit守护进程建立perl连接?

我正在尝试将Perit :: HTTP模块用于perl,我遇到了一些麻烦。 我无法检索状态变量,例如,monit status命令给我Status =运行我在我的系统中运行的一些服务,但是Monit :: HTTP一直给我Status = 0。 我尝试使用monit stop命令停止服务,我知道该进程已被杀死,但Monit :: HTTP以同样的方式为我提供Status = 0。 在最后一种情况下,Status = 0表示“服务已停止”或“服务正在运行”?

我的代码摘录从monit守护程序监视的系统中检索性能数据:

my @systems = $hd->get_services(TYPE_SYSTEM);
foreach my $system (@systems) {
  print "system: $system\n";
  my $hash_ref = $hd->service_status($system);
...

在最后一种情况下,我无法从monit中检索好数据(在下一个使用Data :: Dumper模块获得的hash_ref转储中查找undef数据),例如Monit :: HTTP return:

system: xpto
$VAR1 = {
   'cpu' => {
       'percent' => undef,
       'percenttotal' => undef },
    'status' => '0',
    'name' => 'xpto',
    'children'=> undef,
    'monitor' => '1',
    'host' => 'localhost',
    'memory'=> {
        'percent' => undef,
        'kilobytetotal' => undef,
        'kilobyte' => undef,
        'percenttotal' => undef },
    'group' => undef,
    'pid' => undef;
    'ppid' => undef;
    'uptime' => undef;
    'type'=> '5';
    'load' => {
        'avg05' => undef,
        'avg01' => undef,
        'avg15' => undef },
    'pendingaction' => '0',
};

monit status命令返回:

System 'xpto'
status                Running
monitoring status     Monitored
load average          [1.25] [1.16] [0.94]
cpu                   8.7%us 7.4%sy
memory usage          3202164 kB [76.3%]
swap usage            1589248 kB [75.7%]
data collected        Thu, 06 Dec 2012 11:50:55

我的代码摘录,用于检索由monit守护程序监视的进程(例如,apache进程)中的性能数据:

my @systems = $hd->get_services(TYPE_PROCESS);
foreach my $system (@systems) {
    print "system: $system\n";
    my $hash_ref = $hd->service_status($system);
...

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

Monit :: HTTP通过HTTP协议连接到Monit。您是否检查过Monit是否接受HTTP连接并且脚本连接到正确的参数?

wget -nd -v -O - --user username --password password - http://:/ _status?format = xml

但也许这个问题更加微不足道?您询问了TYPE_PROCESS并得到了回复:'type'=> '5';

如果您需要所有类型,您应该执行以下操作:( TYPE_ALL = -1中的模块中的contans将更加用户友好)

my @systems = $hd->get_services(-1);
foreach my $system (@systems) {
    print "system: $system\n";
    my $hash_ref = $hd->service_status($system);