Zabbixには動作確認用にzabbix_getってコマンドがついてて、これを使うとCLIで監視してる値が取れちゃいます。
$ zabbix_get -stest-web01 -k"system.cpu.load[,avg5]" 1.460000
けっこうサクサク動くので試しに複数サーバの状態をリアルタイム表示するコマンドを作ってみました
$ ./zabtop test-web0{1,2} test-db0{1,2} HOSTNAME Load(1/5/15) Memory Swap us sy id wa test-web01 1.09/1.12/1.22 10.0% 0.0% 19 2 79 0 test-web02 1.78/1.18/1.08 10.3% 0.0% 19 2 73 0 test-db01 0.11/0.18/0.17 92.0% 0.0% 2 0 95 0 test-db02 0.29/0.16/0.10 91.6% 0.0% 2 0 96 0
使えるかも!!!
ソースコード
やっつけ版です!
取得できる項目はZabbix設定によると思います。
#!/usr/bin/perl use strict; use warnings; my @hosts = @ARGV or die; my $len = (sort {$a<=>$b} map {length} @hosts)[$#hosts]; my $sleep = 10; my %keys = ( la1 => "system.cpu.load[,avg1]", la5 => "system.cpu.load[,avg5]", la15 => "system.cpu.load[,avg15]", mem_avail => "vm.memory.size[available]", mem_total => "vm.memory.size[total]", swap_pused => "system.swap.size[,pused]", cpu_us => "system.cpu.util[,user,]", cpu_sy => "system.cpu.util[,system,]", cpu_id => "system.cpu.util[,idle,]", cpu_wa => "system.cpu.util[,iowait,]", ); while(1){ my @out; push @out, "\033[0;0H"; push @out, "\033[2J"; push @out, "HOSTNAME".(" "x($len-7))."Load(1/5/15) \tMemory\tSwap\t us sy id wa\n"; for my $host (@hosts){ my %vals; for my $name (keys %keys){ my $val = `zabbix_get -s$host -k$keys{$name}`; chomp $val; $vals{$name} = $val; } my $line = sprintf "%-".$len."s %.2f/%.2f/%.2f\t%3.1f%%\t%3.1f%%\t%3d %3d %3d %3d\n", $host, @vals{"la1","la5","la15"}, (1-$vals{mem_avail}/$vals{mem_total})*100, $vals{swap_pused}, @vals{"cpu_us","cpu_sy","cpu_id","cpu_wa"}; push @out, $line; } print for @out; sleep $sleep; }