Skip to content

Commit

Permalink
Switch to upstream windows_exporter (#3603)
Browse files Browse the repository at this point in the history
* Integrate new windows_exporter

* go mod tidy

* Add Black and whitelist to initial config

* fix ordering

* fix docs
  • Loading branch information
jkroepke authored and clayton-cornell committed Aug 14, 2023
1 parent 55fd50e commit eb9aa34
Show file tree
Hide file tree
Showing 10 changed files with 554 additions and 304 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,19 @@ Main (unreleased)

- The experimental dynamic configuration feature has been removed in favor of Flow mode. (@mattdurham)
- The `oracledb` integration configuration has removed a redundant field `metrics_scrape_interval`. Use the `scrape_interval` parameter of the integration if a custom scrape interval is required. (@schmikei)
- Upgrade the embedded windows_exporter to the last version. The windows_exporter contains some breaking changes.
- `iss.app_blacklist` is now `iss.app_exclude`
- `iss.app_whitelist` is now `iss.app_include`
- `iss.site_blacklist` is now `iss.site_exclude`
- `iss.site_whitelist` is now `iss.site_include`
- `logical_disk.blacklist` is now `logical_disk.exclude`
- `logical_disk.whitelist` is now `logical_disk.include`
- `network.blacklist` is now `network.exclude`
- `network.whitelist` is now `network.include`
- `process.blacklist` is now `process.exclude`
- `process.whitelist` is now `process.include`
- `smtp.blacklist` is now `smtp.exclude`
- `smtp.whitelist` is now `smtp.include`

### Features
- New Grafana Agent Flow components:
Expand Down
167 changes: 137 additions & 30 deletions component/prometheus/exporter/windows/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,67 @@ import (
// DefaultArguments holds non-zero default options for Arguments when it is
// unmarshaled from YAML.
//
// Some defaults are populated from init functions in the github.com/grafana/agent/pkg/integrations/node_exporter package.
// Some defaults are populated from init functions in the github.com/grafana/agent/pkg/integrations/windows_exporter package.

var DefaultArguments = Arguments{
EnabledCollectors: []string{"cpu", "cs", "logical_disk", "net", "os", "service", "system"},
IIS: IISConfig{AppWhiteList: ".+", SiteWhiteList: ".+"},
TextFile: TextFileConfig{TextFileDirectory: "C:\\Program Files\\windows_exporter\\textfile_inputs"},
SMTP: SMTPConfig{WhiteList: ".+"},
Process: ProcessConfig{WhiteList: ".*"},
Network: NetworkConfig{WhiteList: ".*"},
MSSQL: MSSQLConfig{EnabledClasses: []string{"accessmethods", "availreplica", "bufman", "databases", "dbreplica", "genstats", "locks", "memmgr", "sqlstats", "sqlerrorstransactions"}},
LogicalDisk: LogicalDiskConfig{WhiteList: ".+"},
EnabledCollectors: strings.Split(windows_integration.DefaultConfig.EnabledCollectors, ","),
Dfsr: DfsrConfig{
SourcesEnabled: strings.Split(windows_integration.DefaultConfig.Dfsr.SourcesEnabled, ","),
},
Exchange: ExchangeConfig{
EnabledList: strings.Split(windows_integration.DefaultConfig.Exchange.EnabledList, ","),
},
IIS: IISConfig{
AppBlackList: windows_integration.DefaultConfig.IIS.AppBlackList,
AppWhiteList: windows_integration.DefaultConfig.IIS.AppWhiteList,
SiteBlackList: windows_integration.DefaultConfig.IIS.SiteBlackList,
SiteWhiteList: windows_integration.DefaultConfig.IIS.SiteWhiteList,
AppInclude: windows_integration.DefaultConfig.IIS.AppInclude,
AppExclude: windows_integration.DefaultConfig.IIS.AppExclude,
SiteInclude: windows_integration.DefaultConfig.IIS.SiteInclude,
SiteExclude: windows_integration.DefaultConfig.IIS.SiteExclude,
},
LogicalDisk: LogicalDiskConfig{
BlackList: windows_integration.DefaultConfig.LogicalDisk.BlackList,
WhiteList: windows_integration.DefaultConfig.LogicalDisk.WhiteList,
Include: windows_integration.DefaultConfig.LogicalDisk.Include,
Exclude: windows_integration.DefaultConfig.LogicalDisk.Exclude,
},
MSMQ: MSMQConfig{
Where: windows_integration.DefaultConfig.MSMQ.Where,
},
MSSQL: MSSQLConfig{
EnabledClasses: strings.Split(windows_integration.DefaultConfig.MSSQL.EnabledClasses, ","),
},
Network: NetworkConfig{
BlackList: windows_integration.DefaultConfig.Network.BlackList,
WhiteList: windows_integration.DefaultConfig.Network.WhiteList,
Include: windows_integration.DefaultConfig.Network.Include,
Exclude: windows_integration.DefaultConfig.Network.Exclude,
},
Process: ProcessConfig{
BlackList: windows_integration.DefaultConfig.Process.BlackList,
WhiteList: windows_integration.DefaultConfig.Process.WhiteList,
Include: windows_integration.DefaultConfig.Process.Include,
Exclude: windows_integration.DefaultConfig.Process.Exclude,
},
ScheduledTask: ScheduledTaskConfig{
Include: windows_integration.DefaultConfig.ScheduledTask.Include,
Exclude: windows_integration.DefaultConfig.ScheduledTask.Exclude,
},
Service: ServiceConfig{
UseApi: windows_integration.DefaultConfig.Service.UseApi,
Where: windows_integration.DefaultConfig.Service.Where,
},
SMTP: SMTPConfig{
BlackList: windows_integration.DefaultConfig.SMTP.BlackList,
WhiteList: windows_integration.DefaultConfig.SMTP.WhiteList,
Include: windows_integration.DefaultConfig.SMTP.Include,
Exclude: windows_integration.DefaultConfig.SMTP.Exclude,
},
TextFile: TextFileConfig{
TextFileDirectory: windows_integration.DefaultConfig.TextFile.TextFileDirectory,
},
}

// Arguments is used for controlling for this exporter.
Expand All @@ -27,16 +78,18 @@ type Arguments struct {
EnabledCollectors []string `river:"enabled_collectors,attr,optional"`

// Collector-specific config options
Exchange ExchangeConfig `river:"exchange,block,optional"`
IIS IISConfig `river:"iis,block,optional"`
TextFile TextFileConfig `river:"text_file,block,optional"`
SMTP SMTPConfig `river:"smtp,block,optional"`
Service ServiceConfig `river:"service,block,optional"`
Process ProcessConfig `river:"process,block,optional"`
Network NetworkConfig `river:"network,block,optional"`
MSSQL MSSQLConfig `river:"mssql,block,optional"`
MSMQ MSMQConfig `river:"msmq,block,optional"`
LogicalDisk LogicalDiskConfig `river:"logical_disk,block,optional"`
Dfsr DfsrConfig `river:"dfsr,block,optional"`
Exchange ExchangeConfig `river:"exchange,block,optional"`
IIS IISConfig `river:"iis,block,optional"`
LogicalDisk LogicalDiskConfig `river:"logical_disk,block,optional"`
MSMQ MSMQConfig `river:"msmq,block,optional"`
MSSQL MSSQLConfig `river:"mssql,block,optional"`
Network NetworkConfig `river:"network,block,optional"`
Process ProcessConfig `river:"process,block,optional"`
ScheduledTask ScheduledTaskConfig `river:"scheduled_task,block,optional"`
Service ServiceConfig `river:"service,block,optional"`
SMTP SMTPConfig `river:"smtp,block,optional"`
TextFile TextFileConfig `river:"text_file,block,optional"`
}

// UnmarshalRiver implements River unmarshalling for Config.
Expand All @@ -51,16 +104,30 @@ func (a *Arguments) UnmarshalRiver(f func(interface{}) error) error {
func (a *Arguments) Convert() *windows_integration.Config {
return &windows_integration.Config{
EnabledCollectors: strings.Join(a.EnabledCollectors, ","),
Dfsr: a.Dfsr.Convert(),
Exchange: a.Exchange.Convert(),
IIS: a.IIS.Convert(),
TextFile: a.TextFile.Convert(),
SMTP: a.SMTP.Convert(),
Service: a.Service.Convert(),
Process: a.Process.Convert(),
Network: a.Network.Convert(),
MSSQL: a.MSSQL.Convert(),
MSMQ: a.MSMQ.Convert(),
LogicalDisk: a.LogicalDisk.Convert(),
MSMQ: a.MSMQ.Convert(),
MSSQL: a.MSSQL.Convert(),
Network: a.Network.Convert(),
Process: a.Process.Convert(),
ScheduledTask: a.ScheduledTask.Convert(),
Service: a.Service.Convert(),
SMTP: a.SMTP.Convert(),
TextFile: a.TextFile.Convert(),
}
}

// DfsrConfig handles settings for the windows_exporter Exchange collector
type DfsrConfig struct {
SourcesEnabled []string `river:"sources_enabled,attr,optional"`
}

// Convert converts the component's DfsrConfig to the integration's ExchangeConfig.
func (t DfsrConfig) Convert() windows_integration.DfsrConfig {
return windows_integration.DfsrConfig{
SourcesEnabled: strings.Join(t.SourcesEnabled, ","),
}
}

Expand All @@ -82,6 +149,10 @@ type IISConfig struct {
AppWhiteList string `river:"app_whitelist,attr,optional"`
SiteBlackList string `river:"site_blacklist,attr,optional"`
SiteWhiteList string `river:"site_whitelist,attr,optional"`
AppExclude string `river:"app_exclude,attr,optional"`
AppInclude string `river:"app_include,attr,optional"`
SiteExclude string `river:"site_exclude,attr,optional"`
SiteInclude string `river:"site_include,attr,optional"`
}

// Convert converts the component's IISConfig to the integration's IISConfig.
Expand All @@ -91,6 +162,10 @@ func (t IISConfig) Convert() windows_integration.IISConfig {
AppWhiteList: t.AppWhiteList,
SiteBlackList: t.SiteBlackList,
SiteWhiteList: t.SiteWhiteList,
AppExclude: t.AppExclude,
AppInclude: t.AppInclude,
SiteExclude: t.SiteExclude,
SiteInclude: t.SiteInclude,
}
}

Expand All @@ -110,53 +185,81 @@ func (t TextFileConfig) Convert() windows_integration.TextFileConfig {
type SMTPConfig struct {
BlackList string `river:"blacklist,attr,optional"`
WhiteList string `river:"whitelist,attr,optional"`
Exclude string `river:"exclude,attr,optional"`
Include string `river:"include,attr,optional"`
}

// Convert converts the component's SMTPConfig to the integration's SMTPConfig.
func (t SMTPConfig) Convert() windows_integration.SMTPConfig {
return windows_integration.SMTPConfig{
BlackList: t.BlackList,
WhiteList: t.WhiteList,
Exclude: t.Exclude,
Include: t.Include,
}
}

// ServiceConfig handles settings for the windows_exporter service collector
type ServiceConfig struct {
Where string `river:"where_clause,attr,optional"`
UseApi string `river:"use_api,attr,optional"`
Where string `river:"where_clause,attr,optional"`
}

// Convert converts the component's ServiceConfig to the integration's ServiceConfig.
func (t ServiceConfig) Convert() windows_integration.ServiceConfig {
return windows_integration.ServiceConfig{
Where: t.Where,
UseApi: t.UseApi,
Where: t.Where,
}
}

// ProcessConfig handles settings for the windows_exporter process collector
type ProcessConfig struct {
BlackList string `river:"blacklist,attr,optional"`
WhiteList string `river:"whitelist,attr,optional"`
Exclude string `river:"exclude,attr,optional"`
Include string `river:"include,attr,optional"`
}

// Convert converts the component's ProcessConfig to the integration's ProcessConfig.
func (t ProcessConfig) Convert() windows_integration.ProcessConfig {
return windows_integration.ProcessConfig{
BlackList: t.BlackList,
WhiteList: t.WhiteList,
Exclude: t.Exclude,
Include: t.Include,
}
}

// ScheduledTaskConfig handles settings for the windows_exporter process collector
type ScheduledTaskConfig struct {
Exclude string `river:"exclude,attr,optional"`
Include string `river:"include,attr,optional"`
}

// Convert converts the component's ScheduledTaskConfig to the integration's ScheduledTaskConfig.
func (t ScheduledTaskConfig) Convert() windows_integration.ScheduledTaskConfig {
return windows_integration.ScheduledTaskConfig{
Exclude: t.Exclude,
Include: t.Include,
}
}

// NetworkConfig handles settings for the windows_exporter network collector
type NetworkConfig struct {
BlackList string `river:"blacklist,attr,optional"`
WhiteList string `river:"whitelist,attr,optional"`
Exclude string `river:"exclude,attr,optional"`
Include string `river:"include,attr,optional"`
}

// Convert converts the component's NetworkConfig to the integration's NetworkConfig.
func (t NetworkConfig) Convert() windows_integration.NetworkConfig {
return windows_integration.NetworkConfig{
BlackList: t.BlackList,
WhiteList: t.WhiteList,
Exclude: t.Exclude,
Include: t.Include,
}
}

Expand Down Expand Up @@ -186,14 +289,18 @@ func (t MSMQConfig) Convert() windows_integration.MSMQConfig {

// LogicalDiskConfig handles settings for the windows_exporter logical disk collector
type LogicalDiskConfig struct {
WhiteList string `river:"whitelist,attr,optional"`
BlackList string `river:"blacklist,attr,optional"`
WhiteList string `river:"whitelist,attr,optional"`
Include string `river:"include,attr,optional"`
Exclude string `river:"exclude,attr,optional"`
}

// Convert converts the component's LogicalDiskConfig to the integration's LogicalDiskConfig.
func (t LogicalDiskConfig) Convert() windows_integration.LogicalDiskConfig {
return windows_integration.LogicalDiskConfig{
WhiteList: t.WhiteList,
BlackList: t.BlackList,
WhiteList: t.WhiteList,
Include: t.Include,
Exclude: t.Exclude,
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package windows

import (
"strings"
"testing"

windows_integration "github.com/grafana/agent/pkg/integrations/windows_exporter"
"github.com/grafana/agent/pkg/river"
"github.com/stretchr/testify/require"
)

func TestRiverUnmarshalWithDefaultConfig(t *testing.T) {
var args Arguments
err := river.Unmarshal([]byte(""), &args)
require.NoError(t, err)

require.Equal(t, strings.Split(windows_integration.DefaultConfig.EnabledCollectors, ","), args.EnabledCollectors)
require.Equal(t, strings.Split(windows_integration.DefaultConfig.Dfsr.SourcesEnabled, ","), args.Dfsr.SourcesEnabled)
require.Equal(t, strings.Split(windows_integration.DefaultConfig.Exchange.EnabledList, ","), args.Exchange.EnabledList)
require.Equal(t, windows_integration.DefaultConfig.IIS.AppExclude, args.IIS.AppExclude)
require.Equal(t, windows_integration.DefaultConfig.IIS.AppInclude, args.IIS.AppInclude)
require.Equal(t, windows_integration.DefaultConfig.IIS.SiteExclude, args.IIS.SiteExclude)
require.Equal(t, windows_integration.DefaultConfig.IIS.SiteInclude, args.IIS.SiteInclude)
require.Equal(t, windows_integration.DefaultConfig.LogicalDisk.Exclude, args.LogicalDisk.Exclude)
require.Equal(t, windows_integration.DefaultConfig.LogicalDisk.Include, args.LogicalDisk.Include)
require.Equal(t, windows_integration.DefaultConfig.MSMQ.Where, args.MSMQ.Where)
require.Equal(t, strings.Split(windows_integration.DefaultConfig.MSSQL.EnabledClasses, ","), args.MSSQL.EnabledClasses)
require.Equal(t, windows_integration.DefaultConfig.Network.Exclude, args.Network.Exclude)
require.Equal(t, windows_integration.DefaultConfig.Network.Include, args.Network.Include)
require.Equal(t, windows_integration.DefaultConfig.Process.Exclude, args.Process.Exclude)
require.Equal(t, windows_integration.DefaultConfig.Process.Include, args.Process.Include)
require.Equal(t, windows_integration.DefaultConfig.ScheduledTask.Exclude, args.ScheduledTask.Exclude)
require.Equal(t, windows_integration.DefaultConfig.ScheduledTask.Include, args.ScheduledTask.Include)
require.Equal(t, windows_integration.DefaultConfig.Service.UseApi, args.Service.UseApi)
require.Equal(t, windows_integration.DefaultConfig.Service.Where, args.Service.Where)
require.Equal(t, windows_integration.DefaultConfig.SMTP.Exclude, args.SMTP.Exclude)
require.Equal(t, windows_integration.DefaultConfig.SMTP.Include, args.SMTP.Include)
require.Equal(t, windows_integration.DefaultConfig.TextFile.TextFileDirectory, args.TextFile.TextFileDirectory)
}
Loading

0 comments on commit eb9aa34

Please sign in to comment.