├── CombinedStats-CPU.ps1 ├── CombinedStats-Disk.ps1 ├── CombinedStats-Network.ps1 ├── CombinedStats-Pages.ps1 └── README.MD /CombinedStats-CPU.ps1: -------------------------------------------------------------------------------- 1 | Function Send-JsonOverTcp { 2 | param ( [ValidateNotNullOrEmpty()] 3 | [string] $LogstashServer, 4 | [int] $Port, 5 | $JsonObject) 6 | $JsonString = $JsonObject -replace "`n",' ' -replace "`r",' ' -replace ' ','' 7 | $Ip = [System.Net.Dns]::GetHostAddresses($LogstashServer) 8 | $Address = [System.Net.IPAddress]::Parse($Ip) 9 | $Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port) 10 | $Stream = $Socket.GetStream() 11 | $Writer = New-Object System.IO.StreamWriter($Stream) 12 | $Writer.WriteLine($JsonString) 13 | $Writer.Flush() 14 | $Stream.Close() 15 | $Socket.Close() 16 | } 17 | 18 | $CpuPercent = ((Get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Processor Percent Usage"}) | convertto-json 19 | 20 | $CpuQueueLength = ((Get-counter -Counter "\System\Processor Queue Length" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Processor Queue Length"}) | convertto-json 21 | 22 | $CpuPrivilegedTime = ((Get-counter -Counter "\Processor(_total)\% Privileged Time" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Processor Privileged Time"}) | convertto-json 23 | 24 | $CpuUserTime = ((Get-counter -Counter "\Processor(_total)\% User Time" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Processor User Time"}) | convertto-json 25 | 26 | Send-JsonOverTcp ODELKS01 5560 "$CpuPercent" 27 | Send-JsonOverTcp ODELKS01 5560 "$CpuQueueLength" 28 | Send-JsonOverTcp ODELKS01 5560 "$CpuPrivilegedTime" 29 | Send-JsonOverTcp ODELKS01 5560 "$CpuUserTime" -------------------------------------------------------------------------------- /CombinedStats-Disk.ps1: -------------------------------------------------------------------------------- 1 | Function Send-JsonOverTcp { 2 | param ( [ValidateNotNullOrEmpty()] 3 | [string] $LogstashServer, 4 | [int] $Port, 5 | $JsonObject) 6 | $JsonString = $JsonObject -replace "`n",' ' -replace "`r",' ' -replace ' ','' 7 | $Ip = [System.Net.Dns]::GetHostAddresses($LogstashServer) 8 | $Address = [System.Net.IPAddress]::Parse($Ip) 9 | $Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port) 10 | $Stream = $Socket.GetStream() 11 | $Writer = New-Object System.IO.StreamWriter($Stream) 12 | $Writer.WriteLine($JsonString) 13 | $Writer.Flush() 14 | $Stream.Close() 15 | $Socket.Close() 16 | } 17 | 18 | $DiskReadPerf = ((Get-counter -Counter "\PhysicalDisk(_total)\Avg. Disk sec/Write" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Disk_Read_Perf"}) | convertto-json 19 | 20 | $DiskWritePerf = ((Get-counter -Counter "\PhysicalDisk(_total)\Avg. Disk sec/Write" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Disk_Write_Perf"}) | convertto-json 21 | 22 | $DiskQueueLength = ((Get-counter -Counter "\PhysicalDisk(_total)\Avg. Disk Queue Length" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Disk_Queue_Length"}) | convertto-json 23 | 24 | Send-JsonOverTcp ODELKS01 5561 "$DiskReadPerf" 25 | Send-JsonOverTcp ODELKS01 5561 "$DiskWritePerf" 26 | Send-JsonOverTcp ODELKS01 5561 "$DiskQueueLength" -------------------------------------------------------------------------------- /CombinedStats-Network.ps1: -------------------------------------------------------------------------------- 1 | Function Send-JsonOverTcp { 2 | param ( [ValidateNotNullOrEmpty()] 3 | [string] $LogstashServer, 4 | [int] $Port, 5 | $JsonObject) 6 | $JsonString = $JsonObject -replace "`n",' ' -replace "`r",' ' -replace ' ','' 7 | $Ip = [System.Net.Dns]::GetHostAddresses($LogstashServer) 8 | $Address = [System.Net.IPAddress]::Parse($Ip) 9 | $Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port) 10 | $Stream = $Socket.GetStream() 11 | $Writer = New-Object System.IO.StreamWriter($Stream) 12 | $Writer.WriteLine($JsonString) 13 | $Writer.Flush() 14 | $Stream.Close() 15 | $Socket.Close() 16 | } 17 | 18 | $NetworkReceived = ((Get-counter -Counter "\Network Interface(*)\Bytes Received/sec" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Network Bytes Received"}) | Where-Object {$_."Network Bytes Received" -ne 0} | convertto-json 19 | 20 | 21 | $NetworkSent = ((Get-counter -Counter "\Network Interface(*)\Bytes Sent/sec" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Network Bytes Sent"}) | Where-Object {$_."Network Bytes Sent" -ne 0} | convertto-json 22 | 23 | Send-JsonOverTcp ODELKS01 5563 "$NetworkReceived" 24 | Send-JsonOverTcp ODELKS01 5563 "$NetworkSent" -------------------------------------------------------------------------------- /CombinedStats-Pages.ps1: -------------------------------------------------------------------------------- 1 | Function Send-JsonOverTcp { 2 | param ( [ValidateNotNullOrEmpty()] 3 | [string] $LogstashServer, 4 | [int] $Port, 5 | $JsonObject) 6 | $JsonString = $JsonObject -replace "`n",' ' -replace "`r",' ' -replace ' ','' 7 | $Ip = [System.Net.Dns]::GetHostAddresses($LogstashServer) 8 | $Address = [System.Net.IPAddress]::Parse($Ip) 9 | $Socket = New-Object System.Net.Sockets.TCPClient($Address,$Port) 10 | $Stream = $Socket.GetStream() 11 | $Writer = New-Object System.IO.StreamWriter($Stream) 12 | $Writer.WriteLine($JsonString) 13 | $Writer.Flush() 14 | $Stream.Close() 15 | $Socket.Close() 16 | } 17 | 18 | $MemoryPagesSec = ((Get-counter -Counter "\Memory\Pages/sec" -SampleInterval 1 -MaxSamples 1).countersamples | select-object -Property @{ expression={$_.Path}; label="Host Performance Query"},@{ expression={ $_.CookedValue}; label="Memory Pages/Sec"}) | convertto-json 19 | 20 | Send-JsonOverTcp ODELKS01 5562 "$MemoryPagesSec" -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | This is a set of Powershell scripts that send data over TCP (JSON) to a logstash server. For a more in depth look, visit http://www.charleslabri.com/elasticsearch-kibana-logstash-and-windows-metrics-over-powershell-tcp-connections/. Special thanks to http://outsideit.net/ for the Powershell TCP connection function. 2 | --------------------------------------------------------------------------------