Adding Teradici PCoIP session metrics collection
Signed-off-by: Tom Powell <t.powell@mwam.com> Added collector for VMware Blast session metrics Signed-off-by: Tom Powell <t.powell@mwam.com> Updating collection logic to handle missing WMI classes Signed-off-by: Tom Powell <t.powell@mwam.com> Updating packet loss metric to gauge Signed-off-by: Tom Powell <t.powell@mwam.com>
This commit is contained in:
parent
ca15e2c70d
commit
dde839b66d
|
@ -51,10 +51,12 @@ Name | Description | Enabled by default
|
|||
[smtp](docs/collector.smtp.md) | IIS SMTP Server |
|
||||
[system](docs/collector.system.md) | System calls | ✓
|
||||
[tcp](docs/collector.tcp.md) | TCP connections |
|
||||
[teradici_pcoip](docs/collector.teradici_pcoip.md) | [Teradici PCoIP](https://www.teradici.com/web-help/pcoip_wmi_specs/) session metrics |
|
||||
[time](docs/collector.time.md) | Windows Time Service |
|
||||
[thermalzone](docs/collector.thermalzone.md) | Thermal information
|
||||
[terminal_services](docs/collector.terminal_services.md) | Terminal services (RDS)
|
||||
[textfile](docs/collector.textfile.md) | Read prometheus metrics from a text file | ✓
|
||||
[vmware_blast](docs/collector.vmware_blast.md) | VMware Blast session metrics |
|
||||
[vmware](docs/collector.vmware.md) | Performance counters installed by the Vmware Guest agent |
|
||||
|
||||
See the linked documentation on each collector for more information on reported metrics, configuration settings and usage examples.
|
||||
|
|
|
@ -0,0 +1,665 @@
|
|||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package collector
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/StackExchange/wmi"
|
||||
"github.com/prometheus-community/windows_exporter/log"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
func init() {
|
||||
registerCollector("teradici_pcoip", NewTeradiciPcoipCollector)
|
||||
}
|
||||
|
||||
// A TeradiciPcoipCollector is a Prometheus collector for WMI metrics:
|
||||
// Win32_PerfRawData_TeradiciPerf_PCoIPSessionAudioStatistics
|
||||
// Win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics
|
||||
// Win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics
|
||||
// Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
|
||||
// Win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics
|
||||
|
||||
type TeradiciPcoipCollector struct {
|
||||
AudioBytesReceived *prometheus.Desc
|
||||
AudioBytesSent *prometheus.Desc
|
||||
AudioRXBWkbitPersec *prometheus.Desc
|
||||
AudioTXBWkbitPersec *prometheus.Desc
|
||||
AudioTXBWLimitkbitPersec *prometheus.Desc
|
||||
|
||||
BytesReceived *prometheus.Desc
|
||||
BytesSent *prometheus.Desc
|
||||
PacketsReceived *prometheus.Desc
|
||||
PacketsSent *prometheus.Desc
|
||||
RXPacketsLost *prometheus.Desc
|
||||
SessionDurationSeconds *prometheus.Desc
|
||||
TXPacketsLost *prometheus.Desc
|
||||
|
||||
ImagingActiveMinimumQuality *prometheus.Desc
|
||||
ImagingApex2800Offload *prometheus.Desc
|
||||
ImagingBytesReceived *prometheus.Desc
|
||||
ImagingBytesSent *prometheus.Desc
|
||||
ImagingDecoderCapabilitykbitPersec *prometheus.Desc
|
||||
ImagingEncodedFramesPersec *prometheus.Desc
|
||||
ImagingMegapixelPersec *prometheus.Desc
|
||||
ImagingNegativeAcknowledgements *prometheus.Desc
|
||||
ImagingRXBWkbitPersec *prometheus.Desc
|
||||
ImagingSVGAdevTapframesPersec *prometheus.Desc
|
||||
ImagingTXBWkbitPersec *prometheus.Desc
|
||||
|
||||
RoundTripLatencyms *prometheus.Desc
|
||||
RXBWkbitPersec *prometheus.Desc
|
||||
RXBWPeakkbitPersec *prometheus.Desc
|
||||
RXPacketLossPercent *prometheus.Desc
|
||||
RXPacketLossPercent_Base *prometheus.Desc
|
||||
TXBWActiveLimitkbitPersec *prometheus.Desc
|
||||
TXBWkbitPersec *prometheus.Desc
|
||||
TXBWLimitkbitPersec *prometheus.Desc
|
||||
TXPacketLossPercent *prometheus.Desc
|
||||
TXPacketLossPercent_Base *prometheus.Desc
|
||||
|
||||
USBBytesReceived *prometheus.Desc
|
||||
USBBytesSent *prometheus.Desc
|
||||
USBRXBWkbitPersec *prometheus.Desc
|
||||
USBTXBWkbitPersec *prometheus.Desc
|
||||
}
|
||||
|
||||
// NewTeradiciPcoipCollector constructs a new TeradiciPcoipCollector
|
||||
func NewTeradiciPcoipCollector() (Collector, error) {
|
||||
const subsystem = "teradici_pcoip"
|
||||
return &TeradiciPcoipCollector{
|
||||
AudioBytesReceived: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "audio_bytes_received"),
|
||||
"(AudioBytesReceived)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
AudioBytesSent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "audio_bytes_sent"),
|
||||
"(AudioBytesSent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
AudioRXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "audio_rx_bw_kbit_persec"),
|
||||
"(AudioRXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
AudioTXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "audio_tx_bw_kbit_persec"),
|
||||
"(AudioTXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
AudioTXBWLimitkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "audio_tx_bw_limit_kbit_persec"),
|
||||
"(AudioTXBWLimitkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
BytesReceived: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "bytes_received"),
|
||||
"(BytesReceived)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
BytesSent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "bytes_sent"),
|
||||
"(BytesSent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
PacketsReceived: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "packets_received"),
|
||||
"(PacketsReceived)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
PacketsSent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "packets_sent"),
|
||||
"(PacketsSent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
RXPacketsLost: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "rx_packets_lost"),
|
||||
"(RXPacketsLost)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
SessionDurationSeconds: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "session_duration_seconds"),
|
||||
"(SessionDurationSeconds)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
TXPacketsLost: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "tx_packets_lost"),
|
||||
"(TXPacketsLost)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
ImagingActiveMinimumQuality: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_active_min_quality"),
|
||||
"(ImagingActiveMinimumQuality)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingApex2800Offload: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_apex2800_offload"),
|
||||
"(ImagingApex2800Offload)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingBytesReceived: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_bytes_received"),
|
||||
"(ImagingBytesReceived)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingBytesSent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_bytes_sent"),
|
||||
"(ImagingBytesSent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingDecoderCapabilitykbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_decoder_capability_kbit_persec"),
|
||||
"(ImagingDecoderCapabilitykbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingEncodedFramesPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_encoded_frames_persec"),
|
||||
"(ImagingEncodedFramesPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingMegapixelPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_megapixel_persec"),
|
||||
"(ImagingMegapixelPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingNegativeAcknowledgements: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_negative_acks"),
|
||||
"(ImagingNegativeAcknowledgements)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingRXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_rx_bw_kbit_persec"),
|
||||
"(ImagingRXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingSVGAdevTapframesPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_svga_devtap_frames_persec"),
|
||||
"(ImagingSVGAdevTapframesPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
ImagingTXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "imaging_tx_bw_kbit_persec"),
|
||||
"(ImagingTXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
RoundTripLatencyms: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "round_trip_latency_ms"),
|
||||
"(RoundTripLatencyms)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
RXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "rx_bw_kbit_persec"),
|
||||
"(RXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
RXBWPeakkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "rx_bw_peak_kbit_persec"),
|
||||
"(RXBWPeakkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
RXPacketLossPercent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "rx_packet_loss_percent"),
|
||||
"(RXPacketLossPercent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
RXPacketLossPercent_Base: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "rx_packet_loss_percent_base"),
|
||||
"(RXPacketLossPercent_Base)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
TXBWActiveLimitkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "tx_bw_active_limit_kbit_persec"),
|
||||
"(TXBWActiveLimitkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
TXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "tx_bw_kbit_persec"),
|
||||
"(TXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
TXBWLimitkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "tx_bw_limit_kbit_persec"),
|
||||
"(TXBWLimitkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
TXPacketLossPercent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "tx_packet_loss_percent"),
|
||||
"(TXPacketLossPercent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
TXPacketLossPercent_Base: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "tx_packet_loss_percent_base"),
|
||||
"(TXPacketLossPercent_Base)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
USBBytesReceived: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "usb_bytes_received"),
|
||||
"(USBBytesReceived)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
USBBytesSent: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "usb_bytes_sent"),
|
||||
"(USBBytesSent)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
USBRXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "usb_rx_bw_kbit_persec"),
|
||||
"(USBRXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
USBTXBWkbitPersec: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(Namespace, subsystem, "usb_tx_bw_kbit_persec"),
|
||||
"(USBTXBWkbitPersec)",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Collect sends the metric values for each metric
|
||||
// to the provided prometheus Metric channel.
|
||||
func (c *TeradiciPcoipCollector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
|
||||
if desc, err := c.collectAudio(ch); err != nil {
|
||||
log.Error("failed collecting teradici session audio metrics:", desc, err)
|
||||
return err
|
||||
}
|
||||
if desc, err := c.collectGeneral(ch); err != nil {
|
||||
log.Error("failed collecting teradici session general metrics:", desc, err)
|
||||
return err
|
||||
}
|
||||
if desc, err := c.collectImaging(ch); err != nil {
|
||||
log.Error("failed collecting teradici session imaging metrics:", desc, err)
|
||||
return err
|
||||
}
|
||||
if desc, err := c.collectNetwork(ch); err != nil {
|
||||
log.Error("failed collecting teradici session network metrics:", desc, err)
|
||||
return err
|
||||
}
|
||||
if desc, err := c.collectUsb(ch); err != nil {
|
||||
log.Error("failed collecting teradici session USB metrics:", desc, err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type Win32_PerfRawData_TeradiciPerf_PCoIPSessionAudioStatistics struct {
|
||||
AudioBytesReceived uint64
|
||||
AudioBytesSent uint64
|
||||
AudioRXBWkbitPersec uint64
|
||||
AudioTXBWkbitPersec uint64
|
||||
AudioTXBWLimitkbitPersec uint64
|
||||
}
|
||||
|
||||
type Win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics struct {
|
||||
BytesReceived uint64
|
||||
BytesSent uint64
|
||||
PacketsReceived uint64
|
||||
PacketsSent uint64
|
||||
RXPacketsLost uint64
|
||||
SessionDurationSeconds uint64
|
||||
TXPacketsLost uint64
|
||||
}
|
||||
|
||||
type Win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics struct {
|
||||
ImagingActiveMinimumQuality uint32
|
||||
ImagingApex2800Offload uint32
|
||||
ImagingBytesReceived uint64
|
||||
ImagingBytesSent uint64
|
||||
ImagingDecoderCapabilitykbitPersec uint32
|
||||
ImagingEncodedFramesPersec uint32
|
||||
ImagingMegapixelPersec uint32
|
||||
ImagingNegativeAcknowledgements uint32
|
||||
ImagingRXBWkbitPersec uint64
|
||||
ImagingSVGAdevTapframesPersec uint32
|
||||
ImagingTXBWkbitPersec uint64
|
||||
}
|
||||
|
||||
type Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics struct {
|
||||
RoundTripLatencyms uint32
|
||||
RXBWkbitPersec uint64
|
||||
RXBWPeakkbitPersec uint32
|
||||
RXPacketLossPercent uint32
|
||||
RXPacketLossPercent_Base uint32
|
||||
TXBWActiveLimitkbitPersec uint32
|
||||
TXBWkbitPersec uint64
|
||||
TXBWLimitkbitPersec uint32
|
||||
TXPacketLossPercent uint32
|
||||
TXPacketLossPercent_Base uint32
|
||||
}
|
||||
|
||||
type Win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics struct {
|
||||
USBBytesReceived uint64
|
||||
USBBytesSent uint64
|
||||
USBRXBWkbitPersec uint64
|
||||
USBTXBWkbitPersec uint64
|
||||
}
|
||||
|
||||
func (c *TeradiciPcoipCollector) collectAudio(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||
var dst []Win32_PerfRawData_TeradiciPerf_PCoIPSessionAudioStatistics
|
||||
q := queryAll(&dst)
|
||||
if err := wmi.Query(q, &dst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(dst) == 0 {
|
||||
return nil, errors.New("WMI query returned empty result set")
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.AudioBytesReceived,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].AudioBytesReceived),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.AudioBytesSent,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].AudioBytesSent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.AudioRXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].AudioRXBWkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.AudioTXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].AudioTXBWkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.AudioTXBWLimitkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].AudioTXBWLimitkbitPersec),
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *TeradiciPcoipCollector) collectGeneral(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||
var dst []Win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics
|
||||
q := queryAll(&dst)
|
||||
if err := wmi.Query(q, &dst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(dst) == 0 {
|
||||
return nil, errors.New("WMI query returned empty result set")
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.BytesReceived,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].BytesReceived),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.BytesSent,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].BytesSent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.PacketsReceived,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].PacketsReceived),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.PacketsSent,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].PacketsSent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.RXPacketsLost,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].RXPacketsLost),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.SessionDurationSeconds,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].SessionDurationSeconds),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TXPacketsLost,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].TXPacketsLost),
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *TeradiciPcoipCollector) collectImaging(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||
var dst []Win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics
|
||||
q := queryAll(&dst)
|
||||
if err := wmi.Query(q, &dst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(dst) == 0 {
|
||||
return nil, errors.New("WMI query returned empty result set")
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingActiveMinimumQuality,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingActiveMinimumQuality),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingApex2800Offload,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingApex2800Offload),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingBytesReceived,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].ImagingBytesReceived),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingBytesSent,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].ImagingBytesSent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingDecoderCapabilitykbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingDecoderCapabilitykbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingEncodedFramesPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingEncodedFramesPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingMegapixelPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingMegapixelPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingNegativeAcknowledgements,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].ImagingNegativeAcknowledgements),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingRXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingRXBWkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingSVGAdevTapframesPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingSVGAdevTapframesPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.ImagingTXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].ImagingTXBWkbitPersec),
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *TeradiciPcoipCollector) collectNetwork(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||
var dst []Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
|
||||
q := queryAll(&dst)
|
||||
if err := wmi.Query(q, &dst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(dst) == 0 {
|
||||
return nil, errors.New("WMI query returned empty result set")
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.RoundTripLatencyms,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].RoundTripLatencyms),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.RXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].RXBWkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.RXBWPeakkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].RXBWPeakkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.RXPacketLossPercent,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].RXPacketLossPercent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.RXPacketLossPercent_Base,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].RXPacketLossPercent_Base),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TXBWActiveLimitkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].TXBWActiveLimitkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].TXBWkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TXBWLimitkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].TXBWLimitkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TXPacketLossPercent,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].TXPacketLossPercent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TXPacketLossPercent_Base,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].TXPacketLossPercent_Base),
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (c *TeradiciPcoipCollector) collectUsb(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||
var dst []Win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics
|
||||
q := queryAll(&dst)
|
||||
if err := wmi.Query(q, &dst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(dst) == 0 {
|
||||
return nil, errors.New("WMI query returned empty result set")
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.USBBytesReceived,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].USBBytesReceived),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.USBBytesSent,
|
||||
prometheus.CounterValue,
|
||||
float64(dst[0].USBBytesSent),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.USBRXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].USBRXBWkbitPersec),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.USBTXBWkbitPersec,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].USBTXBWkbitPersec),
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package collector
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func BenchmarkTeradiciPcoipCollector(b *testing.B) {
|
||||
benchmarkCollector(b, "teradici_pcoip", NewTeradiciPcoipCollector)
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,9 @@
|
|||
package collector
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func BenchmarkVmwareBlastCollector(b *testing.B) {
|
||||
benchmarkCollector(b, "vmware_blast", NewVmwareBlastCollector)
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
# teradici_pcoip collector
|
||||
|
||||
The teradici_pcoip collector exposes metrics relating to Teradici PCoIP sessions
|
||||
|
||||
|||
|
||||
-|-
|
||||
Metric name prefix | `teradici_pcoip`
|
||||
Classes | `Win32_PerfRawData_TeradiciPerf_PCoIPSessionAudioStatistics`, `Win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics`,`Win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics`,`Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics`,`Win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics`
|
||||
Enabled by default? | No
|
||||
|
||||
## Flags
|
||||
|
||||
None
|
||||
|
||||
## Metrics
|
||||
|
||||
Name | Description | Type | Labels
|
||||
-----|-------------|------|-------
|
||||
`windows_teradici_pcoip_audio_bytes_received` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_audio_bytes_sent` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_audio_rx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_audio_tx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_audio_tx_bw_limit_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_bytes_received` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_bytes_sent` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_packets_received` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_packets_sent` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_rx_packets_lost` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_session_duration_seconds` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_tx_packets_lost` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_imaging_active_min_quality` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_apex2800_offload` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_bytes_received` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_imaging_bytes_sent` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_imaging_decoder_capability_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_encoded_frames_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_megapixel_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_negative_acks` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_imaging_rx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_svga_devtap_frames_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_imaging_tx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_round_trip_latency_ms` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_rx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_rx_bw_peak_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_rx_packet_loss_percent` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_rx_packet_loss_percent_base` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_tx_bw_active_limit_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_tx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_tx_bw_limit_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_tx_packet_loss_percent` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_tx_packet_loss_percent_base` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_usb_bytes_received` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_usb_bytes_sent` | _Not yet documented_ | counter | None
|
||||
`windows_teradici_pcoip_usb_rx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
`windows_teradici_pcoip_usb_tx_bw_kbit_persec` | _Not yet documented_ | gauge | None
|
||||
|
||||
### Example metric
|
||||
_This collector does not yet have explained examples, we would appreciate your help adding them!_
|
||||
|
||||
## Useful queries
|
||||
_This collector does not yet have any useful queries added, we would appreciate your help adding them!_
|
||||
|
||||
## Alerting examples
|
||||
_This collector does not yet have alerting examples, we would appreciate your help adding them!_
|
|
@ -0,0 +1,98 @@
|
|||
# vmware_blast collector
|
||||
|
||||
The vmware_blast collector exposes metrics relating to VMware Blast sessions
|
||||
|
||||
|||
|
||||
-|-
|
||||
Metric name prefix | `vmware_blast`
|
||||
Classes | `Win32_PerfRawData_Counters_VMwareBlastAudioCounters`,`Win32_PerfRawData_Counters_VMwareBlastCDRCounters`,`Win32_PerfRawData_Counters_VMwareBlastClipboardCounters`,`Win32_PerfRawData_Counters_VMwareBlastHTML5MMRCounters`,`Win32_PerfRawData_Counters_VMwareBlastImagingCounters`,`Win32_PerfRawData_Counters_VMwareBlastRTAVCounters`,`Win32_PerfRawData_Counters_VMwareBlastSerialPortandScannerCounters`,`Win32_PerfRawData_Counters_VMwareBlastSessionCounters`,`Win32_PerfRawData_Counters_VMwareBlastSkypeforBusinessControlCounters`,`Win32_PerfRawData_Counters_VMwareBlastThinPrintCounters`,`Win32_PerfRawData_Counters_VMwareBlastUSBCounters`,`Win32_PerfRawData_Counters_VMwareBlastWindowsMediaMMRCounters`
|
||||
Enabled by default? | No
|
||||
|
||||
## Flags
|
||||
|
||||
None
|
||||
|
||||
## Metrics
|
||||
|
||||
Some of these metrics may not be collected, depending on the installation options chosen when installing the Horizon agent
|
||||
|
||||
Name | Description | Type | Labels
|
||||
-----|-------------|------|-------
|
||||
`windows_vmware_blast_audio_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_audio_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_audio_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_audio_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_cdr_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_cdr_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_cdr_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_cdr_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_clipboard_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_clipboard_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_clipboard_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_clipboard_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_html5_mmr_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_html5_mmr_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_html5_mmr_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_html5_mmr_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_dirty_frames_per_second` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_imaging_fbc_rate` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_imaging_frames_per_second` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_imaging_poll_rate` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_imaging_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_total_dirty_frames` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_total_fbc` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_total_frames` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_total_poll` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_imaging_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_rtav_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_rtav_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_rtav_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_rtav_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_serial_port_and_scanner_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_serial_port_and_scanner_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_serial_port_and_scanner_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_serial_port_and_scanner_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_automatic_reconnect_count` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_cumlative_received_bytes_over_tcp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_cumlative_received_bytes_over_udp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_cumlative_transmitted_bytes_over_tcp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_cumlative_transmitted_bytes_over_udp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_estimated_bandwidth_uplink` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_session_instantaneous_received_bytes_over_tcp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_instantaneous_received_bytes_over_udp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_instantaneous_transmitted_bytes_over_tcp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_instantaneous_transmitted_bytes_over_udp` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_jitter_uplink` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_session_packet_loss_uplink` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_session_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_rtt` | _Not yet documented_ | gauge | None
|
||||
`windows_vmware_blast_session_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_session_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_skype_for_business_control_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_skype_for_business_control_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_skype_for_business_control_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_skype_for_business_control_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_thinprint_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_thinprint_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_thinprint_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_thinprint_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_usb_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_usb_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_usb_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_usb_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_windows_media_mmr_received_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_windows_media_mmr_received_packets` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_windows_media_mmr_transmitted_bytes` | _Not yet documented_ | counter | None
|
||||
`windows_vmware_blast_windows_media_mmr_transmitted_packets` | _Not yet documented_ | counter | None
|
||||
|
||||
### Example metric
|
||||
_This collector does not yet have explained examples, we would appreciate your help adding them!_
|
||||
|
||||
## Useful queries
|
||||
_This collector does not yet have any useful queries added, we would appreciate your help adding them!_
|
||||
|
||||
## Alerting examples
|
||||
_This collector does not yet have alerting examples, we would appreciate your help adding them!_
|
Loading…
Reference in New Issue