mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-02-28 15:46:36 +00:00
chore: pass context aware logger to collectors (#1582)
This commit is contained in:
10
exporter.go
10
exporter.go
@@ -12,6 +12,7 @@ import (
|
|||||||
|
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/pprof"
|
"net/http/pprof"
|
||||||
@@ -202,15 +203,14 @@ func main() {
|
|||||||
|
|
||||||
enabledCollectorList := utils.ExpandEnabledCollectors(*enabledCollectors)
|
enabledCollectorList := utils.ExpandEnabledCollectors(*enabledCollectors)
|
||||||
collectors.Enable(enabledCollectorList)
|
collectors.Enable(enabledCollectorList)
|
||||||
collectors.SetLogger(logger)
|
|
||||||
|
|
||||||
// Initialize collectors before loading
|
// Initialize collectors before loading
|
||||||
err = collectors.Build()
|
err = collectors.Build(logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(logger).Log("msg", "Couldn't load collectors", "err", err)
|
_ = level.Error(logger).Log("msg", "Couldn't load collectors", "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
err = collectors.SetPerfCounterQuery()
|
err = collectors.SetPerfCounterQuery(logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(logger).Log("msg", "Couldn't set performance counter query", "err", err)
|
_ = level.Error(logger).Log("msg", "Couldn't set performance counter query", "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -229,7 +229,7 @@ func main() {
|
|||||||
_ = level.Info(logger).Log("msg", fmt.Sprintf("Enabled collectors: %v", strings.Join(enabledCollectorList, ", ")))
|
_ = level.Info(logger).Log("msg", fmt.Sprintf("Enabled collectors: %v", strings.Join(enabledCollectorList, ", ")))
|
||||||
|
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
mux.HandleFunc(*metricsPath, withConcurrencyLimit(*maxRequests, collectors.BuildServeHTTP(*disableExporterMetrics, *timeoutMargin)))
|
mux.HandleFunc(*metricsPath, withConcurrencyLimit(*maxRequests, collectors.BuildServeHTTP(logger, *disableExporterMetrics, *timeoutMargin)))
|
||||||
mux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
|
mux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
_, err := fmt.Fprintln(w, `{"status":"ok"}`)
|
_, err := fmt.Fprintln(w, `{"status":"ok"}`)
|
||||||
@@ -274,7 +274,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
if err := web.ListenAndServe(server, webConfig, logger); err != nil {
|
if err := web.ListenAndServe(server, webConfig, logger); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||||
_ = level.Error(logger).Log("msg", "cannot start windows_exporter", "err", err)
|
_ = level.Error(logger).Log("msg", "cannot start windows_exporter", "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|||||||
5
go.mod
5
go.mod
@@ -21,7 +21,10 @@ require (
|
|||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
require github.com/pkg/errors v0.9.1
|
require (
|
||||||
|
github.com/google/uuid v1.6.0
|
||||||
|
github.com/pkg/errors v0.9.1
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -63,6 +63,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
|
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
|
||||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_DirectoryServices_DirectoryServices metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_DirectoryServices_DirectoryServices metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
addressBookClientSessions *prometheus.Desc
|
addressBookClientSessions *prometheus.Desc
|
||||||
addressBookOperationsTotal *prometheus.Desc
|
addressBookOperationsTotal *prometheus.Desc
|
||||||
@@ -88,7 +87,7 @@ type Collector struct {
|
|||||||
tombstonesObjectsVisitedTotal *prometheus.Desc
|
tombstonesObjectsVisitedTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -97,8 +96,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,11 +107,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +115,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.addressBookOperationsTotal = prometheus.NewDesc(
|
c.addressBookOperationsTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "address_book_operations_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "address_book_operations_total"),
|
||||||
"",
|
"",
|
||||||
@@ -502,9 +495,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting ad metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting ad metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -662,9 +656,9 @@ type Win32_PerfRawData_DirectoryServices_DirectoryServices struct {
|
|||||||
TransitivesuboperationsPersec uint32
|
TransitivesuboperationsPersec uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_DirectoryServices_DirectoryServices
|
var dst []Win32_PerfRawData_DirectoryServices_DirectoryServices
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
challengeResponseProcessingTime *prometheus.Desc
|
challengeResponseProcessingTime *prometheus.Desc
|
||||||
challengeResponsesPerSecond *prometheus.Desc
|
challengeResponsesPerSecond *prometheus.Desc
|
||||||
@@ -40,7 +39,7 @@ type Collector struct {
|
|||||||
signedCertificateTimestampListsPerSecond *prometheus.Desc
|
signedCertificateTimestampListsPerSecond *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -49,8 +48,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,11 +59,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Certification Authority"}, nil
|
return []string{"Certification Authority"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +67,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.requestsPerSecond = prometheus.NewDesc(
|
c.requestsPerSecond = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "requests_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "requests_total"),
|
||||||
"Total certificate requests processed",
|
"Total certificate requests processed",
|
||||||
@@ -157,9 +150,10 @@ func (c *Collector) Build() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectADCSCounters(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting ADCS metrics", "err", err)
|
if err := c.collectADCSCounters(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting ADCS metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -182,12 +176,12 @@ type perflibADCS struct {
|
|||||||
SignedCertificateTimestampListProcessingTime float64 `perflib:"Signed Certificate Timestamp List processing time (ms)"`
|
SignedCertificateTimestampListProcessingTime float64 `perflib:"Signed Certificate Timestamp List processing time (ms)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectADCSCounters(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectADCSCounters(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
dst := make([]perflibADCS, 0)
|
dst := make([]perflibADCS, 0)
|
||||||
if _, ok := ctx.PerfObjects["Certification Authority"]; !ok {
|
if _, ok := ctx.PerfObjects["Certification Authority"]; !ok {
|
||||||
return errors.New("perflib did not contain an entry for Certification Authority")
|
return errors.New("perflib did not contain an entry for Certification Authority")
|
||||||
}
|
}
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["Certification Authority"], &dst, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["Certification Authority"], &dst, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
adLoginConnectionFailures *prometheus.Desc
|
adLoginConnectionFailures *prometheus.Desc
|
||||||
artifactDBFailures *prometheus.Desc
|
artifactDBFailures *prometheus.Desc
|
||||||
@@ -67,7 +66,7 @@ type Collector struct {
|
|||||||
wstrustTokenRequests *prometheus.Desc
|
wstrustTokenRequests *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -76,8 +75,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,11 +86,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"AD FS"}, nil
|
return []string{"AD FS"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +94,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.adLoginConnectionFailures = prometheus.NewDesc(
|
c.adLoginConnectionFailures = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "ad_login_connection_failures_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "ad_login_connection_failures_total"),
|
||||||
"Total number of connection failures to an Active Directory domain controller",
|
"Total number of connection failures to an Active Directory domain controller",
|
||||||
@@ -410,9 +403,10 @@ type perflibADFS struct {
|
|||||||
FederationMetadataRequests float64 `perflib:"Federation Metadata Requests"`
|
FederationMetadataRequests float64 `perflib:"Federation Metadata Requests"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var adfsData []perflibADFS
|
var adfsData []perflibADFS
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["AD FS"], &adfsData, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["AD FS"], &adfsData, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
25
pkg/collector/cache/cache.go
vendored
25
pkg/collector/cache/cache.go
vendored
@@ -21,7 +21,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for Perflib Cache metrics.
|
// A Collector is a Prometheus Collector for Perflib Cache metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
asyncCopyReadsTotal *prometheus.Desc
|
asyncCopyReadsTotal *prometheus.Desc
|
||||||
asyncDataMapsTotal *prometheus.Desc
|
asyncDataMapsTotal *prometheus.Desc
|
||||||
@@ -54,7 +53,7 @@ type Collector struct {
|
|||||||
syncPinReadsTotal *prometheus.Desc
|
syncPinReadsTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -63,8 +62,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,11 +73,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Cache"}, nil
|
return []string{"Cache"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +81,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.asyncCopyReadsTotal = prometheus.NewDesc(
|
c.asyncCopyReadsTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "async_copy_reads_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "async_copy_reads_total"),
|
||||||
"(AsyncCopyReadsTotal)",
|
"(AsyncCopyReadsTotal)",
|
||||||
@@ -267,9 +260,10 @@ func (c *Collector) Build() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Collect implements the Collector interface.
|
// Collect implements the Collector interface.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting cache metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting cache metrics", "err", err)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -311,9 +305,10 @@ type perflibCache struct {
|
|||||||
DataMapHitsPercent float64 `perflib:"Data Map Hits %"`
|
DataMapHitsPercent float64 `perflib:"Data Map Hits %"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []perflibCache // Single-instance class, array is required but will have single entry.
|
var dst []perflibCache // Single-instance class, array is required but will have single entry.
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Cache"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Cache"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,64 +89,64 @@ func NewBuilderWithFlags[C Collector](fn BuilderWithFlags[C]) BuilderWithFlags[C
|
|||||||
// NewWithConfig To be called by the external libraries for collector initialization without running kingpin.Parse
|
// NewWithConfig To be called by the external libraries for collector initialization without running kingpin.Parse
|
||||||
//
|
//
|
||||||
//goland:noinspection GoUnusedExportedFunction
|
//goland:noinspection GoUnusedExportedFunction
|
||||||
func NewWithConfig(logger log.Logger, config Config) Collectors {
|
func NewWithConfig(config Config) Collectors {
|
||||||
collectors := map[string]Collector{}
|
collectors := map[string]Collector{}
|
||||||
collectors[ad.Name] = ad.New(logger, &config.AD)
|
collectors[ad.Name] = ad.New(&config.AD)
|
||||||
collectors[adcs.Name] = adcs.New(logger, &config.ADCS)
|
collectors[adcs.Name] = adcs.New(&config.ADCS)
|
||||||
collectors[adfs.Name] = adfs.New(logger, &config.ADFS)
|
collectors[adfs.Name] = adfs.New(&config.ADFS)
|
||||||
collectors[cache.Name] = cache.New(logger, &config.Cache)
|
collectors[cache.Name] = cache.New(&config.Cache)
|
||||||
collectors[container.Name] = container.New(logger, &config.Container)
|
collectors[container.Name] = container.New(&config.Container)
|
||||||
collectors[cpu.Name] = cpu.New(logger, &config.CPU)
|
collectors[cpu.Name] = cpu.New(&config.CPU)
|
||||||
collectors[cpu_info.Name] = cpu_info.New(logger, &config.CPUInfo)
|
collectors[cpu_info.Name] = cpu_info.New(&config.CPUInfo)
|
||||||
collectors[cs.Name] = cs.New(logger, &config.Cs)
|
collectors[cs.Name] = cs.New(&config.Cs)
|
||||||
collectors[dfsr.Name] = dfsr.New(logger, &config.DFSR)
|
collectors[dfsr.Name] = dfsr.New(&config.DFSR)
|
||||||
collectors[dhcp.Name] = dhcp.New(logger, &config.Dhcp)
|
collectors[dhcp.Name] = dhcp.New(&config.Dhcp)
|
||||||
collectors[diskdrive.Name] = diskdrive.New(logger, &config.DiskDrive)
|
collectors[diskdrive.Name] = diskdrive.New(&config.DiskDrive)
|
||||||
collectors[dns.Name] = dns.New(logger, &config.DNS)
|
collectors[dns.Name] = dns.New(&config.DNS)
|
||||||
collectors[exchange.Name] = exchange.New(logger, &config.Exchange)
|
collectors[exchange.Name] = exchange.New(&config.Exchange)
|
||||||
collectors[fsrmquota.Name] = fsrmquota.New(logger, &config.Fsrmquota)
|
collectors[fsrmquota.Name] = fsrmquota.New(&config.Fsrmquota)
|
||||||
collectors[hyperv.Name] = hyperv.New(logger, &config.Hyperv)
|
collectors[hyperv.Name] = hyperv.New(&config.Hyperv)
|
||||||
collectors[iis.Name] = iis.New(logger, &config.IIS)
|
collectors[iis.Name] = iis.New(&config.IIS)
|
||||||
collectors[license.Name] = license.New(logger, &config.License)
|
collectors[license.Name] = license.New(&config.License)
|
||||||
collectors[logical_disk.Name] = logical_disk.New(logger, &config.LogicalDisk)
|
collectors[logical_disk.Name] = logical_disk.New(&config.LogicalDisk)
|
||||||
collectors[logon.Name] = logon.New(logger, &config.Logon)
|
collectors[logon.Name] = logon.New(&config.Logon)
|
||||||
collectors[memory.Name] = memory.New(logger, &config.Memory)
|
collectors[memory.Name] = memory.New(&config.Memory)
|
||||||
collectors[mscluster_cluster.Name] = mscluster_cluster.New(logger, &config.MsclusterCluster)
|
collectors[mscluster_cluster.Name] = mscluster_cluster.New(&config.MsclusterCluster)
|
||||||
collectors[mscluster_network.Name] = mscluster_network.New(logger, &config.MsclusterNetwork)
|
collectors[mscluster_network.Name] = mscluster_network.New(&config.MsclusterNetwork)
|
||||||
collectors[mscluster_node.Name] = mscluster_node.New(logger, &config.MsclusterNode)
|
collectors[mscluster_node.Name] = mscluster_node.New(&config.MsclusterNode)
|
||||||
collectors[mscluster_resource.Name] = mscluster_resource.New(logger, &config.MsclusterResource)
|
collectors[mscluster_resource.Name] = mscluster_resource.New(&config.MsclusterResource)
|
||||||
collectors[mscluster_resourcegroup.Name] = mscluster_resourcegroup.New(logger, &config.MsclusterResourceGroup)
|
collectors[mscluster_resourcegroup.Name] = mscluster_resourcegroup.New(&config.MsclusterResourceGroup)
|
||||||
collectors[msmq.Name] = msmq.New(logger, &config.Msmq)
|
collectors[msmq.Name] = msmq.New(&config.Msmq)
|
||||||
collectors[mssql.Name] = mssql.New(logger, &config.Mssql)
|
collectors[mssql.Name] = mssql.New(&config.Mssql)
|
||||||
collectors[net.Name] = net.New(logger, &config.Net)
|
collectors[net.Name] = net.New(&config.Net)
|
||||||
collectors[netframework_clrexceptions.Name] = netframework_clrexceptions.New(logger, &config.NetframeworkClrexceptions)
|
collectors[netframework_clrexceptions.Name] = netframework_clrexceptions.New(&config.NetframeworkClrexceptions)
|
||||||
collectors[netframework_clrinterop.Name] = netframework_clrinterop.New(logger, &config.NetframeworkClrinterop)
|
collectors[netframework_clrinterop.Name] = netframework_clrinterop.New(&config.NetframeworkClrinterop)
|
||||||
collectors[netframework_clrjit.Name] = netframework_clrjit.New(logger, &config.NetframeworkClrjit)
|
collectors[netframework_clrjit.Name] = netframework_clrjit.New(&config.NetframeworkClrjit)
|
||||||
collectors[netframework_clrloading.Name] = netframework_clrloading.New(logger, &config.NetframeworkClrloading)
|
collectors[netframework_clrloading.Name] = netframework_clrloading.New(&config.NetframeworkClrloading)
|
||||||
collectors[netframework_clrlocksandthreads.Name] = netframework_clrlocksandthreads.New(logger, &config.NetframeworkClrlocksandthreads)
|
collectors[netframework_clrlocksandthreads.Name] = netframework_clrlocksandthreads.New(&config.NetframeworkClrlocksandthreads)
|
||||||
collectors[netframework_clrmemory.Name] = netframework_clrmemory.New(logger, &config.NetframeworkClrmemory)
|
collectors[netframework_clrmemory.Name] = netframework_clrmemory.New(&config.NetframeworkClrmemory)
|
||||||
collectors[netframework_clrremoting.Name] = netframework_clrremoting.New(logger, &config.NetframeworkClrremoting)
|
collectors[netframework_clrremoting.Name] = netframework_clrremoting.New(&config.NetframeworkClrremoting)
|
||||||
collectors[netframework_clrsecurity.Name] = netframework_clrsecurity.New(logger, &config.NetframeworkClrsecurity)
|
collectors[netframework_clrsecurity.Name] = netframework_clrsecurity.New(&config.NetframeworkClrsecurity)
|
||||||
collectors[nps.Name] = nps.New(logger, &config.Nps)
|
collectors[nps.Name] = nps.New(&config.Nps)
|
||||||
collectors[os.Name] = os.New(logger, &config.Os)
|
collectors[os.Name] = os.New(&config.Os)
|
||||||
collectors[physical_disk.Name] = physical_disk.New(logger, &config.PhysicalDisk)
|
collectors[physical_disk.Name] = physical_disk.New(&config.PhysicalDisk)
|
||||||
collectors[printer.Name] = printer.New(logger, &config.Printer)
|
collectors[printer.Name] = printer.New(&config.Printer)
|
||||||
collectors[process.Name] = process.New(logger, &config.Process)
|
collectors[process.Name] = process.New(&config.Process)
|
||||||
collectors[remote_fx.Name] = remote_fx.New(logger, &config.RemoteFx)
|
collectors[remote_fx.Name] = remote_fx.New(&config.RemoteFx)
|
||||||
collectors[scheduled_task.Name] = scheduled_task.New(logger, &config.ScheduledTask)
|
collectors[scheduled_task.Name] = scheduled_task.New(&config.ScheduledTask)
|
||||||
collectors[service.Name] = service.New(logger, &config.Service)
|
collectors[service.Name] = service.New(&config.Service)
|
||||||
collectors[smb.Name] = smb.New(logger, &config.SMB)
|
collectors[smb.Name] = smb.New(&config.SMB)
|
||||||
collectors[smbclient.Name] = smbclient.New(logger, &config.SMBClient)
|
collectors[smbclient.Name] = smbclient.New(&config.SMBClient)
|
||||||
collectors[smtp.Name] = smtp.New(logger, &config.SMTP)
|
collectors[smtp.Name] = smtp.New(&config.SMTP)
|
||||||
collectors[system.Name] = system.New(logger, &config.System)
|
collectors[system.Name] = system.New(&config.System)
|
||||||
collectors[teradici_pcoip.Name] = teradici_pcoip.New(logger, &config.TeradiciPcoip)
|
collectors[teradici_pcoip.Name] = teradici_pcoip.New(&config.TeradiciPcoip)
|
||||||
collectors[tcp.Name] = tcp.New(logger, &config.TCP)
|
collectors[tcp.Name] = tcp.New(&config.TCP)
|
||||||
collectors[terminal_services.Name] = terminal_services.New(logger, &config.TerminalServices)
|
collectors[terminal_services.Name] = terminal_services.New(&config.TerminalServices)
|
||||||
collectors[textfile.Name] = textfile.New(logger, &config.Textfile)
|
collectors[textfile.Name] = textfile.New(&config.Textfile)
|
||||||
collectors[thermalzone.Name] = thermalzone.New(logger, &config.Thermalzone)
|
collectors[thermalzone.Name] = thermalzone.New(&config.Thermalzone)
|
||||||
collectors[time.Name] = time.New(logger, &config.Time)
|
collectors[time.Name] = time.New(&config.Time)
|
||||||
collectors[vmware.Name] = vmware.New(logger, &config.Vmware)
|
collectors[vmware.Name] = vmware.New(&config.Vmware)
|
||||||
collectors[vmware_blast.Name] = vmware_blast.New(logger, &config.VmwareBlast)
|
collectors[vmware_blast.Name] = vmware_blast.New(&config.VmwareBlast)
|
||||||
|
|
||||||
return New(collectors)
|
return New(collectors)
|
||||||
}
|
}
|
||||||
@@ -158,15 +158,7 @@ func New(collectors Map) Collectors {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collectors) SetLogger(logger log.Logger) {
|
func (c *Collectors) SetPerfCounterQuery(logger log.Logger) error {
|
||||||
c.logger = logger
|
|
||||||
|
|
||||||
for _, collector := range c.collectors {
|
|
||||||
collector.SetLogger(logger)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collectors) SetPerfCounterQuery() error {
|
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
|
|
||||||
@@ -177,7 +169,7 @@ func (c *Collectors) SetPerfCounterQuery() error {
|
|||||||
perfCounterDependencies := make([]string, 0, len(c.collectors))
|
perfCounterDependencies := make([]string, 0, len(c.collectors))
|
||||||
|
|
||||||
for _, collector := range c.collectors {
|
for _, collector := range c.collectors {
|
||||||
perfCounterNames, err = collector.GetPerfCounter()
|
perfCounterNames, err = collector.GetPerfCounter(logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -205,11 +197,11 @@ func (c *Collectors) Enable(enabledCollectors []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build To be called by the exporter for collector initialization.
|
// Build To be called by the exporter for collector initialization.
|
||||||
func (c *Collectors) Build() error {
|
func (c *Collectors) Build(logger log.Logger) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
for _, collector := range c.collectors {
|
for _, collector := range c.collectors {
|
||||||
if err = collector.Build(); err != nil {
|
if err = collector.Build(logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,7 +224,7 @@ func (c *Collectors) Close() error {
|
|||||||
errs := make([]error, 0, len(c.collectors))
|
errs := make([]error, 0, len(c.collectors))
|
||||||
|
|
||||||
for _, collector := range c.collectors {
|
for _, collector := range c.collectors {
|
||||||
if err := collector.Build(); err != nil {
|
if err := collector.Close(); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for containers metrics.
|
// A Collector is a Prometheus Collector for containers metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
// Presence
|
// Presence
|
||||||
containerAvailable *prometheus.Desc
|
containerAvailable *prometheus.Desc
|
||||||
@@ -57,7 +56,7 @@ type Collector struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// New constructs a new Collector.
|
// New constructs a new Collector.
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -66,8 +65,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,11 +76,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +84,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.containerAvailable = prometheus.NewDesc(
|
c.containerAvailable = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "available"),
|
prometheus.BuildFQName(types.Namespace, Name, "available"),
|
||||||
"Available",
|
"Available",
|
||||||
@@ -205,27 +198,28 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting collector metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting collector metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// containerClose closes the container resource.
|
// containerClose closes the container resource.
|
||||||
func (c *Collector) containerClose(container hcsshim.Container) {
|
func (c *Collector) containerClose(logger log.Logger, container hcsshim.Container) {
|
||||||
err := container.Close()
|
err := container.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("err", err)
|
_ = level.Error(logger).Log("err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
// Types Container is passed to get the containers compute systems only
|
// Types Container is passed to get the containers compute systems only
|
||||||
containers, err := hcsshim.GetContainers(hcsshim.ComputeSystemQuery{Types: []string{"Container"}})
|
containers, err := hcsshim.GetContainers(hcsshim.ComputeSystemQuery{Types: []string{"Container"}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "Err in Getting containers", "err", err)
|
_ = level.Error(logger).Log("msg", "Err in Getting containers", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,16 +241,16 @@ func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
|||||||
func() {
|
func() {
|
||||||
container, err := hcsshim.OpenContainer(containerDetails.ID)
|
container, err := hcsshim.OpenContainer(containerDetails.ID)
|
||||||
if container != nil {
|
if container != nil {
|
||||||
defer c.containerClose(container)
|
defer c.containerClose(logger, container)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "err in opening container", "containerId", containerDetails.ID, "err", err)
|
_ = level.Error(logger).Log("msg", "err in opening container", "containerId", containerDetails.ID, "err", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cstats, err := container.Statistics()
|
cstats, err := container.Statistics()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "err in fetching container Statistics", "containerId", containerDetails.ID, "err", err)
|
_ = level.Error(logger).Log("msg", "err in fetching container Statistics", "containerId", containerDetails.ID, "err", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,19 +328,19 @@ func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
|||||||
|
|
||||||
hnsEndpoints, err := hcsshim.HNSListEndpointRequest()
|
hnsEndpoints, err := hcsshim.HNSListEndpointRequest()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Failed to collect network stats for containers")
|
_ = level.Warn(logger).Log("msg", "Failed to collect network stats for containers")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(hnsEndpoints) == 0 {
|
if len(hnsEndpoints) == 0 {
|
||||||
_ = level.Info(c.logger).Log("msg", "No network stats for containers to collect")
|
_ = level.Info(logger).Log("msg", "No network stats for containers to collect")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, endpoint := range hnsEndpoints {
|
for _, endpoint := range hnsEndpoints {
|
||||||
endpointStats, err := hcsshim.GetHNSEndpointStats(endpoint.Id)
|
endpointStats, err := hcsshim.GetHNSEndpointStats(endpoint.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Failed to collect network stats for interface "+endpoint.Id, "err", err)
|
_ = level.Warn(logger).Log("msg", "Failed to collect network stats for interface "+endpoint.Id, "err", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,7 +349,7 @@ func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
|||||||
endpointId := strings.ToUpper(endpoint.Id)
|
endpointId := strings.ToUpper(endpoint.Id)
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Failed to collect network stats for container "+containerId)
|
_ = level.Warn(logger).Log("msg", "Failed to collect network stats for container "+containerId)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
cStateSecondsTotal *prometheus.Desc
|
cStateSecondsTotal *prometheus.Desc
|
||||||
timeTotal *prometheus.Desc
|
timeTotal *prometheus.Desc
|
||||||
@@ -38,7 +37,7 @@ type Collector struct {
|
|||||||
processorPrivilegedUtility *prometheus.Desc
|
processorPrivilegedUtility *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -47,8 +46,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,11 +57,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
if winversion.WindowsVersionFloat > 6.05 {
|
if winversion.WindowsVersionFloat > 6.05 {
|
||||||
return []string{"Processor Information"}, nil
|
return []string{"Processor Information"}, nil
|
||||||
}
|
}
|
||||||
@@ -75,7 +68,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.cStateSecondsTotal = prometheus.NewDesc(
|
c.cStateSecondsTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "cstate_seconds_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "cstate_seconds_total"),
|
||||||
"Time spent in low-power idle state",
|
"Time spent in low-power idle state",
|
||||||
@@ -193,12 +186,13 @@ func (c *Collector) Build() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
if winversion.WindowsVersionFloat > 6.05 {
|
if winversion.WindowsVersionFloat > 6.05 {
|
||||||
return c.CollectFull(ctx, ch)
|
return c.CollectFull(ctx, logger, ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.CollectBasic(ctx, ch)
|
return c.CollectBasic(ctx, logger, ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
type perflibProcessor struct {
|
type perflibProcessor struct {
|
||||||
@@ -220,9 +214,10 @@ type perflibProcessor struct {
|
|||||||
PercentUserTime float64 `perflib:"% User Time"`
|
PercentUserTime float64 `perflib:"% User Time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) CollectBasic(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) CollectBasic(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
data := make([]perflibProcessor, 0)
|
data := make([]perflibProcessor, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["Processor"], &data, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["Processor"], &data, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -329,9 +324,10 @@ type perflibProcessorInformation struct {
|
|||||||
UserTimeSeconds float64 `perflib:"% User Time"`
|
UserTimeSeconds float64 `perflib:"% User Time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) CollectFull(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) CollectFull(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
data := make([]perflibProcessorInformation, 0)
|
data := make([]perflibProcessorInformation, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["Processor Information"], &data, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["Processor Information"], &data, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,11 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for a few WMI metrics in Win32_Processor.
|
// A Collector is a Prometheus Collector for a few WMI metrics in Win32_Processor.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
cpuInfo *prometheus.Desc
|
cpuInfo *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -42,8 +41,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,11 +52,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +60,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.cpuInfo = prometheus.NewDesc(
|
c.cpuInfo = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, "", Name),
|
prometheus.BuildFQName(types.Namespace, "", Name),
|
||||||
"Labelled CPU information as provided by Win32_Processor",
|
"Labelled CPU information as provided by Win32_Processor",
|
||||||
@@ -98,9 +91,10 @@ type win32_Processor struct {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
if err := c.collect(ch); err != nil {
|
if err := c.collect(ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting cpu_info metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting cpu_info metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -20,14 +20,13 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI metrics.
|
// A Collector is a Prometheus Collector for WMI metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
physicalMemoryBytes *prometheus.Desc
|
physicalMemoryBytes *prometheus.Desc
|
||||||
logicalProcessors *prometheus.Desc
|
logicalProcessors *prometheus.Desc
|
||||||
hostname *prometheus.Desc
|
hostname *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -36,8 +35,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,11 +46,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +54,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.logicalProcessors = prometheus.NewDesc(
|
c.logicalProcessors = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "logical_processors"),
|
prometheus.BuildFQName(types.Namespace, Name, "logical_processors"),
|
||||||
"ComputerSystem.NumberOfLogicalProcessors",
|
"ComputerSystem.NumberOfLogicalProcessors",
|
||||||
@@ -89,9 +82,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
if err := c.collect(ch); err != nil {
|
if err := c.collect(ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting cs metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting cs metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ var ConfigDefaults = Config{
|
|||||||
// Collector contains the metric and state data of the DFSR collectors.
|
// Collector contains the metric and state data of the DFSR collectors.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
// connection source
|
// connection source
|
||||||
connectionBandwidthSavingsUsingDFSReplicationTotal *prometheus.Desc
|
connectionBandwidthSavingsUsingDFSReplicationTotal *prometheus.Desc
|
||||||
@@ -80,7 +79,7 @@ type Collector struct {
|
|||||||
dfsrChildCollectors []dfsrCollectorFunc
|
dfsrChildCollectors []dfsrCollectorFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
type dfsrCollectorFunc func(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error
|
type dfsrCollectorFunc func(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error
|
||||||
|
|
||||||
// Map Perflib sources to DFSR Collector names
|
// Map Perflib sources to DFSR Collector names
|
||||||
// e.g, volume -> DFS Replication Service Volumes.
|
// e.g, volume -> DFS Replication Service Volumes.
|
||||||
@@ -98,7 +97,7 @@ func dfsrGetPerfObjectName(collector string) string {
|
|||||||
return prefix + suffix
|
return prefix + suffix
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -111,8 +110,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,11 +136,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
// Perflib sources are dynamic, depending on the enabled child collectors
|
// Perflib sources are dynamic, depending on the enabled child collectors
|
||||||
expandedChildCollectors := slices.Compact(c.config.CollectorsEnabled)
|
expandedChildCollectors := slices.Compact(c.config.CollectorsEnabled)
|
||||||
perflibDependencies := make([]string, 0, len(expandedChildCollectors))
|
perflibDependencies := make([]string, 0, len(expandedChildCollectors))
|
||||||
@@ -159,8 +152,10 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
_ = level.Info(c.logger).Log("msg", "dfsr collector is in an experimental state! Metrics for this collector have not been tested.")
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
|
_ = level.Info(logger).Log("msg", "dfsr collector is in an experimental state! Metrics for this collector have not been tested.")
|
||||||
|
|
||||||
// connection
|
// connection
|
||||||
c.connectionBandwidthSavingsUsingDFSReplicationTotal = prometheus.NewDesc(
|
c.connectionBandwidthSavingsUsingDFSReplicationTotal = prometheus.NewDesc(
|
||||||
@@ -479,9 +474,10 @@ func (c *Collector) getDFSRChildCollectors(enabledCollectors []string) []dfsrCol
|
|||||||
|
|
||||||
// Collect implements the Collector interface.
|
// Collect implements the Collector interface.
|
||||||
// Sends metric values for each metric to the provided prometheus Metric channel.
|
// Sends metric values for each metric to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
for _, fn := range c.dfsrChildCollectors {
|
for _, fn := range c.dfsrChildCollectors {
|
||||||
err := fn(ctx, ch)
|
err := fn(ctx, logger, ch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -504,9 +500,10 @@ type PerflibDFSRConnection struct {
|
|||||||
SizeOfFilesReceivedTotal float64 `perflib:"Size of Files Received"`
|
SizeOfFilesReceivedTotal float64 `perflib:"Size of Files Received"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectConnection(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectConnection(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []PerflibDFSRConnection
|
var dst []PerflibDFSRConnection
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["DFS Replication Connections"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["DFS Replication Connections"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -610,9 +607,10 @@ type perflibDFSRFolder struct {
|
|||||||
UpdatesDroppedTotal float64 `perflib:"Updates Dropped"`
|
UpdatesDroppedTotal float64 `perflib:"Updates Dropped"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectFolder(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectFolder(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []perflibDFSRFolder
|
var dst []perflibDFSRFolder
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["DFS Replicated Folders"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["DFS Replicated Folders"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -820,9 +818,10 @@ type perflibDFSRVolume struct {
|
|||||||
USNJournalUnreadPercentage float64 `perflib:"USN Journal Records Unread Percentage"`
|
USNJournalUnreadPercentage float64 `perflib:"USN Journal Records Unread Percentage"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVolume(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVolume(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []perflibDFSRVolume
|
var dst []perflibDFSRVolume
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["DFS Replication Service volumes"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["DFS Replication Service volumes"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector perflib DHCP metrics.
|
// A Collector is a Prometheus Collector perflib DHCP metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
acksTotal *prometheus.Desc
|
acksTotal *prometheus.Desc
|
||||||
activeQueueLength *prometheus.Desc
|
activeQueueLength *prometheus.Desc
|
||||||
@@ -48,7 +47,7 @@ type Collector struct {
|
|||||||
requestsTotal *prometheus.Desc
|
requestsTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -57,8 +56,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,11 +67,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"DHCP Server"}, nil
|
return []string{"DHCP Server"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +75,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.packetsReceivedTotal = prometheus.NewDesc(
|
c.packetsReceivedTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "packets_received_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "packets_received_total"),
|
||||||
"Total number of packets received by the DHCP server (PacketsReceivedTotal)",
|
"Total number of packets received by the DHCP server (PacketsReceivedTotal)",
|
||||||
@@ -267,9 +260,10 @@ type dhcpPerf struct {
|
|||||||
FailoverBndupdDropped float64 `perflib:"Failover: BndUpd Dropped."`
|
FailoverBndupdDropped float64 `perflib:"Failover: BndUpd Dropped."`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dhcpPerfs []dhcpPerf
|
var dhcpPerfs []dhcpPerf
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["DHCP Server"], &dhcpPerfs, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["DHCP Server"], &dhcpPerfs, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for a few WMI metrics in Win32_DiskDrive.
|
// A Collector is a Prometheus Collector for a few WMI metrics in Win32_DiskDrive.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
availability *prometheus.Desc
|
availability *prometheus.Desc
|
||||||
diskInfo *prometheus.Desc
|
diskInfo *prometheus.Desc
|
||||||
@@ -35,7 +34,7 @@ type Collector struct {
|
|||||||
status *prometheus.Desc
|
status *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -44,8 +43,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,11 +54,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +62,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.diskInfo = prometheus.NewDesc(
|
c.diskInfo = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
||||||
"General drive information",
|
"General drive information",
|
||||||
@@ -162,9 +155,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Collect sends the metric values for each metric to the provided prometheus Metric channel.
|
// Collect sends the metric values for each metric to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
if err := c.collect(ch); err != nil {
|
if err := c.collect(ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting disk_drive_info metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting disk_drive_info metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_DNS_DNS metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_DNS_DNS metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
dynamicUpdatesFailures *prometheus.Desc
|
dynamicUpdatesFailures *prometheus.Desc
|
||||||
dynamicUpdatesQueued *prometheus.Desc
|
dynamicUpdatesQueued *prometheus.Desc
|
||||||
@@ -48,7 +47,7 @@ type Collector struct {
|
|||||||
zoneTransferSuccessSent *prometheus.Desc
|
zoneTransferSuccessSent *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -57,8 +56,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,11 +67,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +75,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.zoneTransferRequestsReceived = prometheus.NewDesc(
|
c.zoneTransferRequestsReceived = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "zone_transfer_requests_received_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "zone_transfer_requests_received_total"),
|
||||||
"Number of zone transfer requests (AXFR/IXFR) received by the master DNS server",
|
"Number of zone transfer requests (AXFR/IXFR) received by the master DNS server",
|
||||||
@@ -220,9 +213,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting dns metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting dns metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -274,9 +268,9 @@ type Win32_PerfRawData_DNS_DNS struct {
|
|||||||
ZoneTransferSOARequestSent uint32
|
ZoneTransferSOARequestSent uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_DNS_DNS
|
var dst []Win32_PerfRawData_DNS_DNS
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
activeMailboxDeliveryQueueLength *prometheus.Desc
|
activeMailboxDeliveryQueueLength *prometheus.Desc
|
||||||
activeSyncRequestsPerSec *prometheus.Desc
|
activeSyncRequestsPerSec *prometheus.Desc
|
||||||
@@ -83,7 +82,7 @@ type Collector struct {
|
|||||||
enabledCollectors []string
|
enabledCollectors []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -96,8 +95,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,11 +160,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{
|
return []string{
|
||||||
"MSExchange ADAccess Processes",
|
"MSExchange ADAccess Processes",
|
||||||
"MSExchangeTransport Queues",
|
"MSExchangeTransport Queues",
|
||||||
@@ -186,7 +179,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
// desc creates a new prometheus description
|
// desc creates a new prometheus description
|
||||||
desc := func(metricName string, description string, labels ...string) *prometheus.Desc {
|
desc := func(metricName string, description string, labels ...string) *prometheus.Desc {
|
||||||
return prometheus.NewDesc(
|
return prometheus.NewDesc(
|
||||||
@@ -252,8 +245,9 @@ func (c *Collector) Build() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Collect collects exchange metrics and sends them to prometheus.
|
// Collect collects exchange metrics and sends them to prometheus.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
collectorFuncs := map[string]func(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error{
|
logger = log.With(logger, "collector", Name)
|
||||||
|
collectorFuncs := map[string]func(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error{
|
||||||
"ADAccessProcesses": c.collectADAccessProcesses,
|
"ADAccessProcesses": c.collectADAccessProcesses,
|
||||||
"TransportQueues": c.collectTransportQueues,
|
"TransportQueues": c.collectTransportQueues,
|
||||||
"HttpProxy": c.collectHTTPProxy,
|
"HttpProxy": c.collectHTTPProxy,
|
||||||
@@ -267,8 +261,8 @@ func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, collectorName := range c.enabledCollectors {
|
for _, collectorName := range c.enabledCollectors {
|
||||||
if err := collectorFuncs[collectorName](ctx, ch); err != nil {
|
if err := collectorFuncs[collectorName](ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "Error in "+collectorName, "err", err)
|
_ = level.Error(logger).Log("msg", "Error in "+collectorName, "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -286,9 +280,10 @@ type perflibADAccessProcesses struct {
|
|||||||
LongRunningLDAPOperationsPerMin float64 `perflib:"Long Running LDAP Operations/min"`
|
LongRunningLDAPOperationsPerMin float64 `perflib:"Long Running LDAP Operations/min"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectADAccessProcesses(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectADAccessProcesses(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibADAccessProcesses
|
var data []perflibADAccessProcesses
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange ADAccess Processes"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange ADAccess Processes"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,9 +339,10 @@ type perflibAvailabilityService struct {
|
|||||||
RequestsSec float64 `perflib:"Availability Requests (sec)"`
|
RequestsSec float64 `perflib:"Availability Requests (sec)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAvailabilityService(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAvailabilityService(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibAvailabilityService
|
var data []perflibAvailabilityService
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange Availability Service"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange Availability Service"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,9 +368,10 @@ type perflibHTTPProxy struct {
|
|||||||
ProxyRequestsPerSec float64 `perflib:"Proxy Requests/Sec"`
|
ProxyRequestsPerSec float64 `perflib:"Proxy Requests/Sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectHTTPProxy(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectHTTPProxy(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibHTTPProxy
|
var data []perflibHTTPProxy
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange HttpProxy"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange HttpProxy"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,9 +423,10 @@ type perflibOWA struct {
|
|||||||
RequestsPerSec float64 `perflib:"Requests/sec"`
|
RequestsPerSec float64 `perflib:"Requests/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectOWA(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectOWA(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibOWA
|
var data []perflibOWA
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange OWA"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange OWA"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,9 +452,10 @@ type perflibActiveSync struct {
|
|||||||
SyncCommandsPerSec float64 `perflib:"Sync Commands/sec"`
|
SyncCommandsPerSec float64 `perflib:"Sync Commands/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectActiveSync(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectActiveSync(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibActiveSync
|
var data []perflibActiveSync
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange ActiveSync"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange ActiveSync"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,9 +489,10 @@ type perflibRPCClientAccess struct {
|
|||||||
UserCount float64 `perflib:"User Count"`
|
UserCount float64 `perflib:"User Count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectRPC(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectRPC(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibRPCClientAccess
|
var data []perflibRPCClientAccess
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange RpcClientAccess"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange RpcClientAccess"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -546,9 +546,10 @@ type perflibTransportQueues struct {
|
|||||||
PoisonQueueLength float64 `perflib:"Poison Queue Length"`
|
PoisonQueueLength float64 `perflib:"Poison Queue Length"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectTransportQueues(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectTransportQueues(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibTransportQueues
|
var data []perflibTransportQueues
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchangeTransport Queues"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchangeTransport Queues"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -620,9 +621,10 @@ type perflibWorkloadManagementWorkloads struct {
|
|||||||
IsActive float64 `perflib:"Active"`
|
IsActive float64 `perflib:"Active"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectWorkloadManagementWorkloads(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectWorkloadManagementWorkloads(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibWorkloadManagementWorkloads
|
var data []perflibWorkloadManagementWorkloads
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange WorkloadManagement Workloads"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange WorkloadManagement Workloads"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -671,9 +673,10 @@ type perflibAutodiscover struct {
|
|||||||
RequestsPerSec float64 `perflib:"Requests/sec"`
|
RequestsPerSec float64 `perflib:"Requests/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAutoDiscover(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAutoDiscover(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibAutodiscover
|
var data []perflibAutodiscover
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchangeAutodiscover"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchangeAutodiscover"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, autodisc := range data {
|
for _, autodisc := range data {
|
||||||
@@ -691,9 +694,10 @@ type perflibMapiHttpEmsmdb struct {
|
|||||||
ActiveUserCount float64 `perflib:"Active User Count"`
|
ActiveUserCount float64 `perflib:"Active User Count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectMapiHttpEmsmdb(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectMapiHttpEmsmdb(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibMapiHttpEmsmdb
|
var data []perflibMapiHttpEmsmdb
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange MapiHttp Emsmdb"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["MSExchange MapiHttp Emsmdb"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
quotasCount *prometheus.Desc
|
quotasCount *prometheus.Desc
|
||||||
peakUsage *prometheus.Desc
|
peakUsage *prometheus.Desc
|
||||||
@@ -34,7 +33,7 @@ type Collector struct {
|
|||||||
template *prometheus.Desc
|
template *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -43,8 +42,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,11 +53,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +61,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.quotasCount = prometheus.NewDesc(
|
c.quotasCount = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "count"),
|
prometheus.BuildFQName(types.Namespace, Name, "count"),
|
||||||
"Number of Quotas",
|
"Number of Quotas",
|
||||||
@@ -128,9 +121,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting fsrmquota metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting fsrmquota metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -153,9 +147,9 @@ type MSFT_FSRMQuota struct {
|
|||||||
SoftLimit bool
|
SoftLimit bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []MSFT_FSRMQuota
|
var dst []MSFT_FSRMQuota
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
|
|
||||||
var count int
|
var count int
|
||||||
|
|
||||||
|
|||||||
@@ -11,13 +11,14 @@ import (
|
|||||||
|
|
||||||
"github.com/go-kit/log"
|
"github.com/go-kit/log"
|
||||||
"github.com/go-kit/log/level"
|
"github.com/go-kit/log/level"
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/collectors"
|
"github.com/prometheus/client_golang/prometheus/collectors"
|
||||||
"github.com/prometheus/client_golang/prometheus/collectors/version"
|
"github.com/prometheus/client_golang/prometheus/collectors/version"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Collectors) BuildServeHTTP(disableExporterMetrics bool, timeoutMargin float64) http.HandlerFunc {
|
func (c *Collectors) BuildServeHTTP(logger log.Logger, disableExporterMetrics bool, timeoutMargin float64) http.HandlerFunc {
|
||||||
collectorFactory := func(timeout time.Duration, requestedCollectors []string) (error, *Prometheus) {
|
collectorFactory := func(timeout time.Duration, requestedCollectors []string) (error, *Prometheus) {
|
||||||
filteredCollectors := make(map[string]Collector)
|
filteredCollectors := make(map[string]Collector)
|
||||||
// scrape all enabled collectors if no collector is requested
|
// scrape all enabled collectors if no collector is requested
|
||||||
@@ -33,15 +34,16 @@ func (c *Collectors) BuildServeHTTP(disableExporterMetrics bool, timeoutMargin f
|
|||||||
}
|
}
|
||||||
|
|
||||||
filtered := Collectors{
|
filtered := Collectors{
|
||||||
logger: c.logger,
|
|
||||||
collectors: filteredCollectors,
|
collectors: filteredCollectors,
|
||||||
perfCounterQuery: c.perfCounterQuery,
|
perfCounterQuery: c.perfCounterQuery,
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, NewPrometheus(timeout, &filtered, c.logger)
|
return nil, NewPrometheus(timeout, &filtered, logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
logger := log.With(logger, "remote", r.RemoteAddr, "correlation_id", uuid.New().String())
|
||||||
|
|
||||||
const defaultTimeout = 10.0
|
const defaultTimeout = 10.0
|
||||||
|
|
||||||
var timeoutSeconds float64
|
var timeoutSeconds float64
|
||||||
@@ -49,7 +51,7 @@ func (c *Collectors) BuildServeHTTP(disableExporterMetrics bool, timeoutMargin f
|
|||||||
var err error
|
var err error
|
||||||
timeoutSeconds, err = strconv.ParseFloat(v, 64)
|
timeoutSeconds, err = strconv.ParseFloat(v, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Couldn't parse X-Prometheus-Scrape-Timeout-Seconds: %q. Defaulting timeout to %f", v, defaultTimeout))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Couldn't parse X-Prometheus-Scrape-Timeout-Seconds: %q. Defaulting timeout to %f", v, defaultTimeout))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if timeoutSeconds == 0 {
|
if timeoutSeconds == 0 {
|
||||||
@@ -60,7 +62,7 @@ func (c *Collectors) BuildServeHTTP(disableExporterMetrics bool, timeoutMargin f
|
|||||||
reg := prometheus.NewRegistry()
|
reg := prometheus.NewRegistry()
|
||||||
err, wc := collectorFactory(time.Duration(timeoutSeconds*float64(time.Second)), r.URL.Query()["collect[]"])
|
err, wc := collectorFactory(time.Duration(timeoutSeconds*float64(time.Second)), r.URL.Query()["collect[]"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Couldn't create filtered metrics handler", "err", err)
|
_ = level.Warn(logger).Log("msg", "Couldn't create filtered metrics handler", "err", err)
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
w.Write([]byte(fmt.Sprintf("Couldn't create filtered metrics handler: %s", err))) //nolint:errcheck
|
w.Write([]byte(fmt.Sprintf("Couldn't create filtered metrics handler: %s", err))) //nolint:errcheck
|
||||||
return
|
return
|
||||||
@@ -76,7 +78,7 @@ func (c *Collectors) BuildServeHTTP(disableExporterMetrics bool, timeoutMargin f
|
|||||||
}
|
}
|
||||||
|
|
||||||
h := promhttp.HandlerFor(reg, promhttp.HandlerOpts{
|
h := promhttp.HandlerFor(reg, promhttp.HandlerOpts{
|
||||||
ErrorLog: stdlog.New(log.NewStdlibAdapter(level.Error(c.logger)), "", stdlog.Lshortfile),
|
ErrorLog: stdlog.New(log.NewStdlibAdapter(level.Error(logger)), "", stdlog.Lshortfile),
|
||||||
})
|
})
|
||||||
h.ServeHTTP(w, r)
|
h.ServeHTTP(w, r)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
// Collector is a Prometheus Collector for hyper-v.
|
// Collector is a Prometheus Collector for hyper-v.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
// Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary
|
// Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary
|
||||||
healthCritical *prometheus.Desc
|
healthCritical *prometheus.Desc
|
||||||
@@ -140,7 +139,7 @@ type Collector struct {
|
|||||||
vmMemoryRemovedMemory *prometheus.Desc
|
vmMemoryRemovedMemory *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -149,8 +148,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,11 +159,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +167,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
buildSubsystemName := func(component string) string { return "hyperv_" + component }
|
buildSubsystemName := func(component string) string { return "hyperv_" + component }
|
||||||
|
|
||||||
c.healthCritical = prometheus.NewDesc(
|
c.healthCritical = prometheus.NewDesc(
|
||||||
@@ -754,64 +747,65 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectVmHealth(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV health status metrics", "err", err)
|
if err := c.collectVmHealth(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV health status metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmVid(ch); err != nil {
|
if err := c.collectVmVid(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV pages metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV pages metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmHv(ch); err != nil {
|
if err := c.collectVmHv(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV hv status metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV hv status metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmProcessor(ch); err != nil {
|
if err := c.collectVmProcessor(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV processor metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV processor metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectHostLPUsage(ch); err != nil {
|
if err := c.collectHostLPUsage(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV host logical processors metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV host logical processors metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectHostCpuUsage(ch); err != nil {
|
if err := c.collectHostCpuUsage(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV host CPU metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV host CPU metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmCpuUsage(ch); err != nil {
|
if err := c.collectVmCpuUsage(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV VM CPU metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV VM CPU metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmSwitch(ch); err != nil {
|
if err := c.collectVmSwitch(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV switch metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV switch metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmEthernet(ch); err != nil {
|
if err := c.collectVmEthernet(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV ethernet metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV ethernet metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmStorage(ch); err != nil {
|
if err := c.collectVmStorage(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV virtual storage metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV virtual storage metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmNetwork(ch); err != nil {
|
if err := c.collectVmNetwork(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV virtual network metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV virtual network metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectVmMemory(ch); err != nil {
|
if err := c.collectVmMemory(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting hyperV virtual memory metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting hyperV virtual memory metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -824,9 +818,9 @@ type Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary
|
|||||||
HealthOk uint32
|
HealthOk uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmHealth(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmHealth(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary
|
var dst []Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -856,9 +850,9 @@ type Win32_PerfRawData_VidPerfProvider_HyperVVMVidPartition struct {
|
|||||||
RemotePhysicalPages uint64
|
RemotePhysicalPages uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmVid(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmVid(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_VidPerfProvider_HyperVVMVidPartition
|
var dst []Win32_PerfRawData_VidPerfProvider_HyperVVMVidPartition
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -919,9 +913,9 @@ type Win32_PerfRawData_HvStats_HyperVHypervisorRootPartition struct {
|
|||||||
VirtualTLBPages uint64
|
VirtualTLBPages uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmHv(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmHv(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorRootPartition
|
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorRootPartition
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1056,9 +1050,9 @@ type Win32_PerfRawData_HvStats_HyperVHypervisor struct {
|
|||||||
VirtualProcessors uint64
|
VirtualProcessors uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmProcessor(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmProcessor(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_HvStats_HyperVHypervisor
|
var dst []Win32_PerfRawData_HvStats_HyperVHypervisor
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1088,9 +1082,9 @@ type Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor struct {
|
|||||||
PercentTotalRunTime uint
|
PercentTotalRunTime uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectHostLPUsage(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectHostLPUsage(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor
|
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1102,7 +1096,7 @@ func (c *Collector) collectHostLPUsage(ch chan<- prometheus.Metric) error {
|
|||||||
// The name format is Hv LP <core id>
|
// The name format is Hv LP <core id>
|
||||||
parts := strings.Split(obj.Name, " ")
|
parts := strings.Split(obj.Name, " ")
|
||||||
if len(parts) != 3 {
|
if len(parts) != 3 {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Unexpected format of Name in collectHostLPUsage: %q", obj.Name))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Unexpected format of Name in collectHostLPUsage: %q", obj.Name))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
coreId := parts[2]
|
coreId := parts[2]
|
||||||
@@ -1142,9 +1136,9 @@ type Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor struct {
|
|||||||
CPUWaitTimePerDispatch uint64
|
CPUWaitTimePerDispatch uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectHostCpuUsage(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectHostCpuUsage(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor
|
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1156,7 +1150,7 @@ func (c *Collector) collectHostCpuUsage(ch chan<- prometheus.Metric) error {
|
|||||||
// The name format is Root VP <core id>
|
// The name format is Root VP <core id>
|
||||||
parts := strings.Split(obj.Name, " ")
|
parts := strings.Split(obj.Name, " ")
|
||||||
if len(parts) != 3 {
|
if len(parts) != 3 {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Unexpected format of Name in collectHostCpuUsage: "+obj.Name)
|
_ = level.Warn(logger).Log("msg", "Unexpected format of Name in collectHostCpuUsage: "+obj.Name)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
coreId := parts[2]
|
coreId := parts[2]
|
||||||
@@ -1210,9 +1204,9 @@ type Win32_PerfRawData_HvStats_HyperVHypervisorVirtualProcessor struct {
|
|||||||
CPUWaitTimePerDispatch uint64
|
CPUWaitTimePerDispatch uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmCpuUsage(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmCpuUsage(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorVirtualProcessor
|
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorVirtualProcessor
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1224,12 +1218,12 @@ func (c *Collector) collectVmCpuUsage(ch chan<- prometheus.Metric) error {
|
|||||||
// The name format is <VM Name>:Hv VP <vcore id>
|
// The name format is <VM Name>:Hv VP <vcore id>
|
||||||
parts := strings.Split(obj.Name, ":")
|
parts := strings.Split(obj.Name, ":")
|
||||||
if len(parts) != 2 {
|
if len(parts) != 2 {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Unexpected format of Name in collectVmCpuUsage: %q, expected %q. Skipping.", obj.Name, "<VM Name>:Hv VP <vcore id>"))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Unexpected format of Name in collectVmCpuUsage: %q, expected %q. Skipping.", obj.Name, "<VM Name>:Hv VP <vcore id>"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
coreParts := strings.Split(parts[1], " ")
|
coreParts := strings.Split(parts[1], " ")
|
||||||
if len(coreParts) != 3 {
|
if len(coreParts) != 3 {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Unexpected format of core identifier in collectVmCpuUsage: %q, expected %q. Skipping.", parts[1], "Hv VP <vcore id>"))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Unexpected format of core identifier in collectVmCpuUsage: %q, expected %q. Skipping.", parts[1], "Hv VP <vcore id>"))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
vmName := parts[0]
|
vmName := parts[0]
|
||||||
@@ -1303,9 +1297,9 @@ type Win32_PerfRawData_NvspSwitchStats_HyperVVirtualSwitch struct {
|
|||||||
PurgedMacAddressesPersec uint64
|
PurgedMacAddressesPersec uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmSwitch(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmSwitch(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NvspSwitchStats_HyperVVirtualSwitch
|
var dst []Win32_PerfRawData_NvspSwitchStats_HyperVVirtualSwitch
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1468,9 +1462,9 @@ type Win32_PerfRawData_EthernetPerfProvider_HyperVLegacyNetworkAdapter struct {
|
|||||||
FramesSentPersec uint64
|
FramesSentPersec uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmEthernet(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmEthernet(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_EthernetPerfProvider_HyperVLegacyNetworkAdapter
|
var dst []Win32_PerfRawData_EthernetPerfProvider_HyperVLegacyNetworkAdapter
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1537,9 +1531,9 @@ type Win32_PerfRawData_Counters_HyperVVirtualStorageDevice struct {
|
|||||||
WriteOperationsPerSec uint64
|
WriteOperationsPerSec uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmStorage(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmStorage(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_Counters_HyperVVirtualStorageDevice
|
var dst []Win32_PerfRawData_Counters_HyperVVirtualStorageDevice
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1606,9 +1600,9 @@ type Win32_PerfRawData_NvspNicStats_HyperVVirtualNetworkAdapter struct {
|
|||||||
PacketsSentPersec uint64
|
PacketsSentPersec uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmNetwork(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmNetwork(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NvspNicStats_HyperVVirtualNetworkAdapter
|
var dst []Win32_PerfRawData_NvspNicStats_HyperVVirtualNetworkAdapter
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1679,9 +1673,9 @@ type Win32_PerfRawData_BalancerStats_HyperVDynamicMemoryVM struct {
|
|||||||
RemovedMemory uint64
|
RemovedMemory uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectVmMemory(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectVmMemory(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_BalancerStats_HyperVDynamicMemoryVM
|
var dst []Win32_PerfRawData_BalancerStats_HyperVDynamicMemoryVM
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
info *prometheus.Desc
|
info *prometheus.Desc
|
||||||
|
|
||||||
@@ -162,7 +161,7 @@ type Collector struct {
|
|||||||
iisVersion simpleVersion
|
iisVersion simpleVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -187,8 +186,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,11 +249,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{
|
return []string{
|
||||||
"Web Service",
|
"Web Service",
|
||||||
"APP_POOL_WAS",
|
"APP_POOL_WAS",
|
||||||
@@ -269,8 +262,10 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
c.iisVersion = getIISVersion(c.logger)
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
|
c.iisVersion = getIISVersion(logger)
|
||||||
|
|
||||||
c.info = prometheus.NewDesc(
|
c.info = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
||||||
@@ -932,24 +927,25 @@ func getIISVersion(logger log.Logger) simpleVersion {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectWebService(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting iis metrics", "err", err)
|
if err := c.collectWebService(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting iis metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectAPP_POOL_WAS(ctx, ch); err != nil {
|
if err := c.collectAPP_POOL_WAS(ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting iis metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting iis metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectW3SVC_W3WP(ctx, ch); err != nil {
|
if err := c.collectW3SVC_W3WP(ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting iis metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting iis metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectWebServiceCache(ctx, ch); err != nil {
|
if err := c.collectWebServiceCache(ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting iis metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting iis metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1046,9 +1042,10 @@ func dedupIISNames[V hasGetIISName](services []V) map[string]V {
|
|||||||
return webServiceDeDuplicated
|
return webServiceDeDuplicated
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectWebService(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectWebService(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var webService []perflibWebService
|
var webService []perflibWebService
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Web Service"], &webService, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Web Service"], &webService, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1338,9 +1335,10 @@ var applicationStates = map[uint32]string{
|
|||||||
7: "Delete Pending",
|
7: "Delete Pending",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAPP_POOL_WAS(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAPP_POOL_WAS(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var APP_POOL_WAS []perflibAPP_POOL_WAS
|
var APP_POOL_WAS []perflibAPP_POOL_WAS
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["APP_POOL_WAS"], &APP_POOL_WAS, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["APP_POOL_WAS"], &APP_POOL_WAS, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1515,9 +1513,10 @@ type perflibW3SVC_W3WP_IIS8 struct {
|
|||||||
WebSocketConnectionsRejected float64 `perflib:"WebSocket Connections Rejected / Sec"`
|
WebSocketConnectionsRejected float64 `perflib:"WebSocket Connections Rejected / Sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectW3SVC_W3WP(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectW3SVC_W3WP(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var W3SVC_W3WP []perflibW3SVC_W3WP
|
var W3SVC_W3WP []perflibW3SVC_W3WP
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["W3SVC_W3WP"], &W3SVC_W3WP, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["W3SVC_W3WP"], &W3SVC_W3WP, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1775,7 +1774,7 @@ func (c *Collector) collectW3SVC_W3WP(ctx *types.ScrapeContext, ch chan<- promet
|
|||||||
|
|
||||||
if c.iisVersion.major >= 8 {
|
if c.iisVersion.major >= 8 {
|
||||||
var W3SVC_W3WP_IIS8 []perflibW3SVC_W3WP_IIS8
|
var W3SVC_W3WP_IIS8 []perflibW3SVC_W3WP_IIS8
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["W3SVC_W3WP"], &W3SVC_W3WP_IIS8, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["W3SVC_W3WP"], &W3SVC_W3WP_IIS8, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1912,9 +1911,10 @@ type perflibWebServiceCache struct {
|
|||||||
ServiceCache_OutputCacheQueriesTotal float64
|
ServiceCache_OutputCacheQueriesTotal float64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectWebServiceCache(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectWebServiceCache(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var WebServiceCache []perflibWebServiceCache
|
var WebServiceCache []perflibWebServiceCache
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Web Service Cache"], &WebServiceCache, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Web Service Cache"], &WebServiceCache, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,12 +28,11 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_DNS_DNS metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_DNS_DNS metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
licenseStatus *prometheus.Desc
|
licenseStatus *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -42,8 +41,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,11 +52,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +60,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.licenseStatus = prometheus.NewDesc(
|
c.licenseStatus = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "status"),
|
prometheus.BuildFQName(types.Namespace, Name, "status"),
|
||||||
"Status of windows license",
|
"Status of windows license",
|
||||||
@@ -80,9 +73,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
if err := c.collect(ch); err != nil {
|
if err := c.collect(ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting license metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting license metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ var ConfigDefaults = Config{
|
|||||||
// A Collector is a Prometheus Collector for perflib logicalDisk metrics.
|
// A Collector is a Prometheus Collector for perflib logicalDisk metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
avgReadQueue *prometheus.Desc
|
avgReadQueue *prometheus.Desc
|
||||||
avgWriteQueue *prometheus.Desc
|
avgWriteQueue *prometheus.Desc
|
||||||
@@ -64,7 +63,7 @@ type volumeInfo struct {
|
|||||||
readonly float64
|
readonly float64
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -81,8 +80,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,11 +123,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"LogicalDisk"}, nil
|
return []string{"LogicalDisk"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +131,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.information = prometheus.NewDesc(
|
c.information = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
||||||
"A metric with a constant '1' value labeled with logical disk information",
|
"A metric with a constant '1' value labeled with logical disk information",
|
||||||
@@ -268,9 +261,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting logical_disk metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting logical_disk metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -299,7 +293,8 @@ type logicalDisk struct {
|
|||||||
AvgDiskSecPerTransfer float64 `perflib:"Avg. Disk sec/Transfer"`
|
AvgDiskSecPerTransfer float64 `perflib:"Avg. Disk sec/Transfer"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
diskID string
|
diskID string
|
||||||
@@ -307,7 +302,7 @@ func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
dst []logicalDisk
|
dst []logicalDisk
|
||||||
)
|
)
|
||||||
|
|
||||||
if err = perflib.UnmarshalObject(ctx.PerfObjects["LogicalDisk"], &dst, c.logger); err != nil {
|
if err = perflib.UnmarshalObject(ctx.PerfObjects["LogicalDisk"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,12 +315,12 @@ func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
|
|
||||||
diskID, err = getDiskIDByVolume(volume.Name)
|
diskID, err = getDiskIDByVolume(volume.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "failed to get disk ID for "+volume.Name, "err", err)
|
_ = level.Warn(logger).Log("msg", "failed to get disk ID for "+volume.Name, "err", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err = getVolumeInfo(volume.Name)
|
info, err = getVolumeInfo(volume.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "failed to get volume information for %s"+volume.Name, "err", err)
|
_ = level.Warn(logger).Log("msg", "failed to get volume information for %s"+volume.Name, "err", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
|||||||
@@ -22,12 +22,11 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI metrics.
|
// A Collector is a Prometheus Collector for WMI metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
logonType *prometheus.Desc
|
logonType *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -36,8 +35,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,11 +46,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +54,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.logonType = prometheus.NewDesc(
|
c.logonType = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "logon_type"),
|
prometheus.BuildFQName(types.Namespace, Name, "logon_type"),
|
||||||
"Number of active logon sessions (LogonSession.LogonType)",
|
"Number of active logon sessions (LogonSession.LogonType)",
|
||||||
@@ -73,9 +66,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting user metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting user metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -87,9 +81,9 @@ type Win32_LogonSession struct {
|
|||||||
LogonType uint32
|
LogonType uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_LogonSession
|
var dst []Win32_LogonSession
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for perflib Memory metrics.
|
// A Collector is a Prometheus Collector for perflib Memory metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
availableBytes *prometheus.Desc
|
availableBytes *prometheus.Desc
|
||||||
cacheBytes *prometheus.Desc
|
cacheBytes *prometheus.Desc
|
||||||
@@ -59,7 +58,7 @@ type Collector struct {
|
|||||||
writeCopiesTotal *prometheus.Desc
|
writeCopiesTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -68,8 +67,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,11 +78,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Memory"}, nil
|
return []string{"Memory"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +86,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.availableBytes = prometheus.NewDesc(
|
c.availableBytes = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "available_bytes"),
|
prometheus.BuildFQName(types.Namespace, Name, "available_bytes"),
|
||||||
"The amount of physical memory immediately available for allocation to a process or for system use. It is equal to the sum of memory assigned to"+
|
"The amount of physical memory immediately available for allocation to a process or for system use. It is equal to the sum of memory assigned to"+
|
||||||
@@ -303,9 +296,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting memory metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting memory metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -348,9 +342,10 @@ type memory struct {
|
|||||||
WriteCopiesPersec float64 `perflib:"Write Copies/sec"`
|
WriteCopiesPersec float64 `perflib:"Write Copies/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []memory
|
var dst []memory
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Memory"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Memory"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI MSCluster_Cluster metrics.
|
// A Collector is a Prometheus Collector for WMI MSCluster_Cluster metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
addEvictDelay *prometheus.Desc
|
addEvictDelay *prometheus.Desc
|
||||||
adminAccessPoint *prometheus.Desc
|
adminAccessPoint *prometheus.Desc
|
||||||
@@ -98,7 +97,7 @@ type Collector struct {
|
|||||||
witnessRestartInterval *prometheus.Desc
|
witnessRestartInterval *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -107,8 +106,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,11 +117,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Memory"}, nil
|
return []string{"Memory"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +125,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.addEvictDelay = prometheus.NewDesc(
|
c.addEvictDelay = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "add_evict_delay"),
|
prometheus.BuildFQName(types.Namespace, Name, "add_evict_delay"),
|
||||||
"Provides access to the cluster's AddEvictDelay property, which is the number a seconds that a new node is delayed after an eviction of another node.",
|
"Provides access to the cluster's AddEvictDelay property, which is the number a seconds that a new node is delayed after an eviction of another node.",
|
||||||
@@ -684,9 +677,10 @@ type MSCluster_Cluster struct {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []MSCluster_Cluster
|
var dst []MSCluster_Cluster
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI MSCluster_Network metrics.
|
// A Collector is a Prometheus Collector for WMI MSCluster_Network metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
characteristics *prometheus.Desc
|
characteristics *prometheus.Desc
|
||||||
flags *prometheus.Desc
|
flags *prometheus.Desc
|
||||||
@@ -26,7 +25,7 @@ type Collector struct {
|
|||||||
state *prometheus.Desc
|
state *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -35,8 +34,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,11 +45,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Memory"}, nil
|
return []string{"Memory"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +53,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.characteristics = prometheus.NewDesc(
|
c.characteristics = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "characteristics"),
|
prometheus.BuildFQName(types.Namespace, Name, "characteristics"),
|
||||||
"Provides the characteristics of the network.",
|
"Provides the characteristics of the network.",
|
||||||
@@ -108,9 +101,10 @@ type MSCluster_Network struct {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus metric channel.
|
// to the provided prometheus metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []MSCluster_Network
|
var dst []MSCluster_Network
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var NodeName []string
|
|||||||
// A Collector is a Prometheus Collector for WMI MSCluster_Node metrics.
|
// A Collector is a Prometheus Collector for WMI MSCluster_Node metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
buildNumber *prometheus.Desc
|
buildNumber *prometheus.Desc
|
||||||
characteristics *prometheus.Desc
|
characteristics *prometheus.Desc
|
||||||
@@ -38,7 +37,7 @@ type Collector struct {
|
|||||||
statusInformation *prometheus.Desc
|
statusInformation *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -47,8 +46,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,11 +57,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Memory"}, nil
|
return []string{"Memory"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +65,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.buildNumber = prometheus.NewDesc(
|
c.buildNumber = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "build_number"),
|
prometheus.BuildFQName(types.Namespace, Name, "build_number"),
|
||||||
"Provides access to the node's BuildNumber property.",
|
"Provides access to the node's BuildNumber property.",
|
||||||
@@ -183,9 +176,10 @@ type MSCluster_Node struct {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []MSCluster_Node
|
var dst []MSCluster_Node
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI MSCluster_Resource metrics.
|
// A Collector is a Prometheus Collector for WMI MSCluster_Resource metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
characteristics *prometheus.Desc
|
characteristics *prometheus.Desc
|
||||||
deadlockTimeout *prometheus.Desc
|
deadlockTimeout *prometheus.Desc
|
||||||
@@ -39,7 +38,7 @@ type Collector struct {
|
|||||||
subclass *prometheus.Desc
|
subclass *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -48,8 +47,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,11 +58,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Memory"}, nil
|
return []string{"Memory"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +66,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.characteristics = prometheus.NewDesc(
|
c.characteristics = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "characteristics"),
|
prometheus.BuildFQName(types.Namespace, Name, "characteristics"),
|
||||||
"Provides the characteristics of the object.",
|
"Provides the characteristics of the object.",
|
||||||
@@ -213,9 +206,10 @@ type MSCluster_Resource struct {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []MSCluster_Resource
|
var dst []MSCluster_Resource
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI MSCluster_ResourceGroup metrics.
|
// A Collector is a Prometheus Collector for WMI MSCluster_ResourceGroup metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
autoFailbackType *prometheus.Desc
|
autoFailbackType *prometheus.Desc
|
||||||
characteristics *prometheus.Desc
|
characteristics *prometheus.Desc
|
||||||
@@ -36,7 +35,7 @@ type Collector struct {
|
|||||||
state *prometheus.Desc
|
state *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -45,8 +44,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,11 +55,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Memory"}, nil
|
return []string{"Memory"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +63,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.autoFailbackType = prometheus.NewDesc(
|
c.autoFailbackType = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "auto_failback_type"),
|
prometheus.BuildFQName(types.Namespace, Name, "auto_failback_type"),
|
||||||
"Provides access to the group's AutoFailbackType property.",
|
"Provides access to the group's AutoFailbackType property.",
|
||||||
@@ -187,9 +180,10 @@ type MSCluster_ResourceGroup struct {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []MSCluster_ResourceGroup
|
var dst []MSCluster_ResourceGroup
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
if err := wmi.QueryNamespace(q, &dst, "root/MSCluster"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ var ConfigDefaults = Config{
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_MSMQ_MSMQQueue metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_MSMQ_MSMQQueue metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
bytesInJournalQueue *prometheus.Desc
|
bytesInJournalQueue *prometheus.Desc
|
||||||
bytesInQueue *prometheus.Desc
|
bytesInQueue *prometheus.Desc
|
||||||
@@ -35,7 +34,7 @@ type Collector struct {
|
|||||||
messagesInQueue *prometheus.Desc
|
messagesInQueue *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -48,8 +47,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,11 +66,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,9 +74,11 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
if *c.config.QueryWhereClause == "" {
|
if *c.config.QueryWhereClause == "" {
|
||||||
_ = level.Warn(c.logger).Log("msg", "No where-clause specified for msmq collector. This will generate a very large number of metrics!")
|
_ = level.Warn(logger).Log("msg", "No where-clause specified for msmq collector. This will generate a very large number of metrics!")
|
||||||
}
|
}
|
||||||
|
|
||||||
c.bytesInJournalQueue = prometheus.NewDesc(
|
c.bytesInJournalQueue = prometheus.NewDesc(
|
||||||
@@ -115,9 +110,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting msmq metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting msmq metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -132,10 +128,10 @@ type msmqQueue struct {
|
|||||||
MessagesInQueue uint64
|
MessagesInQueue uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []msmqQueue
|
var dst []msmqQueue
|
||||||
|
|
||||||
q := wmi.QueryAllForClassWhere(&dst, "Win32_PerfRawData_MSMQ_MSMQQueue", *c.config.QueryWhereClause, c.logger)
|
q := wmi.QueryAllForClassWhere(&dst, "Win32_PerfRawData_MSMQ_MSMQQueue", *c.config.QueryWhereClause, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,7 +142,6 @@ func mssqlGetPerfObjectName(sqlInstance string, collector string) string {
|
|||||||
// A Collector is a Prometheus Collector for various WMI Win32_PerfRawData_MSSQLSERVER_* metrics.
|
// A Collector is a Prometheus Collector for various WMI Win32_PerfRawData_MSSQLSERVER_* metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
// meta
|
// meta
|
||||||
mssqlScrapeDurationDesc *prometheus.Desc
|
mssqlScrapeDurationDesc *prometheus.Desc
|
||||||
@@ -414,7 +413,7 @@ type Collector struct {
|
|||||||
mssqlChildCollectorFailure int
|
mssqlChildCollectorFailure int
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -427,8 +426,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -480,12 +477,8 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(logger log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
c.mssqlInstances = getMSSQLInstances(logger)
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
c.mssqlInstances = getMSSQLInstances(c.logger)
|
|
||||||
perfCounters := make([]string, 0, len(c.mssqlInstances)*len(c.config.CollectorsEnabled))
|
perfCounters := make([]string, 0, len(c.mssqlInstances)*len(c.config.CollectorsEnabled))
|
||||||
|
|
||||||
for instance := range c.mssqlInstances {
|
for instance := range c.mssqlInstances {
|
||||||
@@ -501,7 +494,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
// Result must order, to prevent test failures.
|
// Result must order, to prevent test failures.
|
||||||
sort.Strings(c.config.CollectorsEnabled)
|
sort.Strings(c.config.CollectorsEnabled)
|
||||||
|
|
||||||
@@ -1977,24 +1970,24 @@ func (c *Collector) Build() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type mssqlCollectorFunc func(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error
|
type mssqlCollectorFunc func(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error
|
||||||
|
|
||||||
func (c *Collector) execute(ctx *types.ScrapeContext, name string, fn mssqlCollectorFunc, ch chan<- prometheus.Metric, sqlInstance string, wg *sync.WaitGroup) {
|
func (c *Collector) execute(ctx *types.ScrapeContext, logger log.Logger, name string, fn mssqlCollectorFunc, ch chan<- prometheus.Metric, sqlInstance string, wg *sync.WaitGroup) {
|
||||||
// Reset failure counter on each scrape
|
// Reset failure counter on each scrape
|
||||||
c.mssqlChildCollectorFailure = 0
|
c.mssqlChildCollectorFailure = 0
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
|
|
||||||
begin := time.Now()
|
begin := time.Now()
|
||||||
err := fn(ctx, ch, sqlInstance)
|
err := fn(ctx, logger, ch, sqlInstance)
|
||||||
duration := time.Since(begin)
|
duration := time.Since(begin)
|
||||||
var success float64
|
var success float64
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", fmt.Sprintf("mssql class collector %s failed after %fs", name, duration.Seconds()), "err", err)
|
_ = level.Error(logger).Log("msg", fmt.Sprintf("mssql class collector %s failed after %fs", name, duration.Seconds()), "err", err)
|
||||||
success = 0
|
success = 0
|
||||||
c.mssqlChildCollectorFailure++
|
c.mssqlChildCollectorFailure++
|
||||||
} else {
|
} else {
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql class collector %s succeeded after %fs.", name, duration.Seconds()))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql class collector %s succeeded after %fs.", name, duration.Seconds()))
|
||||||
success = 1
|
success = 1
|
||||||
}
|
}
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
@@ -2013,7 +2006,8 @@ func (c *Collector) execute(ctx *types.ScrapeContext, name string, fn mssqlColle
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
wg := sync.WaitGroup{}
|
wg := sync.WaitGroup{}
|
||||||
|
|
||||||
for sqlInstance := range c.mssqlInstances {
|
for sqlInstance := range c.mssqlInstances {
|
||||||
@@ -2021,7 +2015,7 @@ func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
function := c.mssqlCollectors[name]
|
function := c.mssqlCollectors[name]
|
||||||
|
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go c.execute(ctx, name, function, ch, sqlInstance, &wg)
|
go c.execute(ctx, logger, name, function, ch, sqlInstance, &wg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2084,11 +2078,11 @@ type mssqlAccessMethods struct {
|
|||||||
WorktablesFromCacheRatioBase float64 `perflib:"Worktables From Cache Base_Base"`
|
WorktablesFromCacheRatioBase float64 `perflib:"Worktables From Cache Base_Base"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAccessMethods(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectAccessMethods(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlAccessMethods
|
var dst []mssqlAccessMethods
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_accessmethods collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_accessmethods collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "accessmethods")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "accessmethods")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2419,11 +2413,11 @@ type mssqlAvailabilityReplica struct {
|
|||||||
SendstoTransportPerSec float64 `perflib:"Sends to Transport/sec"`
|
SendstoTransportPerSec float64 `perflib:"Sends to Transport/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAvailabilityReplica(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectAvailabilityReplica(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlAvailabilityReplica
|
var dst []mssqlAvailabilityReplica
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_availreplica collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_availreplica collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "availreplica")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "availreplica")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2527,11 +2521,11 @@ type mssqlBufferManager struct {
|
|||||||
TargetPages float64 `perflib:"Target pages"`
|
TargetPages float64 `perflib:"Target pages"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectBufferManager(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectBufferManager(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlBufferManager
|
var dst []mssqlBufferManager
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_bufman collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_bufman collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "bufman")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "bufman")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2731,11 +2725,11 @@ type mssqlDatabaseReplica struct {
|
|||||||
TransactionDelay float64 `perflib:"Transaction Delay"`
|
TransactionDelay float64 `perflib:"Transaction Delay"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectDatabaseReplica(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectDatabaseReplica(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlDatabaseReplica
|
var dst []mssqlDatabaseReplica
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_dbreplica collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_dbreplica collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "dbreplica")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "dbreplica")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2970,11 +2964,11 @@ type mssqlDatabases struct {
|
|||||||
XTPMemoryUsedKB float64 `perflib:"XTP Memory Used (KB)"`
|
XTPMemoryUsedKB float64 `perflib:"XTP Memory Used (KB)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectDatabases(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectDatabases(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlDatabases
|
var dst []mssqlDatabases
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_databases collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_databases collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "databases")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "databases")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3352,11 +3346,11 @@ type mssqlGeneralStatistics struct {
|
|||||||
UserConnections float64 `perflib:"User Connections"`
|
UserConnections float64 `perflib:"User Connections"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectGeneralStatistics(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectGeneralStatistics(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlGeneralStatistics
|
var dst []mssqlGeneralStatistics
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_genstats collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_genstats collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "genstats")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "genstats")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3547,11 +3541,11 @@ type mssqlLocks struct {
|
|||||||
NumberOfDeadlocksPerSec float64 `perflib:"Number of Deadlocks/sec"`
|
NumberOfDeadlocksPerSec float64 `perflib:"Number of Deadlocks/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectLocks(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectLocks(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlLocks
|
var dst []mssqlLocks
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_locks collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_locks collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "locks")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "locks")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3645,11 +3639,11 @@ type mssqlMemoryManager struct {
|
|||||||
TotalServerMemoryKB float64 `perflib:"Total Server Memory (KB)"`
|
TotalServerMemoryKB float64 `perflib:"Total Server Memory (KB)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectMemoryManager(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectMemoryManager(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlMemoryManager
|
var dst []mssqlMemoryManager
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_memmgr collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_memmgr collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "memmgr")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "memmgr")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3814,11 +3808,11 @@ type mssqlSQLStatistics struct {
|
|||||||
UnsafeAutoParamsPerSec float64 `perflib:"Unsafe Auto-Params/sec"`
|
UnsafeAutoParamsPerSec float64 `perflib:"Unsafe Auto-Params/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectSQLStats(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectSQLStats(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlSQLStatistics
|
var dst []mssqlSQLStatistics
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_sqlstats collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_sqlstats collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "sqlstats")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "sqlstats")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3922,11 +3916,11 @@ type mssqlWaitStatistics struct {
|
|||||||
WaitStatsTransactionOwnershipWaits float64 `perflib:"Transaction ownership waits"`
|
WaitStatsTransactionOwnershipWaits float64 `perflib:"Transaction ownership waits"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectWaitStats(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectWaitStats(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlWaitStatistics
|
var dst []mssqlWaitStatistics
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_waitstats collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_waitstats collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "waitstats")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "waitstats")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4028,11 +4022,11 @@ type mssqlSQLErrors struct {
|
|||||||
|
|
||||||
// Win32_PerfRawData_MSSQLSERVER_SQLServerErrors docs:
|
// Win32_PerfRawData_MSSQLSERVER_SQLServerErrors docs:
|
||||||
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-errors-object
|
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-errors-object
|
||||||
func (c *Collector) collectSQLErrors(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectSQLErrors(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlSQLErrors
|
var dst []mssqlSQLErrors
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_sqlerrors collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_sqlerrors collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "sqlerrors")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "sqlerrors")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4071,11 +4065,11 @@ type mssqlTransactions struct {
|
|||||||
|
|
||||||
// Win32_PerfRawData_MSSQLSERVER_Transactions docs:
|
// Win32_PerfRawData_MSSQLSERVER_Transactions docs:
|
||||||
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-transactions-object
|
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-transactions-object
|
||||||
func (c *Collector) collectTransactions(ctx *types.ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) error {
|
func (c *Collector) collectTransactions(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric, sqlInstance string) error {
|
||||||
var dst []mssqlTransactions
|
var dst []mssqlTransactions
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("mssql_transactions collector iterating sql instance %s.", sqlInstance))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("mssql_transactions collector iterating sql instance %s.", sqlInstance))
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "transactions")], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects[mssqlGetPerfObjectName(sqlInstance, "transactions")], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ var nicNameToUnderscore = regexp.MustCompile("[^a-zA-Z0-9]")
|
|||||||
// A Collector is a Prometheus Collector for Perflib Network Interface metrics.
|
// A Collector is a Prometheus Collector for Perflib Network Interface metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
bytesReceivedTotal *prometheus.Desc
|
bytesReceivedTotal *prometheus.Desc
|
||||||
bytesSentTotal *prometheus.Desc
|
bytesSentTotal *prometheus.Desc
|
||||||
@@ -48,7 +47,7 @@ type Collector struct {
|
|||||||
currentBandwidth *prometheus.Desc
|
currentBandwidth *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -65,8 +64,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,11 +107,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Network Interface"}, nil
|
return []string{"Network Interface"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +115,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.bytesReceivedTotal = prometheus.NewDesc(
|
c.bytesReceivedTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "bytes_received_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "bytes_received_total"),
|
||||||
"(Network.BytesReceivedPerSec)",
|
"(Network.BytesReceivedPerSec)",
|
||||||
@@ -207,9 +200,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting net metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting net metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -240,10 +234,11 @@ type networkInterface struct {
|
|||||||
CurrentBandwidth float64 `perflib:"Current Bandwidth"`
|
CurrentBandwidth float64 `perflib:"Current Bandwidth"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []networkInterface
|
var dst []networkInterface
|
||||||
|
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Network Interface"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Network Interface"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRExceptions metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRExceptions metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
numberOfExceptionsThrown *prometheus.Desc
|
numberOfExceptionsThrown *prometheus.Desc
|
||||||
numberOfFilters *prometheus.Desc
|
numberOfFilters *prometheus.Desc
|
||||||
@@ -28,7 +27,7 @@ type Collector struct {
|
|||||||
throwToCatchDepth *prometheus.Desc
|
throwToCatchDepth *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -37,8 +36,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,11 +47,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +55,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.numberOfExceptionsThrown = prometheus.NewDesc(
|
c.numberOfExceptionsThrown = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "exceptions_thrown_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "exceptions_thrown_total"),
|
||||||
"Displays the total number of exceptions thrown since the application started. This includes both .NET exceptions and unmanaged exceptions that are converted into .NET exceptions.",
|
"Displays the total number of exceptions thrown since the application started. This includes both .NET exceptions and unmanaged exceptions that are converted into .NET exceptions.",
|
||||||
@@ -92,9 +85,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrexceptions metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrexceptions metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -110,9 +104,9 @@ type Win32_PerfRawData_NETFramework_NETCLRExceptions struct {
|
|||||||
ThrowToCatchDepthPersec uint32
|
ThrowToCatchDepthPersec uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRExceptions
|
var dst []Win32_PerfRawData_NETFramework_NETCLRExceptions
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,14 +20,13 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRInterop metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRInterop metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
numberOfCCWs *prometheus.Desc
|
numberOfCCWs *prometheus.Desc
|
||||||
numberOfMarshalling *prometheus.Desc
|
numberOfMarshalling *prometheus.Desc
|
||||||
numberOfStubs *prometheus.Desc
|
numberOfStubs *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -36,8 +35,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,11 +46,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +54,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.numberOfCCWs = prometheus.NewDesc(
|
c.numberOfCCWs = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "com_callable_wrappers_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "com_callable_wrappers_total"),
|
||||||
"Displays the current number of COM callable wrappers (CCWs). A CCW is a proxy for a managed object being referenced from an unmanaged COM client.",
|
"Displays the current number of COM callable wrappers (CCWs). A CCW is a proxy for a managed object being referenced from an unmanaged COM client.",
|
||||||
@@ -85,9 +78,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrinterop metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrinterop metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -103,9 +97,9 @@ type Win32_PerfRawData_NETFramework_NETCLRInterop struct {
|
|||||||
NumberofTLBimportsPersec uint32
|
NumberofTLBimportsPersec uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRInterop
|
var dst []Win32_PerfRawData_NETFramework_NETCLRInterop
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRJit metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRJit metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
numberOfMethodsJitted *prometheus.Desc
|
numberOfMethodsJitted *prometheus.Desc
|
||||||
timeInJit *prometheus.Desc
|
timeInJit *prometheus.Desc
|
||||||
@@ -28,7 +27,7 @@ type Collector struct {
|
|||||||
totalNumberOfILBytesJitted *prometheus.Desc
|
totalNumberOfILBytesJitted *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -37,8 +36,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,11 +47,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +55,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.numberOfMethodsJitted = prometheus.NewDesc(
|
c.numberOfMethodsJitted = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "jit_methods_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "jit_methods_total"),
|
||||||
"Displays the total number of methods JIT-compiled since the application started. This counter does not include pre-JIT-compiled methods.",
|
"Displays the total number of methods JIT-compiled since the application started. This counter does not include pre-JIT-compiled methods.",
|
||||||
@@ -92,9 +85,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrjit metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrjit metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -112,9 +106,9 @@ type Win32_PerfRawData_NETFramework_NETCLRJit struct {
|
|||||||
TotalNumberofILBytesJitted uint32
|
TotalNumberofILBytesJitted uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRJit
|
var dst []Win32_PerfRawData_NETFramework_NETCLRJit
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRLoading metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRLoading metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
bytesInLoaderHeap *prometheus.Desc
|
bytesInLoaderHeap *prometheus.Desc
|
||||||
currentAppDomains *prometheus.Desc
|
currentAppDomains *prometheus.Desc
|
||||||
@@ -33,7 +32,7 @@ type Collector struct {
|
|||||||
totalNumberOfLoadFailures *prometheus.Desc
|
totalNumberOfLoadFailures *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -42,8 +41,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,11 +52,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +60,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.bytesInLoaderHeap = prometheus.NewDesc(
|
c.bytesInLoaderHeap = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "loader_heap_size_bytes"),
|
prometheus.BuildFQName(types.Namespace, Name, "loader_heap_size_bytes"),
|
||||||
"Displays the current size, in bytes, of the memory committed by the class loader across all application domains. Committed memory is the physical space reserved in the disk paging file.",
|
"Displays the current size, in bytes, of the memory committed by the class loader across all application domains. Committed memory is the physical space reserved in the disk paging file.",
|
||||||
@@ -127,9 +120,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrloading metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrloading metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -156,9 +150,9 @@ type Win32_PerfRawData_NETFramework_NETCLRLoading struct {
|
|||||||
TotalNumberofLoadFailures uint32
|
TotalNumberofLoadFailures uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRLoading
|
var dst []Win32_PerfRawData_NETFramework_NETCLRLoading
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
currentQueueLength *prometheus.Desc
|
currentQueueLength *prometheus.Desc
|
||||||
numberOfCurrentLogicalThreads *prometheus.Desc
|
numberOfCurrentLogicalThreads *prometheus.Desc
|
||||||
@@ -31,7 +30,7 @@ type Collector struct {
|
|||||||
totalNumberOfContentions *prometheus.Desc
|
totalNumberOfContentions *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -40,8 +39,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,11 +50,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,7 +58,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.currentQueueLength = prometheus.NewDesc(
|
c.currentQueueLength = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "current_queue_length"),
|
prometheus.BuildFQName(types.Namespace, Name, "current_queue_length"),
|
||||||
"Displays the total number of threads that are currently waiting to acquire a managed lock in the application.",
|
"Displays the total number of threads that are currently waiting to acquire a managed lock in the application.",
|
||||||
@@ -113,9 +106,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrlocksandthreads metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrlocksandthreads metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -136,9 +130,9 @@ type Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads struct {
|
|||||||
TotalNumberofContentions uint32
|
TotalNumberofContentions uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads
|
var dst []Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRMemory metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRMemory metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
allocatedBytes *prometheus.Desc
|
allocatedBytes *prometheus.Desc
|
||||||
finalizationSurvivors *prometheus.Desc
|
finalizationSurvivors *prometheus.Desc
|
||||||
@@ -36,7 +35,7 @@ type Collector struct {
|
|||||||
timeInGC *prometheus.Desc
|
timeInGC *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -45,8 +44,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,11 +55,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +63,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.allocatedBytes = prometheus.NewDesc(
|
c.allocatedBytes = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "allocated_bytes_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "allocated_bytes_total"),
|
||||||
"Displays the total number of bytes allocated on the garbage collection heap.",
|
"Displays the total number of bytes allocated on the garbage collection heap.",
|
||||||
@@ -148,9 +141,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrmemory metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrmemory metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -190,9 +184,9 @@ type Win32_PerfRawData_NETFramework_NETCLRMemory struct {
|
|||||||
PromotedMemoryfromGen1 uint64
|
PromotedMemoryfromGen1 uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRMemory
|
var dst []Win32_PerfRawData_NETFramework_NETCLRMemory
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRRemoting metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRRemoting metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
channels *prometheus.Desc
|
channels *prometheus.Desc
|
||||||
contextBoundClassesLoaded *prometheus.Desc
|
contextBoundClassesLoaded *prometheus.Desc
|
||||||
@@ -30,7 +29,7 @@ type Collector struct {
|
|||||||
totalRemoteCalls *prometheus.Desc
|
totalRemoteCalls *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -39,8 +38,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,11 +49,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +57,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.channels = prometheus.NewDesc(
|
c.channels = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "channels_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "channels_total"),
|
||||||
"Displays the total number of remoting channels registered across all application domains since application started.",
|
"Displays the total number of remoting channels registered across all application domains since application started.",
|
||||||
@@ -106,9 +99,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrremoting metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrremoting metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -126,9 +120,9 @@ type Win32_PerfRawData_NETFramework_NETCLRRemoting struct {
|
|||||||
TotalRemoteCalls uint32
|
TotalRemoteCalls uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRRemoting
|
var dst []Win32_PerfRawData_NETFramework_NETCLRRemoting
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRSecurity metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_NETFramework_NETCLRSecurity metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
numberLinkTimeChecks *prometheus.Desc
|
numberLinkTimeChecks *prometheus.Desc
|
||||||
timeInRTChecks *prometheus.Desc
|
timeInRTChecks *prometheus.Desc
|
||||||
@@ -28,7 +27,7 @@ type Collector struct {
|
|||||||
totalRuntimeChecks *prometheus.Desc
|
totalRuntimeChecks *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -37,8 +36,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,11 +47,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +55,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.numberLinkTimeChecks = prometheus.NewDesc(
|
c.numberLinkTimeChecks = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "link_time_checks_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "link_time_checks_total"),
|
||||||
"Displays the total number of link-time code access security checks since the application started.",
|
"Displays the total number of link-time code access security checks since the application started.",
|
||||||
@@ -92,9 +85,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrsecurity metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting win32_perfrawdata_netframework_netclrsecurity metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -111,9 +105,9 @@ type Win32_PerfRawData_NETFramework_NETCLRSecurity struct {
|
|||||||
TotalRuntimeChecks uint32
|
TotalRuntimeChecks uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_NETFramework_NETCLRSecurity
|
var dst []Win32_PerfRawData_NETFramework_NETCLRSecurity
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// Collector is a Prometheus Collector for WMI Win32_PerfRawData_IAS_NPSAuthenticationServer and Win32_PerfRawData_IAS_NPSAccountingServer metrics.
|
// Collector is a Prometheus Collector for WMI Win32_PerfRawData_IAS_NPSAuthenticationServer and Win32_PerfRawData_IAS_NPSAccountingServer metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
accessAccepts *prometheus.Desc
|
accessAccepts *prometheus.Desc
|
||||||
accessChallenges *prometheus.Desc
|
accessChallenges *prometheus.Desc
|
||||||
@@ -50,7 +49,7 @@ type Collector struct {
|
|||||||
accountingUnknownType *prometheus.Desc
|
accountingUnknownType *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -59,8 +58,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,11 +69,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +77,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.accessAccepts = prometheus.NewDesc(
|
c.accessAccepts = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "access_accepts"),
|
prometheus.BuildFQName(types.Namespace, Name, "access_accepts"),
|
||||||
"(AccessAccepts)",
|
"(AccessAccepts)",
|
||||||
@@ -241,13 +234,14 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.CollectAccept(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", fmt.Sprintf("failed collecting NPS accept data: %s", err))
|
if err := c.CollectAccept(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", fmt.Sprintf("failed collecting NPS accept data: %s", err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.CollectAccounting(ch); err != nil {
|
if err := c.CollectAccounting(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", fmt.Sprintf("failed collecting NPS accounting data: %s", err))
|
_ = level.Error(logger).Log("msg", fmt.Sprintf("failed collecting NPS accounting data: %s", err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -292,9 +286,9 @@ type Win32_PerfRawData_IAS_NPSAccountingServer struct {
|
|||||||
|
|
||||||
// CollectAccept sends the metric values for each metric
|
// CollectAccept sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) CollectAccept(ch chan<- prometheus.Metric) error {
|
func (c *Collector) CollectAccept(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_IAS_NPSAuthenticationServer
|
var dst []Win32_PerfRawData_IAS_NPSAuthenticationServer
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -380,9 +374,9 @@ func (c *Collector) CollectAccept(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) CollectAccounting(ch chan<- prometheus.Metric) error {
|
func (c *Collector) CollectAccounting(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_IAS_NPSAccountingServer
|
var dst []Win32_PerfRawData_IAS_NPSAccountingServer
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI metrics.
|
// A Collector is a Prometheus Collector for WMI metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
osInformation *prometheus.Desc
|
osInformation *prometheus.Desc
|
||||||
pagingFreeBytes *prometheus.Desc
|
pagingFreeBytes *prometheus.Desc
|
||||||
@@ -56,7 +55,7 @@ type pagingFileCounter struct {
|
|||||||
UsagePeak float64 `perflib:"% Usage Peak"`
|
UsagePeak float64 `perflib:"% Usage Peak"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -65,8 +64,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,11 +75,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Paging File"}, nil
|
return []string{"Paging File"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +83,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.osInformation = prometheus.NewDesc(
|
c.osInformation = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
prometheus.BuildFQName(types.Namespace, Name, "info"),
|
||||||
"OperatingSystem.Caption, OperatingSystem.Version",
|
"OperatingSystem.Caption, OperatingSystem.Version",
|
||||||
@@ -174,9 +167,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting os metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting os metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -200,7 +194,8 @@ type Win32_OperatingSystem struct {
|
|||||||
Version string
|
Version string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
nwgi, err := netapi32.GetWorkstationInfo()
|
nwgi, err := netapi32.GetWorkstationInfo()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -237,7 +232,7 @@ func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
file, err := os.Stat(fileString)
|
file, err := os.Stat(fileString)
|
||||||
// For unknown reasons, Windows doesn't always create a page file. Continue collection rather than aborting.
|
// For unknown reasons, Windows doesn't always create a page file. Continue collection rather than aborting.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Debug(c.logger).Log("msg", fmt.Sprintf("Failed to read page file (reason: %s): %s\n", err, fileString))
|
_ = level.Debug(logger).Log("msg", fmt.Sprintf("Failed to read page file (reason: %s): %s\n", err, fileString))
|
||||||
} else {
|
} else {
|
||||||
fsipf += float64(file.Size())
|
fsipf += float64(file.Size())
|
||||||
}
|
}
|
||||||
@@ -274,7 +269,7 @@ func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
}
|
}
|
||||||
|
|
||||||
pfc := make([]pagingFileCounter, 0)
|
pfc := make([]pagingFileCounter, 0)
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Paging File"], &pfc, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Paging File"], &pfc, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,7 +329,7 @@ func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
fsipf,
|
fsipf,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
_ = level.Debug(c.logger).Log("msg", "Could not find HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management key. windows_os_paging_free_bytes and windows_os_paging_limit_bytes will be omitted.")
|
_ = level.Debug(logger).Log("msg", "Could not find HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management key. windows_os_paging_free_bytes and windows_os_paging_limit_bytes will be omitted.")
|
||||||
}
|
}
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
c.virtualMemoryFreeBytes,
|
c.virtualMemoryFreeBytes,
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ var ConfigDefaults = Config{
|
|||||||
// A Collector is a Prometheus Collector for perflib PhysicalDisk metrics.
|
// A Collector is a Prometheus Collector for perflib PhysicalDisk metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
idleTime *prometheus.Desc
|
idleTime *prometheus.Desc
|
||||||
readBytesTotal *prometheus.Desc
|
readBytesTotal *prometheus.Desc
|
||||||
@@ -46,7 +45,7 @@ type Collector struct {
|
|||||||
writesTotal *prometheus.Desc
|
writesTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -63,8 +62,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,11 +105,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"PhysicalDisk"}, nil
|
return []string{"PhysicalDisk"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +113,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.requestsQueued = prometheus.NewDesc(
|
c.requestsQueued = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "requests_queued"),
|
prometheus.BuildFQName(types.Namespace, Name, "requests_queued"),
|
||||||
"The number of requests queued to the disk (PhysicalDisk.CurrentDiskQueueLength)",
|
"The number of requests queued to the disk (PhysicalDisk.CurrentDiskQueueLength)",
|
||||||
@@ -210,9 +203,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting physical_disk metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting physical_disk metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -237,9 +231,10 @@ type PhysicalDisk struct {
|
|||||||
AvgDiskSecPerTransfer float64 `perflib:"Avg. Disk sec/Transfer"`
|
AvgDiskSecPerTransfer float64 `perflib:"Avg. Disk sec/Transfer"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []PhysicalDisk
|
var dst []PhysicalDisk
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["PhysicalDisk"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["PhysicalDisk"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,14 +40,13 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
printerStatus *prometheus.Desc
|
printerStatus *prometheus.Desc
|
||||||
printerJobStatus *prometheus.Desc
|
printerJobStatus *prometheus.Desc
|
||||||
printerJobCount *prometheus.Desc
|
printerJobCount *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -64,8 +63,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,15 +102,11 @@ func NewWithFlags(app *kingpin.Application) *Collector {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) Close() error {
|
func (c *Collector) Close() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.printerJobStatus = prometheus.NewDesc(
|
c.printerJobStatus = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "job_status"),
|
prometheus.BuildFQName(types.Namespace, Name, "job_status"),
|
||||||
"A counter of printer jobs by status",
|
"A counter of printer jobs by status",
|
||||||
@@ -138,7 +131,7 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
func (c *Collector) GetName() string { return Name }
|
func (c *Collector) GetName() string { return Name }
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) { return []string{"Printer"}, nil }
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) { return []string{"Printer"}, nil }
|
||||||
|
|
||||||
type wmiPrinter struct {
|
type wmiPrinter struct {
|
||||||
Name string
|
Name string
|
||||||
@@ -152,24 +145,25 @@ type wmiPrintJob struct {
|
|||||||
Status string
|
Status string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectPrinterStatus(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed to collect printer status metrics", "err", err)
|
if err := c.collectPrinterStatus(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed to collect printer status metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.collectPrinterJobStatus(ch); err != nil {
|
if err := c.collectPrinterJobStatus(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed to collect printer job status metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed to collect printer job status metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectPrinterStatus(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectPrinterStatus(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var printers []wmiPrinter
|
var printers []wmiPrinter
|
||||||
|
|
||||||
q := wmi.QueryAllForClass(&printers, "win32_Printer", c.logger)
|
q := wmi.QueryAllForClass(&printers, "win32_Printer", logger)
|
||||||
if err := wmi.Query(q, &printers); err != nil {
|
if err := wmi.Query(q, &printers); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -206,10 +200,10 @@ func (c *Collector) collectPrinterStatus(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectPrinterJobStatus(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectPrinterJobStatus(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var printJobs []wmiPrintJob
|
var printJobs []wmiPrintJob
|
||||||
|
|
||||||
q := wmi.QueryAllForClass(&printJobs, "win32_PrintJob", c.logger)
|
q := wmi.QueryAllForClass(&printJobs, "win32_PrintJob", logger)
|
||||||
if err := wmi.Query(q, &printJobs); err != nil {
|
if err := wmi.Query(q, &printJobs); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
lookupCache map[string]string
|
lookupCache map[string]string
|
||||||
|
|
||||||
@@ -59,7 +58,7 @@ type Collector struct {
|
|||||||
workingSetPrivate *prometheus.Desc
|
workingSetPrivate *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -76,8 +75,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,11 +128,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Process"}, nil
|
return []string{"Process"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,9 +136,11 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
if c.config.ProcessInclude.String() == "^(?:.*)$" && c.config.ProcessExclude.String() == "^(?:)$" {
|
if c.config.ProcessInclude.String() == "^(?:.*)$" && c.config.ProcessExclude.String() == "^(?:)$" {
|
||||||
_ = level.Warn(c.logger).Log("msg", "No filters specified for process collector. This will generate a very large number of metrics!")
|
_ = level.Warn(logger).Log("msg", "No filters specified for process collector. This will generate a very large number of metrics!")
|
||||||
}
|
}
|
||||||
|
|
||||||
commonLabels := make([]string, 0)
|
commonLabels := make([]string, 0)
|
||||||
@@ -286,18 +281,19 @@ type WorkerProcess struct {
|
|||||||
ProcessId uint64
|
ProcessId uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
data := make([]perflibProcess, 0)
|
data := make([]perflibProcess, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["Process"], &data, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["Process"], &data, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var workerProcesses []WorkerProcess
|
var workerProcesses []WorkerProcess
|
||||||
if c.config.EnableWorkerProcess {
|
if c.config.EnableWorkerProcess {
|
||||||
queryWorkerProcess := wmi.QueryAllForClass(&workerProcesses, "WorkerProcess", c.logger)
|
queryWorkerProcess := wmi.QueryAllForClass(&workerProcesses, "WorkerProcess", logger)
|
||||||
if err := wmi.QueryNamespace(queryWorkerProcess, &workerProcesses, "root\\WebAdministration"); err != nil {
|
if err := wmi.QueryNamespace(queryWorkerProcess, &workerProcesses, "root\\WebAdministration"); err != nil {
|
||||||
_ = level.Debug(c.logger).Log("msg", "Could not query WebAdministration namespace for IIS worker processes", "err", err)
|
_ = level.Debug(logger).Log("msg", "Could not query WebAdministration namespace for IIS worker processes", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ func (coll *Prometheus) Collect(ch chan<- prometheus.Metric) {
|
|||||||
for name, c := range coll.collectors.collectors {
|
for name, c := range coll.collectors.collectors {
|
||||||
go func(name string, c Collector) {
|
go func(name string, c Collector) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
outcome := coll.execute(name, c, scrapeContext, metricsBuffer)
|
outcome := coll.execute(coll.logger, name, c, scrapeContext, metricsBuffer)
|
||||||
l.Lock()
|
l.Lock()
|
||||||
if !finished {
|
if !finished {
|
||||||
collectorOutcomes[name] = outcome
|
collectorOutcomes[name] = outcome
|
||||||
@@ -171,9 +171,9 @@ func (coll *Prometheus) Collect(ch chan<- prometheus.Metric) {
|
|||||||
l.Unlock()
|
l.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (coll *Prometheus) execute(name string, c Collector, ctx *types.ScrapeContext, ch chan<- prometheus.Metric) collectorOutcome {
|
func (coll *Prometheus) execute(logger log.Logger, name string, c Collector, ctx *types.ScrapeContext, ch chan<- prometheus.Metric) collectorOutcome {
|
||||||
t := time.Now()
|
t := time.Now()
|
||||||
err := c.Collect(ctx, ch)
|
err := c.Collect(ctx, logger, ch)
|
||||||
duration := time.Since(t).Seconds()
|
duration := time.Since(t).Seconds()
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
coll.scrapeDurationDesc,
|
coll.scrapeDurationDesc,
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ var ConfigDefaults = Config{}
|
|||||||
// https://wutils.com/wmi/root/cimv2/win32_perfrawdata_counters_remotefxgraphics/
|
// https://wutils.com/wmi/root/cimv2/win32_perfrawdata_counters_remotefxgraphics/
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
// net
|
// net
|
||||||
baseTCPRTT *prometheus.Desc
|
baseTCPRTT *prometheus.Desc
|
||||||
@@ -54,7 +53,7 @@ type Collector struct {
|
|||||||
sourceFramesPerSecond *prometheus.Desc
|
sourceFramesPerSecond *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -63,8 +62,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,11 +73,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"RemoteFX Network", "RemoteFX Graphics"}, nil
|
return []string{"RemoteFX Network", "RemoteFX Graphics"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +81,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
// net
|
// net
|
||||||
c.baseTCPRTT = prometheus.NewDesc(
|
c.baseTCPRTT = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "net_base_tcp_rtt_seconds"),
|
prometheus.BuildFQName(types.Namespace, Name, "net_base_tcp_rtt_seconds"),
|
||||||
@@ -217,13 +210,14 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectRemoteFXNetworkCount(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting terminal services session count metrics", "err", err)
|
if err := c.collectRemoteFXNetworkCount(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting terminal services session count metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectRemoteFXGraphicsCounters(ctx, ch); err != nil {
|
if err := c.collectRemoteFXGraphicsCounters(ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting terminal services session count metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting terminal services session count metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -246,9 +240,10 @@ type perflibRemoteFxNetwork struct {
|
|||||||
RetransmissionRate float64 `perflib:"Percentage of packets that have been retransmitted"`
|
RetransmissionRate float64 `perflib:"Percentage of packets that have been retransmitted"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectRemoteFXNetworkCount(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectRemoteFXNetworkCount(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
dst := make([]perflibRemoteFxNetwork, 0)
|
dst := make([]perflibRemoteFxNetwork, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["RemoteFX Network"], &dst, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["RemoteFX Network"], &dst, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -356,9 +351,10 @@ type perflibRemoteFxGraphics struct {
|
|||||||
SourceFramesPerSecond float64 `perflib:"Source Frames/Second"`
|
SourceFramesPerSecond float64 `perflib:"Source Frames/Second"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectRemoteFXGraphicsCounters(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectRemoteFXGraphicsCounters(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
dst := make([]perflibRemoteFxGraphics, 0)
|
dst := make([]perflibRemoteFxGraphics, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["RemoteFX Graphics"], &dst, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["RemoteFX Graphics"], &dst, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
lastResult *prometheus.Desc
|
lastResult *prometheus.Desc
|
||||||
missedRuns *prometheus.Desc
|
missedRuns *prometheus.Desc
|
||||||
@@ -69,7 +68,7 @@ type ScheduledTask struct {
|
|||||||
|
|
||||||
type ScheduledTasks []ScheduledTask
|
type ScheduledTasks []ScheduledTask
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -86,8 +85,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,11 +128,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +136,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.lastResult = prometheus.NewDesc(
|
c.lastResult = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "last_result"),
|
prometheus.BuildFQName(types.Namespace, Name, "last_result"),
|
||||||
"The result that was returned the last time the registered task was run",
|
"The result that was returned the last time the registered task was run",
|
||||||
@@ -168,9 +161,10 @@ func (c *Collector) Build() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
if err := c.collect(ch); err != nil {
|
if err := c.collect(ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting user metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting user metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
// A Collector is a Prometheus Collector for WMI Win32_Service metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_Service metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
serviceWhereClause *string
|
serviceWhereClause *string
|
||||||
useAPI *bool
|
useAPI *bool
|
||||||
v2 *bool
|
v2 *bool
|
||||||
@@ -50,7 +48,7 @@ type Collector struct {
|
|||||||
StateV2 *prometheus.Desc
|
StateV2 *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -59,7 +57,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
serviceWhereClause: &config.ServiceWhereClause,
|
serviceWhereClause: &config.ServiceWhereClause,
|
||||||
useAPI: &config.UseAPI,
|
useAPI: &config.UseAPI,
|
||||||
}
|
}
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
@@ -85,11 +82,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,12 +90,14 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
if utils.IsEmpty(c.serviceWhereClause) {
|
if utils.IsEmpty(c.serviceWhereClause) {
|
||||||
_ = level.Warn(c.logger).Log("msg", "No where-clause specified for service collector. This will generate a very large number of metrics!")
|
_ = level.Warn(logger).Log("msg", "No where-clause specified for service collector. This will generate a very large number of metrics!")
|
||||||
}
|
}
|
||||||
if *c.useAPI {
|
if *c.useAPI {
|
||||||
_ = level.Warn(c.logger).Log("msg", "API collection is enabled.")
|
_ = level.Warn(logger).Log("msg", "API collection is enabled.")
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Information = prometheus.NewDesc(
|
c.Information = prometheus.NewDesc(
|
||||||
@@ -141,21 +136,22 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case *c.useAPI:
|
case *c.useAPI:
|
||||||
if err = c.collectAPI(ch); err != nil {
|
if err = c.collectAPI(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting API service metrics:", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting API service metrics:", "err", err)
|
||||||
}
|
}
|
||||||
case *c.v2:
|
case *c.v2:
|
||||||
if err = c.collectAPIV2(ch); err != nil {
|
if err = c.collectAPIV2(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting API service metrics:", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting API service metrics:", "err", err)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if err = c.collectWMI(ch); err != nil {
|
if err = c.collectWMI(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting WMI service metrics:", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting WMI service metrics:", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,9 +220,9 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Collector) collectWMI(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectWMI(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_Service
|
var dst []Win32_Service
|
||||||
q := wmi.QueryAllWhere(&dst, *c.serviceWhereClause, c.logger) //nolint:staticcheck
|
q := wmi.QueryAllWhere(&dst, *c.serviceWhereClause, logger) //nolint:staticcheck
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -292,7 +288,7 @@ func (c *Collector) collectWMI(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAPI(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAPI(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
svcmgrConnection, err := mgr.Connect()
|
svcmgrConnection, err := mgr.Connect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -311,14 +307,14 @@ func (c *Collector) collectAPI(ch chan<- prometheus.Metric) error {
|
|||||||
// Get UTF16 service name.
|
// Get UTF16 service name.
|
||||||
serviceName, err := syscall.UTF16PtrFromString(service)
|
serviceName, err := syscall.UTF16PtrFromString(service)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Service %s get name error: %#v", service, err))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Service %s get name error: %#v", service, err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open connection for service handler.
|
// Open connection for service handler.
|
||||||
serviceHandle, err := windows.OpenService(svcmgrConnection.Handle, serviceName, windows.GENERIC_READ)
|
serviceHandle, err := windows.OpenService(svcmgrConnection.Handle, serviceName, windows.GENERIC_READ)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Open service %s error: %#v", service, err))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Open service %s error: %#v", service, err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,14 +325,14 @@ func (c *Collector) collectAPI(ch chan<- prometheus.Metric) error {
|
|||||||
// Get Service Configuration.
|
// Get Service Configuration.
|
||||||
serviceConfig, err := serviceManager.Config()
|
serviceConfig, err := serviceManager.Config()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Get service %s config error: %#v", service, err))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Get service %s config error: %#v", service, err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Service Current Status.
|
// Get Service Current Status.
|
||||||
serviceStatus, err := serviceManager.Query()
|
serviceStatus, err := serviceManager.Query()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Get service %s status error: %#v", service, err))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Get service %s status error: %#v", service, err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,15 +380,15 @@ func (c *Collector) collectAPI(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAPIV2(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAPIV2(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
services, err := c.queryAllServiceStates()
|
services, err := c.queryAllServiceStates(logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Failed to query services", "err", err)
|
_ = level.Warn(logger).Log("msg", "Failed to query services", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if services == nil {
|
if services == nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "No services queried")
|
_ = level.Warn(logger).Log("msg", "No services queried")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -428,7 +424,7 @@ func (c *Collector) collectAPIV2(ch chan<- prometheus.Metric) error {
|
|||||||
// Copyright 2016-present Datadog, Inc.
|
// Copyright 2016-present Datadog, Inc.
|
||||||
//
|
//
|
||||||
// Source: https://github.com/DataDog/datadog-agent/blob/afbd8b6c87939c92610c654cb07fdfd439e4fb27/pkg/util/winutil/scmmonitor.go#L61-L96
|
// Source: https://github.com/DataDog/datadog-agent/blob/afbd8b6c87939c92610c654cb07fdfd439e4fb27/pkg/util/winutil/scmmonitor.go#L61-L96
|
||||||
func (c *Collector) queryAllServiceStates() ([]windows.ENUM_SERVICE_STATUS_PROCESS, error) {
|
func (c *Collector) queryAllServiceStates(logger log.Logger) ([]windows.ENUM_SERVICE_STATUS_PROCESS, error) {
|
||||||
// EnumServiceStatusEx requires only SC_MANAGER_ENUM_SERVICE.
|
// EnumServiceStatusEx requires only SC_MANAGER_ENUM_SERVICE.
|
||||||
h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_ENUMERATE_SERVICE)
|
h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_ENUMERATE_SERVICE)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -438,7 +434,7 @@ func (c *Collector) queryAllServiceStates() ([]windows.ENUM_SERVICE_STATUS_PROCE
|
|||||||
m := &mgr.Mgr{Handle: h}
|
m := &mgr.Mgr{Handle: h}
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := m.Disconnect(); err != nil {
|
if err := m.Disconnect(); err != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", "Failed to disconnect from scm", "err", err)
|
_ = level.Warn(logger).Log("msg", "Failed to disconnect from scm", "err", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
@@ -21,13 +21,12 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
treeConnectCount *prometheus.Desc
|
treeConnectCount *prometheus.Desc
|
||||||
currentOpenFileCount *prometheus.Desc
|
currentOpenFileCount *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -36,8 +35,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,11 +46,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{
|
return []string{
|
||||||
"SMB Server Shares",
|
"SMB Server Shares",
|
||||||
}, nil
|
}, nil
|
||||||
@@ -63,7 +56,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
// desc creates a new prometheus description
|
// desc creates a new prometheus description
|
||||||
desc := func(metricName string, description string, labels ...string) *prometheus.Desc {
|
desc := func(metricName string, description string, labels ...string) *prometheus.Desc {
|
||||||
return prometheus.NewDesc(
|
return prometheus.NewDesc(
|
||||||
@@ -81,9 +74,10 @@ func (c *Collector) Build() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Collect collects smb metrics and sends them to prometheus.
|
// Collect collects smb metrics and sends them to prometheus.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectServerShares(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed to collect server share metrics", "err", err)
|
if err := c.collectServerShares(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed to collect server share metrics", "err", err)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -99,9 +93,10 @@ type perflibServerShares struct {
|
|||||||
TreeConnectCount float64 `perflib:"Tree Connect Count"`
|
TreeConnectCount float64 `perflib:"Tree Connect Count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectServerShares(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectServerShares(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibServerShares
|
var data []perflibServerShares
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["SMB Server Shares"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["SMB Server Shares"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, instance := range data {
|
for _, instance := range data {
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
readBytesTotal *prometheus.Desc
|
readBytesTotal *prometheus.Desc
|
||||||
readBytesTransmittedViaSMBDirectTotal *prometheus.Desc
|
readBytesTransmittedViaSMBDirectTotal *prometheus.Desc
|
||||||
@@ -49,7 +48,7 @@ type Collector struct {
|
|||||||
requestSecs *prometheus.Desc
|
requestSecs *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -58,8 +57,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,11 +68,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{
|
return []string{
|
||||||
"SMB Client Shares",
|
"SMB Client Shares",
|
||||||
}, nil
|
}, nil
|
||||||
@@ -85,7 +78,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
// desc creates a new prometheus description
|
// desc creates a new prometheus description
|
||||||
desc := func(metricName string, description string, labels []string) *prometheus.Desc {
|
desc := func(metricName string, description string, labels []string) *prometheus.Desc {
|
||||||
return prometheus.NewDesc(
|
return prometheus.NewDesc(
|
||||||
@@ -185,9 +178,10 @@ func (c *Collector) Build() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Collect collects smb client metrics and sends them to prometheus.
|
// Collect collects smb client metrics and sends them to prometheus.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectClientShares(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "Error in ClientShares", "err", err)
|
if err := c.collectClientShares(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "Error in ClientShares", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,9 +215,10 @@ type perflibClientShares struct {
|
|||||||
WriteRequestsPerSec float64 `perflib:"Write Requests/sec"`
|
WriteRequestsPerSec float64 `perflib:"Write Requests/sec"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectClientShares(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectClientShares(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var data []perflibClientShares
|
var data []perflibClientShares
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["SMB Client Shares"], &data, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["SMB Client Shares"], &data, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, instance := range data {
|
for _, instance := range data {
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
badMailedMessagesBadPickupFileTotal *prometheus.Desc
|
badMailedMessagesBadPickupFileTotal *prometheus.Desc
|
||||||
badMailedMessagesGeneralFailureTotal *prometheus.Desc
|
badMailedMessagesGeneralFailureTotal *prometheus.Desc
|
||||||
@@ -74,7 +73,7 @@ type Collector struct {
|
|||||||
routingTableLookupsTotal *prometheus.Desc
|
routingTableLookupsTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -91,8 +90,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,11 +133,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"SMTP Server"}, nil
|
return []string{"SMTP Server"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,8 +141,10 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
_ = level.Info(c.logger).Log("msg", "smtp collector is in an experimental state! Metrics for this collector have not been tested.")
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
|
_ = level.Info(logger).Log("msg", "smtp collector is in an experimental state! Metrics for this collector have not been tested.")
|
||||||
|
|
||||||
c.badMailedMessagesBadPickupFileTotal = prometheus.NewDesc(
|
c.badMailedMessagesBadPickupFileTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "badmailed_messages_bad_pickup_file_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "badmailed_messages_bad_pickup_file_total"),
|
||||||
@@ -409,9 +404,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting smtp metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting smtp metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -465,9 +461,10 @@ type PerflibSMTPServer struct {
|
|||||||
RoutingTableLookupsTotal float64 `perflib:"Routing Table Lookups Total"`
|
RoutingTableLookupsTotal float64 `perflib:"Routing Table Lookups Total"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []PerflibSMTPServer
|
var dst []PerflibSMTPServer
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["SMTP Server"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["SMTP Server"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI metrics.
|
// A Collector is a Prometheus Collector for WMI metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
contextSwitchesTotal *prometheus.Desc
|
contextSwitchesTotal *prometheus.Desc
|
||||||
exceptionDispatchesTotal *prometheus.Desc
|
exceptionDispatchesTotal *prometheus.Desc
|
||||||
@@ -30,7 +29,7 @@ type Collector struct {
|
|||||||
threads *prometheus.Desc
|
threads *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -39,8 +38,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,11 +49,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"System"}, nil
|
return []string{"System"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +57,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.contextSwitchesTotal = prometheus.NewDesc(
|
c.contextSwitchesTotal = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "context_switches_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "context_switches_total"),
|
||||||
"Total number of context switches (WMI source: PerfOS_System.ContextSwitchesPersec)",
|
"Total number of context switches (WMI source: PerfOS_System.ContextSwitchesPersec)",
|
||||||
@@ -106,9 +99,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting system metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting system metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -125,9 +119,10 @@ type system struct {
|
|||||||
Threads float64 `perflib:"Threads"`
|
Threads float64 `perflib:"Threads"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []system
|
var dst []system
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["System"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["System"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_Tcpip_TCPv{4,6} metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_Tcpip_TCPv{4,6} metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
connectionFailures *prometheus.Desc
|
connectionFailures *prometheus.Desc
|
||||||
connectionsActive *prometheus.Desc
|
connectionsActive *prometheus.Desc
|
||||||
@@ -33,7 +32,7 @@ type Collector struct {
|
|||||||
segmentsSentTotal *prometheus.Desc
|
segmentsSentTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -42,8 +41,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,11 +52,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"TCPv4"}, nil
|
return []string{"TCPv4"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +60,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.connectionFailures = prometheus.NewDesc(
|
c.connectionFailures = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "connection_failures_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "connection_failures_total"),
|
||||||
"(TCP.ConnectionFailures)",
|
"(TCP.ConnectionFailures)",
|
||||||
@@ -127,9 +120,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting tcp metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting tcp metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -207,11 +201,12 @@ func writeTCPCounters(metrics tcp, labels []string, c *Collector, ch chan<- prom
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []tcp
|
var dst []tcp
|
||||||
|
|
||||||
// TCPv4 counters
|
// TCPv4 counters
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["TCPv4"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["TCPv4"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(dst) != 0 {
|
if len(dst) != 0 {
|
||||||
@@ -219,7 +214,7 @@ func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TCPv6 counters
|
// TCPv6 counters
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["TCPv6"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["TCPv6"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(dst) != 0 {
|
if len(dst) != 0 {
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ var ConfigDefaults = Config{}
|
|||||||
// win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics.
|
// win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
audioBytesReceived *prometheus.Desc
|
audioBytesReceived *prometheus.Desc
|
||||||
audioBytesSent *prometheus.Desc
|
audioBytesSent *prometheus.Desc
|
||||||
@@ -72,7 +71,7 @@ type Collector struct {
|
|||||||
usbTXBWKBitPerSec *prometheus.Desc
|
usbTXBWKBitPerSec *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -81,8 +80,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,11 +91,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,8 +99,9 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
_ = level.Warn(c.logger).Log("msg", "teradici_pcoip collector is deprecated and will be removed in the future.")
|
_ = level.Warn(logger).
|
||||||
|
Log("msg", "teradici_pcoip collector is deprecated and will be removed in the future.", "collector", Name)
|
||||||
|
|
||||||
c.audioBytesReceived = prometheus.NewDesc(
|
c.audioBytesReceived = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "audio_bytes_received_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "audio_bytes_received_total"),
|
||||||
@@ -340,25 +334,26 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectAudio(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting teradici session audio metrics", "err", err)
|
if err := c.collectAudio(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting teradici session audio metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectGeneral(ch); err != nil {
|
if err := c.collectGeneral(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting teradici session general metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting teradici session general metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectImaging(ch); err != nil {
|
if err := c.collectImaging(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting teradici session imaging metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting teradici session imaging metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectNetwork(ch); err != nil {
|
if err := c.collectNetwork(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting teradici session network metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting teradici session network metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectUsb(ch); err != nil {
|
if err := c.collectUsb(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting teradici session USB metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting teradici session USB metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -416,9 +411,9 @@ type win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics struct {
|
|||||||
USBTXBWKBitPerSec uint64
|
USBTXBWKBitPerSec uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAudio(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAudio(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionAudioStatistics
|
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionAudioStatistics
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -459,9 +454,9 @@ func (c *Collector) collectAudio(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectGeneral(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectGeneral(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics
|
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -514,9 +509,9 @@ func (c *Collector) collectGeneral(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectImaging(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectImaging(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics
|
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -593,9 +588,9 @@ func (c *Collector) collectImaging(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectNetwork(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectNetwork(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
|
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -666,9 +661,9 @@ func (c *Collector) collectNetwork(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectUsb(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectUsb(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics
|
var dst []win32_PerfRawData_TeradiciPerf_PCoIPSessionUsbStatistics
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ func isConnectionBrokerServer(logger log.Logger) bool {
|
|||||||
// https://wutils.com/wmi/root/cimv2/win32_perfrawdata_localsessionmanager_terminalservices/
|
// https://wutils.com/wmi/root/cimv2/win32_perfrawdata_localsessionmanager_terminalservices/
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
connectionBrokerEnabled bool
|
connectionBrokerEnabled bool
|
||||||
|
|
||||||
@@ -76,7 +75,7 @@ type Collector struct {
|
|||||||
workingSetPeak *prometheus.Desc
|
workingSetPeak *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -85,8 +84,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,11 +95,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{
|
return []string{
|
||||||
"Terminal Services Session",
|
"Terminal Services Session",
|
||||||
"Remote Desktop Connection Broker Counterset",
|
"Remote Desktop Connection Broker Counterset",
|
||||||
@@ -118,8 +111,10 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
c.connectionBrokerEnabled = isConnectionBrokerServer(c.logger)
|
logger = log.With(logger, "collector", Name)
|
||||||
|
|
||||||
|
c.connectionBrokerEnabled = isConnectionBrokerServer(logger)
|
||||||
|
|
||||||
c.sessionInfo = prometheus.NewDesc(
|
c.sessionInfo = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "session_info"),
|
prometheus.BuildFQName(types.Namespace, Name, "session_info"),
|
||||||
@@ -224,20 +219,21 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectWTSSessions(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting terminal services session infos", "err", err)
|
if err := c.collectWTSSessions(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting terminal services session infos", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectTSSessionCounters(ctx, ch); err != nil {
|
if err := c.collectTSSessionCounters(ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting terminal services session count metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting terminal services session count metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// only collect CollectionBrokerPerformance if host is a Connection Broker
|
// only collect CollectionBrokerPerformance if host is a Connection Broker
|
||||||
if c.connectionBrokerEnabled {
|
if c.connectionBrokerEnabled {
|
||||||
if err := c.collectCollectionBrokerPerformanceCounter(ctx, ch); err != nil {
|
if err := c.collectCollectionBrokerPerformanceCounter(ctx, logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting Connection Broker performance metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting Connection Broker performance metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -263,9 +259,10 @@ type perflibTerminalServicesSession struct {
|
|||||||
WorkingSetPeak float64 `perflib:"Working Set Peak"`
|
WorkingSetPeak float64 `perflib:"Working Set Peak"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectTSSessionCounters(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectTSSessionCounters(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
dst := make([]perflibTerminalServicesSession, 0)
|
dst := make([]perflibTerminalServicesSession, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["Terminal Services Session"], &dst, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["Terminal Services Session"], &dst, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -386,9 +383,10 @@ type perflibRemoteDesktopConnectionBrokerCounterset struct {
|
|||||||
FailedConnections float64 `perflib:"Failed Connections"`
|
FailedConnections float64 `perflib:"Failed Connections"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectCollectionBrokerPerformanceCounter(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectCollectionBrokerPerformanceCounter(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
dst := make([]perflibRemoteDesktopConnectionBrokerCounterset, 0)
|
dst := make([]perflibRemoteDesktopConnectionBrokerCounterset, 0)
|
||||||
err := perflib.UnmarshalObject(ctx.PerfObjects["Remote Desktop Connection Broker Counterset"], &dst, c.logger)
|
err := perflib.UnmarshalObject(ctx.PerfObjects["Remote Desktop Connection Broker Counterset"], &dst, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -420,8 +418,8 @@ func (c *Collector) collectCollectionBrokerPerformanceCounter(ctx *types.ScrapeC
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectWTSSessions(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectWTSSessions(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
sessions, err := wtsapi32.WTSEnumerateSessionsEx(c.hServer, c.logger)
|
sessions, err := wtsapi32.WTSEnumerateSessionsEx(c.hServer, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to enumerate WTS sessions: %w", err)
|
return fmt.Errorf("failed to enumerate WTS sessions: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ var ConfigDefaults = Config{
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
// Only set for testing to get predictable output.
|
// Only set for testing to get predictable output.
|
||||||
mTime *float64
|
mTime *float64
|
||||||
@@ -56,7 +55,7 @@ type Collector struct {
|
|||||||
mTimeDesc *prometheus.Desc
|
mTimeDesc *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -69,8 +68,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,11 +96,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,9 +104,9 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
_ = level.Info(c.logger).
|
_ = level.Info(logger).
|
||||||
Log("msg", "textfile Collector directories: "+strings.Join(c.config.TextFileDirectories, ","))
|
Log("msg", "textfile Collector directories: "+strings.Join(c.config.TextFileDirectories, ","), "collector", Name)
|
||||||
|
|
||||||
c.mTimeDesc = prometheus.NewDesc(
|
c.mTimeDesc = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, "textfile", "mtime_seconds"),
|
prometheus.BuildFQName(types.Namespace, "textfile", "mtime_seconds"),
|
||||||
@@ -150,7 +143,7 @@ func duplicateMetricEntry(metricFamilies []*dto.MetricFamily) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) convertMetricFamily(metricFamily *dto.MetricFamily, ch chan<- prometheus.Metric) {
|
func (c *Collector) convertMetricFamily(logger log.Logger, metricFamily *dto.MetricFamily, ch chan<- prometheus.Metric) {
|
||||||
var valType prometheus.ValueType
|
var valType prometheus.ValueType
|
||||||
var val float64
|
var val float64
|
||||||
|
|
||||||
@@ -166,7 +159,7 @@ func (c *Collector) convertMetricFamily(metricFamily *dto.MetricFamily, ch chan<
|
|||||||
|
|
||||||
for _, metric := range metricFamily.GetMetric() {
|
for _, metric := range metricFamily.GetMetric() {
|
||||||
if metric.TimestampMs != nil {
|
if metric.TimestampMs != nil {
|
||||||
_ = level.Warn(c.logger).Log("msg", fmt.Sprintf("Ignoring unsupported custom timestamp on textfile Collector metric %v", metric))
|
_ = level.Warn(logger).Log("msg", fmt.Sprintf("Ignoring unsupported custom timestamp on textfile Collector metric %v", metric))
|
||||||
}
|
}
|
||||||
|
|
||||||
labels := metric.GetLabel()
|
labels := metric.GetLabel()
|
||||||
@@ -236,7 +229,7 @@ func (c *Collector) convertMetricFamily(metricFamily *dto.MetricFamily, ch chan<
|
|||||||
buckets, values...,
|
buckets, values...,
|
||||||
)
|
)
|
||||||
default:
|
default:
|
||||||
_ = level.Error(c.logger).Log("msg", "unknown metric type for file")
|
_ = level.Error(logger).Log("msg", "unknown metric type for file")
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if metricType == dto.MetricType_GAUGE || metricType == dto.MetricType_COUNTER || metricType == dto.MetricType_UNTYPED {
|
if metricType == dto.MetricType_GAUGE || metricType == dto.MetricType_COUNTER || metricType == dto.MetricType_UNTYPED {
|
||||||
@@ -297,7 +290,8 @@ func (cr carriageReturnFilteringReader) Read(p []byte) (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Collect implements the Collector interface.
|
// Collect implements the Collector interface.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
errorMetric := 0.0
|
errorMetric := 0.0
|
||||||
mTimes := map[string]time.Time{}
|
mTimes := map[string]time.Time{}
|
||||||
|
|
||||||
@@ -310,26 +304,26 @@ func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric)
|
|||||||
for _, directory := range c.config.TextFileDirectories {
|
for _, directory := range c.config.TextFileDirectories {
|
||||||
err := filepath.WalkDir(directory, func(path string, dirEntry os.DirEntry, err error) error {
|
err := filepath.WalkDir(directory, func(path string, dirEntry os.DirEntry, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "Error reading directory: "+path, "err", err)
|
_ = level.Error(logger).Log("msg", "Error reading directory: "+path, "err", err)
|
||||||
errorMetric = 1.0
|
errorMetric = 1.0
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if !dirEntry.IsDir() && strings.HasSuffix(dirEntry.Name(), ".prom") {
|
if !dirEntry.IsDir() && strings.HasSuffix(dirEntry.Name(), ".prom") {
|
||||||
_ = level.Debug(c.logger).Log("msg", "Processing file: "+path)
|
_ = level.Debug(logger).Log("msg", "Processing file: "+path)
|
||||||
families_array, err := scrapeFile(path, c.logger)
|
families_array, err := scrapeFile(path, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", fmt.Sprintf("Error scraping file: %q. Skip File.", path), "err", err)
|
_ = level.Error(logger).Log("msg", fmt.Sprintf("Error scraping file: %q. Skip File.", path), "err", err)
|
||||||
errorMetric = 1.0
|
errorMetric = 1.0
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
fileInfo, err := os.Stat(path)
|
fileInfo, err := os.Stat(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", fmt.Sprintf("Error reading file info: %q. Skip File.", path), "err", err)
|
_ = level.Error(logger).Log("msg", fmt.Sprintf("Error reading file info: %q. Skip File.", path), "err", err)
|
||||||
errorMetric = 1.0
|
errorMetric = 1.0
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if _, hasName := mTimes[fileInfo.Name()]; hasName {
|
if _, hasName := mTimes[fileInfo.Name()]; hasName {
|
||||||
_ = level.Error(c.logger).Log("msg", fmt.Sprintf("Duplicate filename detected: %q. Skip File.", path))
|
_ = level.Error(logger).Log("msg", fmt.Sprintf("Duplicate filename detected: %q. Skip File.", path))
|
||||||
errorMetric = 1.0
|
errorMetric = 1.0
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -339,18 +333,18 @@ func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric)
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil && directory != "" {
|
if err != nil && directory != "" {
|
||||||
_ = level.Error(c.logger).Log("msg", "Error reading textfile Collector directory: "+directory, "err", err)
|
_ = level.Error(logger).Log("msg", "Error reading textfile Collector directory: "+directory, "err", err)
|
||||||
errorMetric = 1.0
|
errorMetric = 1.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If duplicates are detected across *multiple* files, return error.
|
// If duplicates are detected across *multiple* files, return error.
|
||||||
if duplicateMetricEntry(metricFamilies) {
|
if duplicateMetricEntry(metricFamilies) {
|
||||||
_ = level.Error(c.logger).Log("msg", "Duplicate metrics detected across multiple files")
|
_ = level.Error(logger).Log("msg", "Duplicate metrics detected across multiple files")
|
||||||
errorMetric = 1.0
|
errorMetric = 1.0
|
||||||
} else {
|
} else {
|
||||||
for _, mf := range metricFamilies {
|
for _, mf := range metricFamilies {
|
||||||
c.convertMetricFamily(mf, ch)
|
c.convertMetricFamily(logger, mf, ch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,15 +19,16 @@ var baseDir = "../../../tools/textfile-test"
|
|||||||
func TestMultipleDirectories(t *testing.T) {
|
func TestMultipleDirectories(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
logger := log.NewLogfmtLogger(os.Stdout)
|
||||||
testDir := baseDir + "/multiple-dirs"
|
testDir := baseDir + "/multiple-dirs"
|
||||||
testDirs := fmt.Sprintf("%[1]s/dir1,%[1]s/dir2,%[1]s/dir3", testDir)
|
testDirs := fmt.Sprintf("%[1]s/dir1,%[1]s/dir2,%[1]s/dir3", testDir)
|
||||||
|
|
||||||
textFileCollector := textfile.New(log.NewLogfmtLogger(os.Stdout), &textfile.Config{
|
textFileCollector := textfile.New(&textfile.Config{
|
||||||
TextFileDirectories: strings.Split(testDirs, ","),
|
TextFileDirectories: strings.Split(testDirs, ","),
|
||||||
})
|
})
|
||||||
|
|
||||||
collectors := collector.New(map[string]collector.Collector{textfile.Name: textFileCollector})
|
collectors := collector.New(map[string]collector.Collector{textfile.Name: textFileCollector})
|
||||||
require.NoError(t, collectors.Build())
|
require.NoError(t, collectors.Build(logger))
|
||||||
|
|
||||||
scrapeContext, err := collectors.PrepareScrapeContext()
|
scrapeContext, err := collectors.PrepareScrapeContext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -47,7 +48,7 @@ func TestMultipleDirectories(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
err = textFileCollector.Collect(scrapeContext, metrics)
|
err = textFileCollector.Collect(scrapeContext, logger, metrics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error %s", err)
|
t.Errorf("Unexpected error %s", err)
|
||||||
}
|
}
|
||||||
@@ -62,13 +63,14 @@ func TestMultipleDirectories(t *testing.T) {
|
|||||||
func TestDuplicateFileName(t *testing.T) {
|
func TestDuplicateFileName(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
logger := log.NewLogfmtLogger(os.Stdout)
|
||||||
testDir := baseDir + "/duplicate-filename"
|
testDir := baseDir + "/duplicate-filename"
|
||||||
textFileCollector := textfile.New(log.NewLogfmtLogger(os.Stdout), &textfile.Config{
|
textFileCollector := textfile.New(&textfile.Config{
|
||||||
TextFileDirectories: []string{testDir},
|
TextFileDirectories: []string{testDir},
|
||||||
})
|
})
|
||||||
|
|
||||||
collectors := collector.New(map[string]collector.Collector{textfile.Name: textFileCollector})
|
collectors := collector.New(map[string]collector.Collector{textfile.Name: textFileCollector})
|
||||||
require.NoError(t, collectors.Build())
|
require.NoError(t, collectors.Build(logger))
|
||||||
|
|
||||||
scrapeContext, err := collectors.PrepareScrapeContext()
|
scrapeContext, err := collectors.PrepareScrapeContext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -87,7 +89,7 @@ func TestDuplicateFileName(t *testing.T) {
|
|||||||
got += metric.String()
|
got += metric.String()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
err = textFileCollector.Collect(scrapeContext, metrics)
|
err = textFileCollector.Collect(scrapeContext, logger, metrics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error %s", err)
|
t.Errorf("Unexpected error %s", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,14 +22,13 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_Counters_ThermalZoneInformation metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_Counters_ThermalZoneInformation metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
percentPassiveLimit *prometheus.Desc
|
percentPassiveLimit *prometheus.Desc
|
||||||
temperature *prometheus.Desc
|
temperature *prometheus.Desc
|
||||||
throttleReasons *prometheus.Desc
|
throttleReasons *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -38,8 +37,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,11 +48,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +56,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.temperature = prometheus.NewDesc(
|
c.temperature = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "temperature_celsius"),
|
prometheus.BuildFQName(types.Namespace, Name, "temperature_celsius"),
|
||||||
"(Temperature)",
|
"(Temperature)",
|
||||||
@@ -93,9 +86,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting thermalzone metrics", "err", err)
|
if err := c.collect(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting thermalzone metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -111,9 +105,9 @@ type Win32_PerfRawData_Counters_ThermalZoneInformation struct {
|
|||||||
ThrottleReasons uint32
|
ThrottleReasons uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_Counters_ThermalZoneInformation
|
var dst []Win32_PerfRawData_Counters_ThermalZoneInformation
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
// Collector is a Prometheus Collector for Perflib counter metrics.
|
// Collector is a Prometheus Collector for Perflib counter metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
clockFrequencyAdjustmentPPBTotal *prometheus.Desc
|
clockFrequencyAdjustmentPPBTotal *prometheus.Desc
|
||||||
computedTimeOffset *prometheus.Desc
|
computedTimeOffset *prometheus.Desc
|
||||||
@@ -33,7 +32,7 @@ type Collector struct {
|
|||||||
ntpServerOutgoingResponsesTotal *prometheus.Desc
|
ntpServerOutgoingResponsesTotal *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -42,8 +41,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,11 +52,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{"Windows Time Service"}, nil
|
return []string{"Windows Time Service"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +60,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
if winversion.WindowsVersionFloat <= 6.1 {
|
if winversion.WindowsVersionFloat <= 6.1 {
|
||||||
return errors.New("Windows version older than Server 2016 detected. The time collector will not run and should be disabled via CLI flags or configuration file")
|
return errors.New("Windows version older than Server 2016 detected. The time collector will not run and should be disabled via CLI flags or configuration file")
|
||||||
}
|
}
|
||||||
@@ -113,9 +106,10 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collect(ctx, ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting time metrics", "err", err)
|
if err := c.collect(ctx, logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting time metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -131,9 +125,10 @@ type windowsTime struct {
|
|||||||
NTPServerOutgoingResponsesTotal float64 `perflib:"NTP Server Outgoing Responses"`
|
NTPServerOutgoingResponsesTotal float64 `perflib:"NTP Server Outgoing Responses"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
|
logger = log.With(logger, "collector", Name)
|
||||||
var dst []windowsTime // Single-instance class, array is required but will have single entry.
|
var dst []windowsTime // Single-instance class, array is required but will have single entry.
|
||||||
if err := perflib.UnmarshalObject(ctx.PerfObjects["Windows Time Service"], &dst, c.logger); err != nil {
|
if err := perflib.UnmarshalObject(ctx.PerfObjects["Windows Time Service"], &dst, logger); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,29 +8,24 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Collectors struct {
|
type Collectors struct {
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
collectors Map
|
collectors Map
|
||||||
perfCounterQuery string
|
perfCounterQuery string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Map map[string]Collector
|
|
||||||
|
|
||||||
type (
|
type (
|
||||||
Builder func(logger log.Logger) Collector
|
|
||||||
BuilderWithFlags[C Collector] func(*kingpin.Application) C
|
BuilderWithFlags[C Collector] func(*kingpin.Application) C
|
||||||
|
Map map[string]Collector
|
||||||
)
|
)
|
||||||
|
|
||||||
// Collector interface that a collector has to implement.
|
// Collector interface that a collector has to implement.
|
||||||
type Collector interface {
|
type Collector interface {
|
||||||
Build() error
|
Build(logger log.Logger) error
|
||||||
// Close closes the collector
|
// Close closes the collector
|
||||||
Close() error
|
Close() error
|
||||||
// GetName get the name of the collector
|
// GetName get the name of the collector
|
||||||
GetName() string
|
GetName() string
|
||||||
// GetPerfCounter returns the perf counter required by the collector
|
// GetPerfCounter returns the perf counter required by the collector
|
||||||
GetPerfCounter() ([]string, error)
|
GetPerfCounter(logger log.Logger) ([]string, error)
|
||||||
// Collect Get new metrics and expose them via prometheus registry.
|
// Collect Get new metrics and expose them via prometheus registry.
|
||||||
Collect(ctx *types.ScrapeContext, ch chan<- prometheus.Metric) (err error)
|
Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) (err error)
|
||||||
SetLogger(logger log.Logger)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ var ConfigDefaults = Config{}
|
|||||||
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_vmGuestLib_VMem/Win32_PerfRawData_vmGuestLib_VCPU metrics.
|
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_vmGuestLib_VMem/Win32_PerfRawData_vmGuestLib_VCPU metrics.
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
memActive *prometheus.Desc
|
memActive *prometheus.Desc
|
||||||
memBallooned *prometheus.Desc
|
memBallooned *prometheus.Desc
|
||||||
@@ -47,7 +46,7 @@ type Collector struct {
|
|||||||
hostProcessorSpeedMHz *prometheus.Desc
|
hostProcessorSpeedMHz *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -56,8 +55,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,11 +66,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +74,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(_ log.Logger) error {
|
||||||
c.memActive = prometheus.NewDesc(
|
c.memActive = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "mem_active_bytes"),
|
prometheus.BuildFQName(types.Namespace, Name, "mem_active_bytes"),
|
||||||
"(MemActiveMB)",
|
"(MemActiveMB)",
|
||||||
@@ -202,13 +195,14 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectMem(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware memory metrics", "err", err)
|
if err := c.collectMem(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting vmware memory metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectCpu(ch); err != nil {
|
if err := c.collectCpu(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware cpu metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware cpu metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -239,9 +233,9 @@ type Win32_PerfRawData_vmGuestLib_VCPU struct {
|
|||||||
HostProcessorSpeedMHz uint64
|
HostProcessorSpeedMHz uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectMem(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectMem(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_vmGuestLib_VMem
|
var dst []Win32_PerfRawData_vmGuestLib_VMem
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -328,9 +322,9 @@ func mbToBytes(mb uint64) float64 {
|
|||||||
return float64(mb * 1024 * 1024)
|
return float64(mb * 1024 * 1024)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectCpu(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectCpu(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []Win32_PerfRawData_vmGuestLib_VCPU
|
var dst []Win32_PerfRawData_vmGuestLib_VCPU
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ var ConfigDefaults = Config{}
|
|||||||
|
|
||||||
type Collector struct {
|
type Collector struct {
|
||||||
config Config
|
config Config
|
||||||
logger log.Logger
|
|
||||||
|
|
||||||
audioReceivedBytes *prometheus.Desc
|
audioReceivedBytes *prometheus.Desc
|
||||||
audioReceivedPackets *prometheus.Desc
|
audioReceivedPackets *prometheus.Desc
|
||||||
@@ -117,7 +116,7 @@ type Collector struct {
|
|||||||
windowsMediaMMRTransmittedPackets *prometheus.Desc
|
windowsMediaMMRTransmittedPackets *prometheus.Desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger log.Logger, config *Config) *Collector {
|
func New(config *Config) *Collector {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = &ConfigDefaults
|
config = &ConfigDefaults
|
||||||
}
|
}
|
||||||
@@ -126,8 +125,6 @@ func New(logger log.Logger, config *Config) *Collector {
|
|||||||
config: *config,
|
config: *config,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.SetLogger(logger)
|
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,11 +136,7 @@ func (c *Collector) GetName() string {
|
|||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) SetLogger(logger log.Logger) {
|
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
|
||||||
c.logger = log.With(logger, "collector", Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) GetPerfCounter() ([]string, error) {
|
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,8 +144,9 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) Build() error {
|
func (c *Collector) Build(logger log.Logger) error {
|
||||||
_ = level.Warn(c.logger).Log("msg", "vmware_blast collector is deprecated and will be removed in the future.")
|
_ = level.Warn(logger).
|
||||||
|
Log("msg", "vmware_blast collector is deprecated and will be removed in the future.", "collector", Name)
|
||||||
|
|
||||||
c.audioReceivedBytes = prometheus.NewDesc(
|
c.audioReceivedBytes = prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(types.Namespace, Name, "audio_received_bytes_total"),
|
prometheus.BuildFQName(types.Namespace, Name, "audio_received_bytes_total"),
|
||||||
@@ -584,53 +578,54 @@ func (c *Collector) Build() error {
|
|||||||
|
|
||||||
// Collect sends the metric values for each metric
|
// Collect sends the metric values for each metric
|
||||||
// to the provided prometheus Metric channel.
|
// to the provided prometheus Metric channel.
|
||||||
func (c *Collector) Collect(_ *types.ScrapeContext, ch chan<- prometheus.Metric) error {
|
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
if err := c.collectAudio(ch); err != nil {
|
logger = log.With(logger, "collector", Name)
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast audio metrics", "err", err)
|
if err := c.collectAudio(logger, ch); err != nil {
|
||||||
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast audio metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectCdr(ch); err != nil {
|
if err := c.collectCdr(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast CDR metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast CDR metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectClipboard(ch); err != nil {
|
if err := c.collectClipboard(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast clipboard metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast clipboard metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectHtml5Mmr(ch); err != nil {
|
if err := c.collectHtml5Mmr(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast HTML5 MMR metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast HTML5 MMR metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectImaging(ch); err != nil {
|
if err := c.collectImaging(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast imaging metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast imaging metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectRtav(ch); err != nil {
|
if err := c.collectRtav(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast RTAV metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast RTAV metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectSerialPortandScanner(ch); err != nil {
|
if err := c.collectSerialPortandScanner(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast serial port and scanner metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast serial port and scanner metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectSession(ch); err != nil {
|
if err := c.collectSession(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectSkypeforBusinessControl(ch); err != nil {
|
if err := c.collectSkypeforBusinessControl(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast skype for business control metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast skype for business control metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectThinPrint(ch); err != nil {
|
if err := c.collectThinPrint(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast thin print metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast thin print metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectUsb(ch); err != nil {
|
if err := c.collectUsb(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast USB metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast USB metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := c.collectWindowsMediaMmr(ch); err != nil {
|
if err := c.collectWindowsMediaMmr(logger, ch); err != nil {
|
||||||
_ = level.Error(c.logger).Log("msg", "failed collecting vmware blast windows media MMR metrics", "err", err)
|
_ = level.Error(logger).Log("msg", "failed collecting vmware blast windows media MMR metrics", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -741,9 +736,9 @@ type win32_PerfRawData_Counters_VMwareBlastWindowsMediaMMRCounters struct {
|
|||||||
TransmittedPackets uint32
|
TransmittedPackets uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectAudio(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectAudio(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastAudioCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastAudioCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -780,9 +775,9 @@ func (c *Collector) collectAudio(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectCdr(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectCdr(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastCDRCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastCDRCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -819,9 +814,9 @@ func (c *Collector) collectCdr(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectClipboard(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectClipboard(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastClipboardCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastClipboardCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -858,9 +853,9 @@ func (c *Collector) collectClipboard(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectHtml5Mmr(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectHtml5Mmr(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastHTML5MMRcounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastHTML5MMRcounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -897,9 +892,9 @@ func (c *Collector) collectHtml5Mmr(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectImaging(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectImaging(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastImagingCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastImagingCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -984,9 +979,9 @@ func (c *Collector) collectImaging(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectRtav(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectRtav(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastRTAVCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastRTAVCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1023,9 +1018,9 @@ func (c *Collector) collectRtav(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectSerialPortandScanner(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectSerialPortandScanner(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastSerialPortandScannerCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastSerialPortandScannerCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1062,9 +1057,9 @@ func (c *Collector) collectSerialPortandScanner(ch chan<- prometheus.Metric) err
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectSession(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectSession(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastSessionCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastSessionCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1179,9 +1174,9 @@ func (c *Collector) collectSession(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectSkypeforBusinessControl(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectSkypeforBusinessControl(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastSkypeforBusinessControlCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastSkypeforBusinessControlCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1218,9 +1213,9 @@ func (c *Collector) collectSkypeforBusinessControl(ch chan<- prometheus.Metric)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectThinPrint(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectThinPrint(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastThinPrintCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastThinPrintCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1257,9 +1252,9 @@ func (c *Collector) collectThinPrint(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectUsb(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectUsb(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastUSBCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastUSBCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -1296,9 +1291,9 @@ func (c *Collector) collectUsb(ch chan<- prometheus.Metric) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Collector) collectWindowsMediaMmr(ch chan<- prometheus.Metric) error {
|
func (c *Collector) collectWindowsMediaMmr(logger log.Logger, ch chan<- prometheus.Metric) error {
|
||||||
var dst []win32_PerfRawData_Counters_VMwareBlastWindowsMediaMMRCounters
|
var dst []win32_PerfRawData_Counters_VMwareBlastWindowsMediaMMRCounters
|
||||||
q := wmi.QueryAll(&dst, c.logger)
|
q := wmi.QueryAll(&dst, logger)
|
||||||
if err := wmi.Query(q, &dst); err != nil {
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,10 +15,11 @@ import (
|
|||||||
func FuncBenchmarkCollector[C collector.Collector](b *testing.B, name string, collectFunc collector.BuilderWithFlags[C]) {
|
func FuncBenchmarkCollector[C collector.Collector](b *testing.B, name string, collectFunc collector.BuilderWithFlags[C]) {
|
||||||
b.Helper()
|
b.Helper()
|
||||||
|
|
||||||
|
logger := log.NewNopLogger()
|
||||||
|
|
||||||
c := collectFunc(kingpin.CommandLine)
|
c := collectFunc(kingpin.CommandLine)
|
||||||
collectors := collector.New(map[string]collector.Collector{name: c})
|
collectors := collector.New(map[string]collector.Collector{name: c})
|
||||||
require.NoError(b, collectors.Build())
|
require.NoError(b, collectors.Build(logger))
|
||||||
collectors.SetLogger(log.NewNopLogger())
|
|
||||||
|
|
||||||
// Create perflib scrape context.
|
// Create perflib scrape context.
|
||||||
// Some perflib collectors required a correct context,
|
// Some perflib collectors required a correct context,
|
||||||
@@ -34,6 +35,6 @@ func FuncBenchmarkCollector[C collector.Collector](b *testing.B, name string, co
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
require.NoError(b, c.Collect(scrapeContext, metrics))
|
require.NoError(b, c.Collect(scrapeContext, logger, metrics))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user