mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-10 04:26:35 +00:00
chore: Remove registry based perfdata collector (#1742)
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
516
internal/collector/iis/iis_web_service.go
Normal file
516
internal/collector/iis/iis_web_service.go
Normal file
@@ -0,0 +1,516 @@
|
||||
//go:build windows
|
||||
|
||||
package iis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
"github.com/prometheus-community/windows_exporter/internal/types"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
type collectorWebService struct {
|
||||
perfDataCollectorWebService *perfdata.Collector
|
||||
|
||||
currentAnonymousUsers *prometheus.Desc
|
||||
currentBlockedAsyncIORequests *prometheus.Desc
|
||||
currentCGIRequests *prometheus.Desc
|
||||
currentConnections *prometheus.Desc
|
||||
currentISAPIExtensionRequests *prometheus.Desc
|
||||
currentNonAnonymousUsers *prometheus.Desc
|
||||
serviceUptime *prometheus.Desc
|
||||
totalBytesReceived *prometheus.Desc
|
||||
totalBytesSent *prometheus.Desc
|
||||
totalAnonymousUsers *prometheus.Desc
|
||||
totalBlockedAsyncIORequests *prometheus.Desc
|
||||
totalCGIRequests *prometheus.Desc
|
||||
totalConnectionAttemptsAllInstances *prometheus.Desc
|
||||
totalRequests *prometheus.Desc
|
||||
totalFilesReceived *prometheus.Desc
|
||||
totalFilesSent *prometheus.Desc
|
||||
totalISAPIExtensionRequests *prometheus.Desc
|
||||
totalLockedErrors *prometheus.Desc
|
||||
totalLogonAttempts *prometheus.Desc
|
||||
totalNonAnonymousUsers *prometheus.Desc
|
||||
totalNotFoundErrors *prometheus.Desc
|
||||
totalRejectedAsyncIORequests *prometheus.Desc
|
||||
}
|
||||
|
||||
const (
|
||||
CurrentAnonymousUsers = "Current Anonymous Users"
|
||||
CurrentBlockedAsyncIORequests = "Current Blocked Async I/O Requests"
|
||||
CurrentCGIRequests = "Current CGI Requests"
|
||||
CurrentConnections = "Current Connections"
|
||||
CurrentISAPIExtensionRequests = "Current ISAPI Extension Requests"
|
||||
CurrentNonAnonymousUsers = "Current NonAnonymous Users"
|
||||
ServiceUptime = "Service Uptime"
|
||||
TotalBytesReceived = "Total Bytes Received"
|
||||
TotalBytesSent = "Total Bytes Sent"
|
||||
TotalAnonymousUsers = "Total Anonymous Users"
|
||||
TotalBlockedAsyncIORequests = "Total Blocked Async I/O Requests"
|
||||
TotalCGIRequests = "Total CGI Requests"
|
||||
TotalConnectionAttemptsAllInstances = "Total Connection Attempts (all instances)"
|
||||
TotalFilesReceived = "Total Files Received"
|
||||
TotalFilesSent = "Total Files Sent"
|
||||
TotalISAPIExtensionRequests = "Total ISAPI Extension Requests"
|
||||
TotalLockedErrors = "Total Locked Errors"
|
||||
TotalLogonAttempts = "Total Logon Attempts"
|
||||
TotalNonAnonymousUsers = "Total NonAnonymous Users"
|
||||
TotalNotFoundErrors = "Total Not Found Errors"
|
||||
TotalRejectedAsyncIORequests = "Total Rejected Async I/O Requests"
|
||||
TotalCopyRequests = "Total Copy Requests"
|
||||
TotalDeleteRequests = "Total Delete Requests"
|
||||
TotalGetRequests = "Total Get Requests"
|
||||
TotalHeadRequests = "Total Head Requests"
|
||||
TotalLockRequests = "Total Lock Requests"
|
||||
TotalMkcolRequests = "Total Mkcol Requests"
|
||||
TotalMoveRequests = "Total Move Requests"
|
||||
TotalOptionsRequests = "Total Options Requests"
|
||||
TotalOtherRequests = "Total Other Request Methods"
|
||||
TotalPostRequests = "Total Post Requests"
|
||||
TotalPropfindRequests = "Total Propfind Requests"
|
||||
TotalProppatchRequests = "Total Proppatch Requests"
|
||||
TotalPutRequests = "Total Put Requests"
|
||||
TotalSearchRequests = "Total Search Requests"
|
||||
TotalTraceRequests = "Total Trace Requests"
|
||||
TotalUnlockRequests = "Total Unlock Requests"
|
||||
)
|
||||
|
||||
func (c *Collector) buildWebService() error {
|
||||
var err error
|
||||
|
||||
c.perfDataCollectorWebService, err = perfdata.NewCollector("Web Service", perfdata.InstanceAll, []string{
|
||||
CurrentAnonymousUsers,
|
||||
CurrentBlockedAsyncIORequests,
|
||||
CurrentCGIRequests,
|
||||
CurrentConnections,
|
||||
CurrentISAPIExtensionRequests,
|
||||
CurrentNonAnonymousUsers,
|
||||
ServiceUptime,
|
||||
TotalBytesReceived,
|
||||
TotalBytesSent,
|
||||
TotalAnonymousUsers,
|
||||
TotalBlockedAsyncIORequests,
|
||||
TotalCGIRequests,
|
||||
TotalConnectionAttemptsAllInstances,
|
||||
TotalFilesReceived,
|
||||
TotalFilesSent,
|
||||
TotalISAPIExtensionRequests,
|
||||
TotalLockedErrors,
|
||||
TotalLogonAttempts,
|
||||
TotalNonAnonymousUsers,
|
||||
TotalNotFoundErrors,
|
||||
TotalRejectedAsyncIORequests,
|
||||
TotalCopyRequests,
|
||||
TotalDeleteRequests,
|
||||
TotalGetRequests,
|
||||
TotalHeadRequests,
|
||||
TotalLockRequests,
|
||||
TotalMkcolRequests,
|
||||
TotalMoveRequests,
|
||||
TotalOptionsRequests,
|
||||
TotalOtherRequests,
|
||||
TotalPostRequests,
|
||||
TotalPropfindRequests,
|
||||
TotalProppatchRequests,
|
||||
TotalPutRequests,
|
||||
TotalSearchRequests,
|
||||
TotalTraceRequests,
|
||||
TotalUnlockRequests,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Web Service collector: %w", err)
|
||||
}
|
||||
|
||||
c.currentAnonymousUsers = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "current_anonymous_users"),
|
||||
"Number of users who currently have an anonymous connection using the Web service (WebService.CurrentAnonymousUsers)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.currentBlockedAsyncIORequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "current_blocked_async_io_requests"),
|
||||
"Current requests temporarily blocked due to bandwidth throttling settings (WebService.CurrentBlockedAsyncIORequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.currentCGIRequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "current_cgi_requests"),
|
||||
"Current number of CGI requests being simultaneously processed by the Web service (WebService.CurrentCGIRequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.currentConnections = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "current_connections"),
|
||||
"Current number of connections established with the Web service (WebService.CurrentConnections)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.currentISAPIExtensionRequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "current_isapi_extension_requests"),
|
||||
"Current number of ISAPI requests being simultaneously processed by the Web service (WebService.CurrentISAPIExtensionRequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.currentNonAnonymousUsers = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "current_non_anonymous_users"),
|
||||
"Number of users who currently have a non-anonymous connection using the Web service (WebService.CurrentNonAnonymousUsers)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.serviceUptime = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "service_uptime"),
|
||||
"Number of seconds the WebService is up (WebService.ServiceUptime)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalBytesReceived = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "received_bytes_total"),
|
||||
"Number of data bytes that have been received by the Web service (WebService.TotalBytesReceived)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalBytesSent = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "sent_bytes_total"),
|
||||
"Number of data bytes that have been sent by the Web service (WebService.TotalBytesSent)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalAnonymousUsers = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "anonymous_users_total"),
|
||||
"Total number of users who established an anonymous connection with the Web service (WebService.TotalAnonymousUsers)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalBlockedAsyncIORequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "blocked_async_io_requests_total"),
|
||||
"Total requests temporarily blocked due to bandwidth throttling settings (WebService.TotalBlockedAsyncIORequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalCGIRequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "cgi_requests_total"),
|
||||
"Total CGI requests is the total number of CGI requests (WebService.TotalCGIRequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalConnectionAttemptsAllInstances = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "connection_attempts_all_instances_total"),
|
||||
"Number of connections that have been attempted using the Web service (WebService.TotalConnectionAttemptsAllInstances)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalRequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "requests_total"),
|
||||
"Number of HTTP requests (WebService.TotalRequests)",
|
||||
[]string{"site", "method"},
|
||||
nil,
|
||||
)
|
||||
c.totalFilesReceived = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "files_received_total"),
|
||||
"Number of files received by the Web service (WebService.TotalFilesReceived)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalFilesSent = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "files_sent_total"),
|
||||
"Number of files sent by the Web service (WebService.TotalFilesSent)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalISAPIExtensionRequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "ipapi_extension_requests_total"),
|
||||
"ISAPI Extension Requests received (WebService.TotalISAPIExtensionRequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalLockedErrors = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "locked_errors_total"),
|
||||
"Number of requests that couldn't be satisfied by the server because the requested resource was locked (WebService.TotalLockedErrors)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalLogonAttempts = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "logon_attempts_total"),
|
||||
"Number of logons attempts to the Web Service (WebService.TotalLogonAttempts)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalNonAnonymousUsers = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "non_anonymous_users_total"),
|
||||
"Number of users who established a non-anonymous connection with the Web service (WebService.TotalNonAnonymousUsers)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalNotFoundErrors = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "not_found_errors_total"),
|
||||
"Number of requests that couldn't be satisfied by the server because the requested document could not be found (WebService.TotalNotFoundErrors)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
c.totalRejectedAsyncIORequests = prometheus.NewDesc(
|
||||
prometheus.BuildFQName(types.Namespace, Name, "rejected_async_io_requests_total"),
|
||||
"Requests rejected due to bandwidth throttling settings (WebService.TotalRejectedAsyncIORequests)",
|
||||
[]string{"site"},
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Collector) collectWebService(ch chan<- prometheus.Metric) error {
|
||||
perfData, err := c.perfDataCollectorWebService.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect Web Service metrics: %w", err)
|
||||
}
|
||||
|
||||
deduplicateIISNames(perfData)
|
||||
|
||||
for name, app := range perfData {
|
||||
if c.config.SiteExclude.MatchString(name) || !c.config.SiteInclude.MatchString(name) {
|
||||
continue
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentAnonymousUsers,
|
||||
prometheus.GaugeValue,
|
||||
app[CurrentAnonymousUsers].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentBlockedAsyncIORequests,
|
||||
prometheus.GaugeValue,
|
||||
app[CurrentBlockedAsyncIORequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentCGIRequests,
|
||||
prometheus.GaugeValue,
|
||||
app[CurrentCGIRequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentConnections,
|
||||
prometheus.GaugeValue,
|
||||
app[CurrentConnections].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentISAPIExtensionRequests,
|
||||
prometheus.GaugeValue,
|
||||
app[CurrentISAPIExtensionRequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentNonAnonymousUsers,
|
||||
prometheus.GaugeValue,
|
||||
app[CurrentNonAnonymousUsers].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.serviceUptime,
|
||||
prometheus.GaugeValue,
|
||||
app[ServiceUptime].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalBytesReceived,
|
||||
prometheus.CounterValue,
|
||||
app[TotalBytesReceived].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalBytesSent,
|
||||
prometheus.CounterValue,
|
||||
app[TotalBytesSent].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalAnonymousUsers,
|
||||
prometheus.CounterValue,
|
||||
app[TotalAnonymousUsers].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalBlockedAsyncIORequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalBlockedAsyncIORequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalCGIRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalCGIRequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalConnectionAttemptsAllInstances,
|
||||
prometheus.CounterValue,
|
||||
app[TotalConnectionAttemptsAllInstances].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalFilesReceived,
|
||||
prometheus.CounterValue,
|
||||
app[TotalFilesReceived].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalFilesSent,
|
||||
prometheus.CounterValue,
|
||||
app[TotalFilesSent].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalISAPIExtensionRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalISAPIExtensionRequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalLockedErrors,
|
||||
prometheus.CounterValue,
|
||||
app[TotalLockedErrors].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalLogonAttempts,
|
||||
prometheus.CounterValue,
|
||||
app[TotalLogonAttempts].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalNonAnonymousUsers,
|
||||
prometheus.CounterValue,
|
||||
app[TotalNonAnonymousUsers].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalNotFoundErrors,
|
||||
prometheus.CounterValue,
|
||||
app[TotalNotFoundErrors].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRejectedAsyncIORequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalRejectedAsyncIORequests].FirstValue,
|
||||
name,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalOtherRequests].FirstValue,
|
||||
name,
|
||||
"other",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalCopyRequests].FirstValue,
|
||||
name,
|
||||
"COPY",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalDeleteRequests].FirstValue,
|
||||
name,
|
||||
"DELETE",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalGetRequests].FirstValue,
|
||||
name,
|
||||
"GET",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalHeadRequests].FirstValue,
|
||||
name,
|
||||
"HEAD",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalLockRequests].FirstValue,
|
||||
name,
|
||||
"LOCK",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalMkcolRequests].FirstValue,
|
||||
name,
|
||||
"MKCOL",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalMoveRequests].FirstValue,
|
||||
name,
|
||||
"MOVE",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalOptionsRequests].FirstValue,
|
||||
name,
|
||||
"OPTIONS",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalPostRequests].FirstValue,
|
||||
name,
|
||||
"POST",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalPropfindRequests].FirstValue,
|
||||
name,
|
||||
"PROPFIND",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalProppatchRequests].FirstValue,
|
||||
name,
|
||||
"PROPPATCH",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalPutRequests].FirstValue,
|
||||
name,
|
||||
"PUT",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalSearchRequests].FirstValue,
|
||||
name,
|
||||
"SEARCH",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalTraceRequests].FirstValue,
|
||||
name,
|
||||
"TRACE",
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.totalRequests,
|
||||
prometheus.CounterValue,
|
||||
app[TotalUnlockRequests].FirstValue,
|
||||
name,
|
||||
"UNLOCK",
|
||||
)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user