Skip to content
This repository has been archived by the owner on Mar 27, 2024. It is now read-only.

IIS Metrics #972

Merged
merged 18 commits into from
Nov 8, 2022
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions modules/wmi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ the [windows_exporter](https://github.com/prometheus-community/windows_exporter)
The module collects metrics from the following collectors:

- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
Expand Down Expand Up @@ -58,6 +59,19 @@ All metrics have "wmi." prefix.
| cpu_core_dpcs | cpu core | dpcs | dpcs/s |
| cpu_core_cstate | cpu core | c1, c2, c3 | percentage |
| memory_utilization | global | available, used | bytes |
| iis_active_request | IIS | site | requests |
| iis_active_conns | IIS | site | connections |
| iis_isapi_ext_req | IIS | site | requests |
| iis_uptime | IIS | uptime | seconds |
| iis_bandwidth | IIS | site | bytes |
| iis_total_req | IIS | site | requests |
| iis_conns_attemp | IIS | site | requests |
| iis_req_total | IIS | site | requests |
| iis_file_transfer | IIS | site | files |
| iis_extension_req | IIS | site | requests |
| iis_logon | IIS | site | logons |
| iis_errors | IIS | site | errors |
| memory_utilization | global | available, used | KiB |
| memory_page_faults | global | page_faults | events/s |
| memory_swap_utilization | global | available, used | bytes |
| memory_swap_operations | global | read, write | operations/s |
Expand Down
270 changes: 270 additions & 0 deletions modules/wmi/charts.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,19 @@ const (
prioProcessesThreads
prioProcessesHandles

prioIISActiveRequests
prioIISActiveConns
prioIISIsapExtReq
prioIISUptime
prioIISBandwidth
prioIISTotalReq
prioIISConnsAttemp
prioIISReqAttemp
prioIISFileTransfer
prioIISExtensionReq
prioIISLogon
prioIISErrors

prioServiceState
prioServiceStatus

Expand Down Expand Up @@ -598,6 +611,132 @@ var (
}
)

// IIS
var (
IISCharts = module.Charts{
IISActiveConnectionChartsChart.Copy(),
IISActiveRequestChart.Copy(),
IISIsapiExtReqChart.Copy(),
IISUptimeChart.Copy(),
IISBandwidthChart.Copy(),
IISTotalRequestsChart.Copy(),
IISConnsAttempChart.Copy(),
IISRequestAttempChart.Copy(),
IISFileTransferChart.Copy(),
IISExtensionReqChart.Copy(),
IISLogonChart.Copy(),
IISErrorChart.Copy(),
}
IISActiveConnectionChartsChart = module.Chart{
ID: "iis_active_conn",
Title: "Website Active connections",
Units: "connections",
Fam: "IIS",
Ctx: "wmi.iis_active_conn",
Type: module.Stacked,
Priority: prioIISActiveConns,
}
IISActiveRequestChart = module.Chart{
ID: "iis_active_request",
Title: "Website active request per user",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_active_request",
Type: module.Stacked,
Priority: prioIISActiveRequests,
}
IISIsapiExtReqChart = module.Chart{
ID: "iis_isapi_ext_req",
Title: "ISAPI extension requests",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_isapi_ext_req",
Type: module.Stacked,
Priority: prioIISIsapExtReq,
}
IISUptimeChart = module.Chart{
ID: "iis_uptime",
Title: "Website uptime",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_uptime",
Type: module.Stacked,
Priority: prioIISUptime,
}
IISBandwidthChart = module.Chart{
ID: "iis_bandwidth",
Title: "Website bandwidth",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_bandwidith",
Type: module.Stacked,
Priority: prioIISBandwidth,
}
IISTotalRequestsChart = module.Chart{
ID: "iis_total_requests",
Title: "Website total requests",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_total_requests",
Type: module.Stacked,
Priority: prioIISTotalReq,
}
IISConnsAttempChart = module.Chart{
ID: "iis_conns_attemp",
Title: "Website connections attempts",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_conns_attemp",
Type: module.Stacked,
Priority: prioIISConnsAttemp,
}
IISRequestAttempChart = module.Chart{
ID: "iis_req_attemp",
Title: "Website requests attempts",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_req_attemp",
Type: module.Stacked,
Priority: prioIISReqAttemp,
}
IISFileTransferChart = module.Chart{
ID: "iis_file_transfer",
Title: "Website file tansfer",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_file_transfer",
Type: module.Stacked,
Priority: prioIISFileTransfer,
}
IISExtensionReqChart = module.Chart{
ID: "iis_extension_request",
Title: "Website extensions request",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_extension_request",
Type: module.Stacked,
Priority: prioIISExtensionReq,
}
IISLogonChart = module.Chart{
ID: "iis_logon",
Title: "Website logon",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_logon",
Type: module.Stacked,
Priority: prioIISLogon,
}
IISErrorChart = module.Chart{
ID: "iis_errors",
Title: "Website errors",
Units: "requests",
Fam: "IIS",
Ctx: "wmi.iis_errors",
Type: module.Stacked,
Priority: prioIISErrors,
}
)

// Logon
var (
logonCharts = module.Charts{
Expand Down Expand Up @@ -971,6 +1110,137 @@ func (w *WMI) removeThermalZoneCharts(zone string) {
}
}

func (w *WMI) addIISCharts() {
charts := IISCharts.Copy()

if err := w.Charts().Add(*charts...); err != nil {
w.Warning(err)
}
}

func (w *WMI) addIISToCharts(siteID string) {
for _, chart := range *w.Charts() {
var dim0 *module.Dim
var dim1 *module.Dim
switch chart.ID {
case IISActiveRequestChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_active_request_anon", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
id1 := fmt.Sprintf("iis_%s_iis_active_request_non_anon", siteID)
dim1 = &module.Dim{ID: id1, Name: siteID, Algo: module.Incremental}
case IISActiveConnectionChartsChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_active_conn", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISIsapiExtReqChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_isapi_ext", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISUptimeChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_uptime", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISBandwidthChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_bandwidth_recv", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental, Mul: -1}
id1 := fmt.Sprintf("iis_%s_iis_bandwidth_sent", siteID)
dim1 = &module.Dim{ID: id1, Name: siteID, Algo: module.Incremental}
case IISRequestAttempChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_total_req_anon", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
id1 := fmt.Sprintf("iis_%s_iis_total_req", siteID)
dim1 = &module.Dim{ID: id1, Name: siteID, Algo: module.Incremental}
case IISConnsAttempChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_conns_atemp", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISRequestAttempChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_req_total", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISFileTransferChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_file_transfer_recv", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental, Mul: -1}
id1 := fmt.Sprintf("iis_%s_iis_file_transfer_sent", siteID)
dim1 = &module.Dim{ID: id1, Name: siteID, Algo: module.Incremental}
case IISExtensionReqChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_extension_req", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISLogonChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_logon", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
case IISErrorChart.ID:
id0 := fmt.Sprintf("iis_%s_iis_error_423", siteID)
dim0 = &module.Dim{ID: id0, Name: siteID, Algo: module.Incremental}
id1 := fmt.Sprintf("iis_%s_iis_error_404", siteID)
dim1 = &module.Dim{ID: id1, Name: siteID, Algo: module.Incremental}
default:
continue
}

if dim0 != nil {
if err := chart.AddDim(dim0); err != nil {
w.Warning(err)
}
}
if dim1 != nil {
if err := chart.AddDim(dim1); err != nil {
w.Warning(err)
}
}

}
}

func (w *WMI) removeIISCharts(siteID string) {
for _, chart := range *w.Charts() {
var id0 string
var id1 string
switch chart.ID {
case IISActiveRequestChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_active_request_anon", siteID)
id1 = fmt.Sprintf("iis_%s_iis_active_request_non_anon", siteID)
case IISActiveConnectionChartsChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_active_conn", siteID)
case IISIsapiExtReqChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_isapi_ext", siteID)
case IISUptimeChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_uptime", siteID)
case IISBandwidthChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_bandwidth_recv", siteID)
id1 = fmt.Sprintf("iis_%s_iis_bandwidth_sent", siteID)
case IISRequestAttempChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_total_req_anon", siteID)
id1 = fmt.Sprintf("iis_%s_iis_total_req", siteID)
case IISConnsAttempChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_conns_atemp", siteID)
case IISRequestAttempChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_req_total", siteID)
case IISFileTransferChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_file_transfer_recv", siteID)
id1 = fmt.Sprintf("iis_%s_iis_file_transfer_sent", siteID)
case IISExtensionReqChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_extension_req", siteID)
case IISLogonChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_logon", siteID)
case IISErrorChart.ID:
id0 = fmt.Sprintf("iis_%s_iis_error_423", siteID)
id1 = fmt.Sprintf("iis_%s_iis_error_404", siteID)
default:
continue
}

if len(id0) > 0 {
if err := chart.MarkDimRemove(id0, false); err != nil {
w.Warning(err)
continue
}
}
if len(id1) > 0 {
if err := chart.MarkDimRemove(id1, false); err != nil {
w.Warning(err)
continue
}
}
chart.MarkNotCreated()
}
}

func (w *WMI) addProcessesCharts() {
charts := processesCharts.Copy()

Expand Down
4 changes: 4 additions & 0 deletions modules/wmi/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const (
collectorLogon = "logon"
collectorThermalZone = "thermalzone"
collectorTCP = "tcp"
collectorIIS = "iis"
collectorProcess = "process"
collectorService = "service"
)
Expand All @@ -41,6 +42,7 @@ var fastCollectors = map[string]bool{
// slow collectors with gauge (absolute) metrics only
var slowCollectors = map[string]bool{
collectorLogon: true,
collectorIIS: true,
collectorThermalZone: true,
collectorService: true,
}
Expand Down Expand Up @@ -155,6 +157,8 @@ func (w *WMI) collectMetrics(mx map[string]int64, prom prometheus.Prometheus) er
w.collectProcess(mx, pms)
case collectorService:
w.collectService(mx, pms)
case collectorIIS:
w.collectIIS(mx, pms)
}
}

Expand Down
Loading