Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to upstream windows_exporter #3603

Merged
merged 5 commits into from
May 9, 2023
Merged
Show file tree
Hide file tree
Changes from all 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
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