Skip to content
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
35 changes: 35 additions & 0 deletions sdk/agent/config/config_helpers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package config

const (
KeyDelimiter = "_"

// viper keys used in config
FeaturesKey = "features"
FeatureRegistration = FeaturesKey + KeyDelimiter + "registration"
FeatureNginxConfig = FeaturesKey + KeyDelimiter + "nginx-config"
FeatureNginxConfigAsync = FeaturesKey + KeyDelimiter + "nginx-config-async"
FeatureNginxSSLConfig = FeaturesKey + KeyDelimiter + "nginx-ssl-config"
FeatureNginxCounting = FeaturesKey + KeyDelimiter + "nginx-counting"
FeatureMetrics = FeaturesKey + KeyDelimiter + "metrics"
FeatureMetricsThrottle = FeaturesKey + KeyDelimiter + "metrics-throttle"
FeatureDataPlaneStatus = FeaturesKey + KeyDelimiter + "dataplane-status"
FeatureProcessWatcher = FeaturesKey + KeyDelimiter + "process-watcher"
FeatureFileWatcher = FeaturesKey + KeyDelimiter + "file-watcher"
FeatureActivityEvents = FeaturesKey + KeyDelimiter + "activity-events"
)

func GetDefaultFeatures() []string {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the server needs to know the configured set of features that the agent supports. I think we have the following options:

  1. agent sends to NMS in AgentMeta
  2. agent sends to NMS in separate AgentConfigRequest

return []string{
FeatureRegistration,
FeatureNginxConfig,
FeatureNginxSSLConfig,
FeatureNginxCounting,
FeatureNginxConfigAsync,
FeatureMetrics,
FeatureMetricsThrottle,
FeatureDataPlaneStatus,
FeatureProcessWatcher,
FeatureFileWatcher,
FeatureActivityEvents,
}
}
197 changes: 129 additions & 68 deletions sdk/proto/agent.pb.go

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions sdk/proto/agent.proto
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,5 @@ message AgentMeta {
string instance_group = 5 [(gogoproto.jsontag) = "instance_group"];
google.protobuf.Timestamp updated = 6 [(gogoproto.jsontag) = "updated"];
string system_uid = 7 [(gogoproto.jsontag) = "system_uid"];
AgentDetails agent_details = 8 [(gogoproto.jsontag) = "agent_details"];
}
9 changes: 5 additions & 4 deletions src/core/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"
"time"

agent_config "github.com/nginx/agent/sdk/v2/agent/config"
advanced_metrics "github.com/nginx/agent/v2/src/extensions/advanced-metrics/pkg/advanced-metrics"
"github.com/spf13/cobra"
"github.com/spf13/viper"
Expand Down Expand Up @@ -40,7 +41,7 @@ const (
)

var (
Viper = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter))
Viper = viper.NewWithOptions(viper.KeyDelimiter(agent_config.KeyDelimiter))
)

