Выборка данных
function Get-InfluxDb {
<#
.SYNOPSIS
Получение данных из InfluxDB
.PARAMETER Url
URL InfluxDB HTTP API, должен включать имя БД, например: http://localhost:8086/query?db=databasename
.PARAMETER Query
Текст запроса к базе данных
.LINK
https://gist.github.com/adamdriscoll/2761b9066254556d0b4b856c041ed69f
#>
param(
[Parameter()]
$Url = 'http://192.168.102.209:8086/query?db=icinga2',
[Parameter()]
$Query
)
$Results = Invoke-RestMethod -Uri "$Url&q=$Query"
foreach($series in $results.results.series) {
$ResultSeries = @{
Fields = @()
}
foreach($tag in $series.tags.PSObject.Properties) {
$ResultSeries[$tag.Name] = $Tag.Value
}
$Columns = $series.columns
foreach($value in $series.values) {
$Result = @{}
for($i = 0; $i -lt $Columns.Length; $i++) {
if ($Columns[$i] -eq 'time') {
$result.time = [DateTime]$value[$i]
} else {
$Result[$columns[$i]] = $value[$i]
}
}
$ResultSeries.fields += $result
}
$ResultSeries
}
}
# # $Query = "SHOW SERIES FROM `"powershell`" WHERE `"hostname`" = 'ts3.mkucou.local'"
# $Query = "SELECT value FROM `"load`" WHERE `"hostname`" = 'ts3.mkucou.local' AND time > now() - 1h"
# # Выборка за последний день
# $Query = "SELECT value FROM `"powershell`" WHERE `"hostname`" = 'ups-ap9606.pshome2.local' AND time > now() - 1d"
# # Выборка за последний день с интервалом в 1 час
# $Query = "SELECT mean(value) FROM `"powershell`" WHERE `"hostname`" = 'ups-ap9606.pshome2.local' AND `"service`" = 'in-volt' AND time > now() - 1d GROUP BY time(1h)"
$hostname = "l022-3"
$servicename = "hdd2-smart"
$metricname = "Raw_Read_Error_Rate"
$period = "1d"
$interval = "15m"
$graphTitle = "Метрики $servicename ($metricname) по хосту: $hostname за период - $period"
$Query = "SELECT mean(value) FROM `"powershell`" WHERE `"hostname`" = '$hostname' AND `"service`" = '$servicename' AND `"metric`" = '$metricname' AND time > now() - $period GROUP BY time($interval)"
$result = Get-InfluxDb -Query $Query
$result_time = @()
$result_value = @()
foreach ($res in $result.Values.Values) {
if ($result.Values.Values.IndexOf($res) % 2 -eq 0) {
$result_time += $res
} else {
$result_value += $res
}
}
Рисуем график по данным
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms.DataVisualization
$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$Series = New-Object -TypeName System.Windows.Forms.DataVisualization.Charting.Series
$ChartTypes = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]
$Series.ChartType = $ChartTypes::Line
$Chart.Series.Add($Series)
$Chart.ChartAreas.Add($ChartArea)
$Chart.Series['Series1'].Points.DataBindXY($result_time, $result_value)
$Chart.Width = 700
$Chart.Height = 400
$Chart.Left = 10
$Chart.Top = 10
$Chart.BackColor = [System.Drawing.Color]::White
$Chart.BorderColor = 'Black'
$Chart.BorderDashStyle = 'Solid'
$ChartTitle = New-Object System.Windows.Forms.DataVisualization.Charting.Title
$ChartTitle.Text = $graphTitle
$Font = New-Object System.Drawing.Font @('Microsoft Sans Serif','12', [System.Drawing.FontStyle]::Bold)
$ChartTitle.Font =$Font
$Chart.Titles.Add($ChartTitle)
#region Windows Form to Display Chart
$AnchorAll = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
$Form = New-Object Windows.Forms.Form
$Form.Width = 740
$Form.Height = 490
$Form.controls.add($Chart)
$Chart.Anchor = $AnchorAll
$Form.Add_Shown({$Form.Activate()})
[void]$Form.ShowDialog()
#endregion Windows Form to Display Chart
# Сохраняем в файл
$Chart.SaveImage('C:\temp\chart.jpeg', 'jpeg')
Ссылки