Como enviar contadores de desempenho do Windows para o Logstash + Kibana?

6

Eu gostaria de configurar o monitoramento de recursos do sistema em meus servidores Windows. Percebi que uma configuração comum no Linux é usar o daemon collectd para obter informações de métricas do sistema. De dados coletados podem ler por logstash e, finalmente, colocar em Elastic Search para ser visto com Kibana.

Isso é legal e funciona bem no mundo do Linux. No entanto, estou preso ao servidor Windows e preciso de alguns conselhos sobre as melhores ferramentas para obter um fluxo de trabalho semelhante. Como um nó lateral, eu já estou usando o Nxlog para enviar logs do IIS para logstash.

    
por angaran 12.11.2014 / 23:56

4 respostas

2

A página "Ferramentas que funcionam com o Graphite" link lista várias. Eu tentei o script PowerShell 'Graphite PowerShell Functions' link e funciona bem.

edit Eu interpretei mal sua pergunta, você estava falando apenas sobre o Logstash e o Kibana, mas não sobre o Graphite. Eu não uso o Logstash + Kibana para as métricas do sistema, mas eu uso o Statsd + Graphite. Portanto, não tenho certeza se a minha resposta é válida para você, mas se você usar o link da interface Logstash do Graphite, você pode usar essas ferramentas.

    
por 24.11.2014 / 16:53
4

O Elastic agora oferece uma ferramenta chamada topbeat que faz o que você está procurando. Ele envia estatísticas de cpu, memória e disco diretamente para o Elasticsearch ou para o Logstash.

Exemplos de métricas estão no github em elástico / topbeat .

    
por 01.12.2015 / 03:11
0

Estou usando Powershell 5 e Filebeat para resolver esse problema. Note que isso não foi testado mais do que algumas horas e é uma prova de conceito.

#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
        }
    }
}

Isso criará um arquivo csv no diretório $ Path, se você alterar os contadores, ele criará um novo arquivo com (1-9) no nome.

Uma versão atualizada pode ser encontrada em: link

    
por 07.11.2016 / 10:48
-1

Existe agora um plug-in de entrada do logstash para o Monitor de Desempenho do Windows.

    
por 07.06.2015 / 19:50