func SetVersion(version, commit string) {
Expand Down Expand Up @@ -177,7 +178,7 @@ func GetConfig(clientId string) (*Config, error) {
Nginx: getNginx(),
Dataplane: getDataplane(),
AgentMetrics: getMetrics(),
Features: Viper.GetStringSlice(FeaturesKey),
Features: Viper.GetStringSlice(agent_config.FeaturesKey),
Tags: Viper.GetStringSlice(TagsKey),
Updated: filePathUTime(Viper.GetString(DynamicConfigPathKey)),
AllowedDirectoriesMap: map[string]struct{}{},
Expand Down Expand Up @@ -231,8 +232,8 @@ func UpdateAgentConfig(systemId string, updateTags []string, updateFeatures []st
sort.Strings(config.Features)
synchronizedFeatures := reflect.DeepEqual(updateFeatures, config.Features)

Viper.Set(FeaturesKey, updateFeatures)
config.Features = Viper.GetStringSlice(FeaturesKey)
Viper.Set(agent_config.FeaturesKey, updateFeatures)
config.Features = Viper.GetStringSlice(agent_config.FeaturesKey)

// If the features are already synchronized there is no need to overwrite
if synchronizedTags && synchronizedFeatures {
Expand Down
6 changes: 4 additions & 2 deletions src/core/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

agent_config "github.com/nginx/agent/sdk/v2/agent/config"

sysutils "github.com/nginx/agent/v2/test/utils/system"
)

Expand Down Expand Up @@ -455,7 +457,7 @@ func TestUpdateAgentConfig(t *testing.T) {
}

func setEnvVariable(t *testing.T, name string, value string) {
key := strings.ToUpper(EnvPrefix + KeyDelimiter + name)
key := strings.ToUpper(EnvPrefix + agent_config.KeyDelimiter + name)
err := os.Setenv(key, value)
require.NoError(t, err)
}
Expand All @@ -464,7 +466,7 @@ func cleanEnv(t *testing.T, confFileName, dynamicConfFileAbsPath string) {
os.Clearenv()
ROOT_COMMAND.ResetFlags()
ROOT_COMMAND.ResetCommands()
Viper = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter))
Viper = viper.NewWithOptions(viper.KeyDelimiter(agent_config.KeyDelimiter))
SetDefaults()
RegisterFlags()

Expand Down
112 changes: 44 additions & 68 deletions src/core/config/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"time"

"github.com/google/uuid"

agent_config "github.com/nginx/agent/sdk/v2/agent/config"
advanced_metrics "github.com/nginx/agent/v2/src/extensions/advanced-metrics/pkg/advanced-metrics"
log "github.com/sirupsen/logrus"
)
Expand Down Expand Up @@ -78,6 +80,7 @@ var (
PriorityTableMaxSize: 1000,
},
},
Features: agent_config.GetDefaultFeatures(),
NAPMonitoring: NAPMonitoring{
ProcessorBufferSize: 50000,
CollectorBufferSize: 50000,
Expand All @@ -86,18 +89,6 @@ var (
ReportInterval: time.Minute,
ReportCount: 400,
},
Features: []string{
FeatureRegistration,
FeatureNginxConfig,
FeatureNginxSSLConfig,
FeatureNginxCounting,
FeatureMetrics,
FeatureMetricsThrottle,
FeatureDataPlaneStatus,
FeatureProcessWatcher,
FeatureFileWatcher,
FeatureActivityEvents,
},
}
AllowedDirectoriesMap map[string]struct{}
)
Expand All @@ -107,7 +98,6 @@ const (
DynamicConfigFileAbsPath = "/etc/nginx-agent/agent-dynamic.conf"
ConfigFileName = "nginx-agent.conf"
ConfigFileType = "yaml"
KeyDelimiter = "_"
EnvPrefix = "nms"
ConfigPathKey = "path"
DynamicConfigPathKey = "dynamic-config-path"
Expand All @@ -122,91 +112,77 @@ const (
// viper keys used in config
LogKey = "log"

LogLevel = LogKey + KeyDelimiter + "level"
LogPath = LogKey + KeyDelimiter + "path"
LogLevel = LogKey + agent_config.KeyDelimiter + "level"
LogPath = LogKey + agent_config.KeyDelimiter + "path"

// viper keys used in config
ServerKey = "server"

ServerHost = ServerKey + KeyDelimiter + "host"
ServerGrpcport = ServerKey + KeyDelimiter + "grpcport"
ServerToken = ServerKey + KeyDelimiter + "token"
ServerMetrics = ServerKey + KeyDelimiter + "metrics"
ServerCommand = ServerKey + KeyDelimiter + "command"
ServerHost = ServerKey + agent_config.KeyDelimiter + "host"
ServerGrpcport = ServerKey + agent_config.KeyDelimiter + "grpcport"
ServerToken = ServerKey + agent_config.KeyDelimiter + "token"
ServerMetrics = ServerKey + agent_config.KeyDelimiter + "metrics"
ServerCommand = ServerKey + agent_config.KeyDelimiter + "command"

// viper keys used in config
TlsKey = "tls"

TlsEnable = TlsKey + KeyDelimiter + "enable"
TlsCert = TlsKey + KeyDelimiter + "cert"
TlsPrivateKey = TlsKey + KeyDelimiter + "key"
TlsCa = TlsKey + KeyDelimiter + "ca"
TlsSkipVerify = TlsKey + KeyDelimiter + "skip_verify"
TlsEnable = TlsKey + agent_config.KeyDelimiter + "enable"
TlsCert = TlsKey + agent_config.KeyDelimiter + "cert"
TlsPrivateKey = TlsKey + agent_config.KeyDelimiter + "key"
TlsCa = TlsKey + agent_config.KeyDelimiter + "ca"
TlsSkipVerify = TlsKey + agent_config.KeyDelimiter + "skip_verify"

// viper keys used in config
NginxKey = "nginx"

NginxExcludeLogs = NginxKey + KeyDelimiter + "exclude_logs"
NginxDebug = NginxKey + KeyDelimiter + "debug"
NginxCountingSocket = NginxKey + KeyDelimiter + "socket"
NginxClientVersion = NginxKey + KeyDelimiter + "client_version"
NginxExcludeLogs = NginxKey + agent_config.KeyDelimiter + "exclude_logs"
NginxDebug = NginxKey + agent_config.KeyDelimiter + "debug"
NginxCountingSocket = NginxKey + agent_config.KeyDelimiter + "socket"
NginxClientVersion = NginxKey + agent_config.KeyDelimiter + "client_version"

// viper keys used in config
DataplaneKey = "dataplane"

DataplaneEventsEnable = DataplaneKey + KeyDelimiter + "events_enable"
DataplaneSyncEnable = DataplaneKey + KeyDelimiter + "sync_enable"
DataplaneStatusPoll = DataplaneKey + KeyDelimiter + "status_poll_interval"
DataplaneStatusReportInterval = DataplaneKey + KeyDelimiter + "report_interval"
DataplaneEventsEnable = DataplaneKey + agent_config.KeyDelimiter + "events_enable"
DataplaneSyncEnable = DataplaneKey + agent_config.KeyDelimiter + "sync_enable"
DataplaneStatusPoll = DataplaneKey + agent_config.KeyDelimiter + "status_poll_interval"
DataplaneStatusReportInterval = DataplaneKey + agent_config.KeyDelimiter + "report_interval"

// viper keys used in config
MetricsKey = "metrics"

MetricsBulkSize = MetricsKey + KeyDelimiter + "bulk_size"
MetricsReportInterval = MetricsKey + KeyDelimiter + "report_interval"
MetricsCollectionInterval = MetricsKey + KeyDelimiter + "collection_interval"
MetricsMode = MetricsKey + KeyDelimiter + "mode"
MetricsBulkSize = MetricsKey + agent_config.KeyDelimiter + "bulk_size"
MetricsReportInterval = MetricsKey + agent_config.KeyDelimiter + "report_interval"
MetricsCollectionInterval = MetricsKey + agent_config.KeyDelimiter + "collection_interval"
MetricsMode = MetricsKey + agent_config.KeyDelimiter + "mode"

// viper keys used in config
AdvancedMetricsKey = "advanced_metrics"

AdvancedMetricsSocketPath = AdvancedMetricsKey + KeyDelimiter + "socket_path"
AdvancedMetricsAggregationPeriod = AdvancedMetricsKey + KeyDelimiter + "aggregation_period"
AdvancedMetricsPublishPeriod = AdvancedMetricsKey + KeyDelimiter + "publishing_period"
AdvancedMetricsTableSizesLimits = AdvancedMetricsKey + KeyDelimiter + "table_sizes_limits"
AdvancedMetricsTableSizesLimitsSTMS = AdvancedMetricsTableSizesLimits + KeyDelimiter + "staging_table_max_size"
AdvancedMetricsTableSizesLimitsSTT = AdvancedMetricsTableSizesLimits + KeyDelimiter + "staging_table_threshold"
AdvancedMetricsTableSizesLimitsPTMS = AdvancedMetricsTableSizesLimits + KeyDelimiter + "priority_table_max_size"
AdvancedMetricsTableSizesLimitsPTT = AdvancedMetricsTableSizesLimits + KeyDelimiter + "priority_table_threshold"
AdvancedMetricsSocketPath = AdvancedMetricsKey + agent_config.KeyDelimiter + "socket_path"
AdvancedMetricsAggregationPeriod = AdvancedMetricsKey + agent_config.KeyDelimiter + "aggregation_period"
AdvancedMetricsPublishPeriod = AdvancedMetricsKey + agent_config.KeyDelimiter + "publishing_period"
AdvancedMetricsTableSizesLimits = AdvancedMetricsKey + agent_config.KeyDelimiter + "table_sizes_limits"
AdvancedMetricsTableSizesLimitsSTMS = AdvancedMetricsTableSizesLimits + agent_config.KeyDelimiter + "staging_table_max_size"
AdvancedMetricsTableSizesLimitsSTT = AdvancedMetricsTableSizesLimits + agent_config.KeyDelimiter + "staging_table_threshold"
AdvancedMetricsTableSizesLimitsPTMS = AdvancedMetricsTableSizesLimits + agent_config.KeyDelimiter + "priority_table_max_size"
AdvancedMetricsTableSizesLimitsPTT = AdvancedMetricsTableSizesLimits + agent_config.KeyDelimiter + "priority_table_threshold"

// viper keys used in config
NginxAppProtectKey = "nginx_app_protect"

NginxAppProtectReportInterval = NginxAppProtectKey + KeyDelimiter + "report_interval"
NginxAppProtectReportInterval = NginxAppProtectKey + agent_config.KeyDelimiter + "report_interval"

// viper keys used in config
NAPMonitoringKey = "nap_monitoring"

NAPMonitoringCollectorBufferSize = NAPMonitoringKey + KeyDelimiter + "collector_buffer_size"
NAPMonitoringProcessorBufferSize = NAPMonitoringKey + KeyDelimiter + "processor_buffer_size"
NAPMonitoringSyslogIP = NAPMonitoringKey + KeyDelimiter + "syslog_ip"
NAPMonitoringSyslogPort = NAPMonitoringKey + KeyDelimiter + "syslog_port"
NAPMonitoringReportInterval = NAPMonitoringKey + KeyDelimiter + "report_interval"
NAPMonitoringReportCount = NAPMonitoringKey + KeyDelimiter + "report_count"

// viper keys used in config
FeaturesKey = "features"

FeatureRegistration = FeaturesKey + KeyDelimiter + "registration"
FeatureNginxConfig = FeaturesKey + KeyDelimiter + "nginx-config"
FeatureNginxSSLConfig = FeaturesKey + KeyDelimiter + "nginx-ssl-config"
FeatureNginxCounting = FeaturesKey + KeyDelimiter + "nginx-counting"
FeatureMetrics = FeaturesKey + KeyDelimiter + "metrics"
FeatureMetricsThrottle = FeaturesKey + KeyDelimiter + "metrics-throttle"
FeatureDataPlaneStatus = FeaturesKey + KeyDelimiter + "dataplane-status"
FeatureProcessWatcher = FeaturesKey + KeyDelimiter + "process-watcher"
FeatureFileWatcher = FeaturesKey + KeyDelimiter + "file-watcher"
FeatureActivityEvents = FeaturesKey + KeyDelimiter + "activity-events"
NAPMonitoringCollectorBufferSize = NAPMonitoringKey + agent_config.KeyDelimiter + "collector_buffer_size"
NAPMonitoringProcessorBufferSize = NAPMonitoringKey + agent_config.KeyDelimiter + "processor_buffer_size"
NAPMonitoringSyslogIP = NAPMonitoringKey + agent_config.KeyDelimiter + "syslog_ip"
NAPMonitoringSyslogPort = NAPMonitoringKey + agent_config.KeyDelimiter + "syslog_port"
NAPMonitoringReportInterval = NAPMonitoringKey + agent_config.KeyDelimiter + "report_interval"
NAPMonitoringReportCount = NAPMonitoringKey + agent_config.KeyDelimiter + "report_count"

// DEPRECATED KEYS
NginxBinPathKey = "nginx_bin_path"
Expand Down Expand Up @@ -268,9 +244,9 @@ var (
Usage: "A comma-separated list of tags to add to the current instance or machine, to be used for inventory purposes.",
},
&StringSliceFlag{
Name: FeaturesKey,
Name: agent_config.FeaturesKey,
Usage: "A comma-separated list of features enabled for the agent.",
DefaultValue: Defaults.Features,
DefaultValue: agent_config.GetDefaultFeatures(),
},
// NGINX Config
&StringFlag{
Expand Down
1 change: 1 addition & 0 deletions src/core/config/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type Config struct {
AgentMetrics AgentMetrics `mapstructure:"metrics" yaml:"-"`
Tags []string `mapstructure:"tags" yaml:"tags,omitempty"`
Features []string `mapstructure:"features" yaml:"features,omitempty"`
Extensions []string `mapstructure:"extensions" yaml:"extensions,omitempty"`
Updated time.Time `yaml:"-"` // update time of the config file
AllowedDirectoriesMap map[string]struct{} `yaml:"-"`
DisplayName string `mapstructure:"display_name" yaml:"display_name,omitempty"`
Expand Down
5 changes: 5 additions & 0 deletions src/core/topics.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ const (
NginxWorkerProcCreated = "nginx.worker.created"
NginxWorkerProcKilled = "nginx.worker.killed"
NginxDetailProcUpdate = "nginx.proc.update"
NginxConfigValidationPending = "nginx.config.validation.pending"
NginxConfigValidationFailed = "nginx.config.validation.failed"
NginxConfigValidationSucceeded = "nginx.config.validation.succeeded"
NginxConfigApplyFailed = "nginx.config.apply.failed"
NginxConfigApplySucceeded = "nginx.config.apply.succeeded"
CommPrefix = "comms."
CommStatus = CommPrefix + "status"
CommMetrics = CommPrefix + "metrics"
Expand Down
Loading