PowerShellでgmetricを送るには
※ CentOS6/gmond-3.7.1で動作確認済み($ nc localhost 8649 で値が表示されるところまで)
(参考サイト)
https://github.com/ganglia/ganglia_contrib/blob/master/gmetric-python/gmetric.py
http://stackoverflow.com/questions/12148666/send-and-receive-data-via-udp-in-powershell
# Define port and target IP address [int] $Port = 8649 $IP = "192.168.122.101" $hostname="null" # not used by gmond ############# function get_string_header($str) { $a=$str.length if ($a -lt 255) { return [char]0+[char]0+[char]0+[char]$a } else { return [char]0+[char]0+[char]$a } } function get_padded_string($str) { $len=$str.length $a=$len % 4 $tmp=$str for ($i=0; $i -lt $a; ++$i){ $tmp+=[char]0 } return $tmp } function packer_pack($str) { $tmp=get_string_header $str $tmp+=get_padded_string $str return $tmp } function get_padded_int($int) { if ($int -lt 255) { return [char]0+[char]0+[char]0+[char]$int } else { return [char]0+[char]0+[char]$int } } function gmetric_buffer($name, $val, $type) { # # Meta Packet # $meta="" $meta+=get_padded_int 0x80 $meta+=packer_pack $hostname $meta+=packer_pack $name $meta += get_padded_int 0 # slope: zero $meta+=[char]0 $meta+=[char]0 $meta += packer_pack $type $meta+=[char]0 $meta+=[char]0 $meta += packer_pack $name $meta+=[char]0 # units "" $meta+=[char]0 $meta += get_padded_int 0 # slope: zero $meta += get_padded_int 58 # $meta += get_padded_int 60 # tmax uint $meta += get_padded_int 60 # dmax uint $meta += get_padded_int 0 # group: not in any group # # Data Packet # $data="" $data+=get_padded_int 0x85 $data += packer_pack $hostname $data += packer_pack $name $data+=get_padded_int 0 $data+=[char]0 $data+=[char]0 $data += packer_pack "%s" $data += packer_pack $val return ($meta, $data) } # # Main # if ($args.length -ne 3) { echo "gmetric.ps1 name val type" return 0 } $name=$args[0] $val=$args[1] $type=$args[2] $Address = [system.net.IPAddress]::Parse($IP) # Create IP Endpoint $End = New-Object System.Net.IPEndPoint $address, $port # Create Socket $Saddrf = [System.Net.Sockets.AddressFamily]::InterNetwork $Stype = [System.Net.Sockets.SocketType]::Dgram $Ptype = [System.Net.Sockets.ProtocolType]::UDP $Sock = New-Object System.Net.Sockets.Socket $saddrf, $stype, $ptype $Sock.TTL = 26 # Connect to socket $sock.Connect($end) # Create encoded buffer $Enc = [System.Text.Encoding]::getencoding("iso-8859-1") ($meta, $data)=gmetric_buffer $name "$val" $type $Buffer = $Enc.GetBytes($meta) $Sent = $Sock.Send($Buffer) $Buffer = $Enc.GetBytes($data) $Sent = $Sock.Send($Buffer)