如何将 Windows 性能计数器发送到 Logstash + Kibana?

如何将 Windows 性能计数器发送到 Logstash + Kibana?

我想在我的 Windows 服务器上设置系统资源监控。我注意到 Linux 中的一个常见配置是使用 collectd 守护程序来获取系统指标信息。collectd 中的数据可以通过 logstash 读取,并最终放入 Elastic Search 中以供 Kibana 查看。

这很好,在 Linux 世界中运行良好。但是我被困在 Windows 服务器中,我需要一些建议,以了解实现类似工作流程的最佳工具。作为一个旁节点,我已经使用 Nxlog 将 IIS 日志发送到 logstash。

答案1

“与 Graphite 配合使用的工具”页面http://graphite.readthedocs.org/en/latest/tools.html列出几个。我尝试过 PowerShell 脚本“Graphite PowerShell Functions”https://github.com/MattHodge/Graphite-PowerShell-Functions而且效果很好。

编辑我误读了你的问题,你只谈论了 Logstash 和 Kibana,而没有谈论 Graphite。我不使用 Logstash+Kibana 来获取系统指标,但我使用 Statsd+Graphite。所以不确定我的答案是否对你有用,但如果你使用 Graphite Logstash 输入http://logstash.net/docs/1.4.2/您可以使用这些工具。

答案2

Elastic 现在提供了一个名为顶拍它可以满足您的要求。它将 CPU、内存和磁盘统计信息直接发送到 Elasticsearch 或 Logstash。

示例指标位于 GitHub 上弹性/顶拍

答案3

我正在使用Powershell 5Filebeat解决这个问题。请注意,这还没有经过几个小时的测试,这只是一个概念验证。

#Version 0.2

#Todo:
#* Notify on fail
#Function to get Sql Server Counters
function Get-SqlServerData()
{
    $Data = get-counter ($SqlServerCounterPrefix + ":Buffer Manager\Buffer cache hit ratio"), 
                        ($SqlServerCounterPrefix + ":Buffer Manager\Page life expectancy"), 
                        ($SqlServerCounterPrefix + ":Access Methods\Page splits/sec")
    #$Data
    $TransformedData = $Data.CounterSamples | Select-Object -Property Path, CookedValue

    $object = New-Object psobject

    $object | Add-Member -NotePropertyName 'Timestamp' -NotePropertyValue $Data.Timestamp
    foreach ($row in $TransformedData)
    {
        $path = $row.Path
        $name = $path.Substring($path.LastIndexOf("\") + 1)
        $object | Add-Member -NotePropertyName $name -NotePropertyValue $row.CookedValue
    }
    $object
}


#Parameters
$SqlServerCounterPrefix = '\MSSQL$MSSQL_2008'
$Type = "SQLServerStatistics"
$Data = Get-SqlServerData
$Path = "Z:\Temp\PowershellTest\"
$AddTimeStamp = $false
$NumberOfDaysToKeepFiles = 7
$FileExtension = "csv"

#Variables (do not change)
$Date = Get-Date -format yyyy-MM-dd
$Timestamp = Get-Date
$FilenameRegex = "^" + $Type + "_(?<Date>\d{4}-\d{2}-\d{2})(?:\(\d\))?\." + $FileExtension + "$"
$Suffix = ''
$Counter = 0
$Done = $false

if ($AddTimeStamp -eq $true)
{
    $Data | ForEach-Object {
        $_ | Add-Member -NotePropertyName 'Timestamp' -NotePropertyValue $Timestamp
    }
}

#Try to export file if it fails (the headers have changed) add a (number)
while($Done -eq $false -and $Counter -le 9)
{
    Try
    {
        $Filename = $Type + "_" + $Date + $Suffix + "." + $FileExtension
        Write-Host "Trying to write $Filename"
        $FilePath = $Path + $Filename
        $Data | Export-Csv -Path $FilePath -Delimiter ";" -NoTypeInformation -Append
        $Done = $true
    }
    Catch [Exception]
    {
        Write-Host "Failed to create file " + $_.Exception.GetType().FullName, $_.Exception.Message
        $Counter++
        $Suffix = '(' + $Counter + ')'
    }
}

#Notify if we failed
if ($Done -eq $false)
{
    #Todo: Notify that we failed
}

#Cleanup
$Files = Get-ChildItem $Path -Filter ("*." + $FileExtension)
$Files | Foreach-Object {
    $FilePath = $_.FullName
    $Filename = [System.IO.Path]::GetFileName($FilePath)

    $Match = [regex]::Match($Filename, $FilenameRegex)

    Write-Host $FilePath
    Write-Host $Filename

    if ($Match.Success -eq $true)
    {
        Write-Host $Match.Groups["Date"].Value
        $FileDate = [datetime]::ParseExact($Match.Groups["Date"].Value, "yyyy-MM-dd", $null)
        $TimeSince = New-TimeSpan -Start $FileDate -End (Get-Date).Date
        if ($TimeSince.TotalDays -ge $NumberOfDaysToKeepFiles)
        {
            Remove-Item $FilePath
        }
    }
}

这将在 $Path 目录中创建一个 csv 文件,如果您更改计数器,它将创建一个带有(1-9)名称的新文件。

更新版本可在此处找到:https://gist.github.com/AnderssonPeter/8261e255630d6f672ba5bc80f51b017f

答案4

现在有一个logstash 输入插件用于 Windows 性能监视器。

相关内容