Update global metric config to match with change in main
diff --git a/compat.go b/compat.go
index 19202bf..d2e138c 100644
--- a/compat.go
+++ b/compat.go
@@ -273,14 +273,12 @@
 		return nil
 	}
 	return &config.MetricConfig{
-		Mode:               c.Mode,
-		Namespace:          c.Namespace,
-		Enable:             c.Enable,
-		Port:               c.Port,
-		Path:               c.Path,
-		PushGatewayAddress: c.PushGatewayAddress,
-		SummaryMaxAge:      c.SummaryMaxAge,
-		Protocol:           c.Protocol,
+		Enable:      c.Enable,
+		Port:        c.Port,
+		Path:        c.Path,
+		Prometheus:  compatMetricPrometheusConfig(c.Prometheus),
+		Aggregation: compatMetricAggregationConfig(c.Aggregation),
+		Protocol:    c.Protocol,
 	}
 }
 
@@ -369,3 +367,47 @@
 		TLSServerName: c.TLSServerName,
 	}
 }
+
+func compatMetricAggregationConfig(a *global.AggregateConfig) *config.AggregateConfig {
+	if a == nil {
+		return nil
+	}
+	return &config.AggregateConfig{
+		Enabled:           a.Enabled,
+		BucketNum:         a.BucketNum,
+		TimeWindowSeconds: a.TimeWindowSeconds,
+	}
+}
+
+func compatMetricPrometheusConfig(c *global.PrometheusConfig) *config.PrometheusConfig {
+	if c == nil {
+		return nil
+	}
+	return &config.PrometheusConfig{
+		Exporter:    compatMetricPrometheusExporter(c.Exporter),
+		Pushgateway: compatMetricPrometheusGateway(c.Pushgateway),
+	}
+}
+
+func compatMetricPrometheusExporter(e *global.Exporter) *config.Exporter {
+	if e == nil {
+		return nil
+	}
+	return &config.Exporter{
+		Enabled: e.Enabled,
+	}
+}
+
+func compatMetricPrometheusGateway(g *global.PushgatewayConfig) *config.PushgatewayConfig {
+	if g == nil {
+		return nil
+	}
+	return &config.PushgatewayConfig{
+		Enabled:      g.Enabled,
+		BaseUrl:      g.BaseUrl,
+		Job:          g.Job,
+		Username:     g.Username,
+		Password:     g.Password,
+		PushInterval: g.PushInterval,
+	}
+}
diff --git a/config/application_config.go b/config/application_config.go
index 60ea32f..5bbdbdd 100644
--- a/config/application_config.go
+++ b/config/application_config.go
@@ -30,7 +30,7 @@
 // ApplicationConfig is a configuration for current applicationConfig, whether the applicationConfig is a provider or a consumer
 type ApplicationConfig struct {
 	Organization string `default:"dubbo-go" yaml:"organization" json:"organization,omitempty" property:"organization"`
-	Name         string `default:"dubbo.io" yaml:"name" json:"name,omitempty" property:"name"`
+	Name         string `yaml:"name" json:"name,omitempty" property:"name"`
 	Module       string `default:"sample" yaml:"module" json:"module,omitempty" property:"module"`
 	Group        string `yaml:"group" json:"group,omitempty" property:"module"`
 	Version      string `yaml:"version" json:"version,omitempty" property:"version"`
diff --git a/global/metric_config.go b/global/metric_config.go
index 17df20a..ce6124c 100644
--- a/global/metric_config.go
+++ b/global/metric_config.go
@@ -19,14 +19,36 @@
 
 // MetricConfig This is the config struct for all metrics implementation
 type MetricConfig struct {
-	Mode               string `default:"pull" yaml:"mode" json:"mode,omitempty" property:"mode"` // push or pull,
-	Namespace          string `default:"dubbo" yaml:"namespace" json:"namespace,omitempty" property:"namespace"`
-	Enable             *bool  `default:"false" yaml:"enable" json:"enable,omitempty" property:"enable"`
-	Port               string `default:"9090" yaml:"port" json:"port,omitempty" property:"port"`
-	Path               string `default:"/metrics" yaml:"path" json:"path,omitempty" property:"path"`
-	PushGatewayAddress string `default:"" yaml:"push-gateway-address" json:"push-gateway-address,omitempty" property:"push-gateway-address"`
-	SummaryMaxAge      int64  `default:"600000000000" yaml:"summary-max-age" json:"summary-max-age,omitempty" property:"summary-max-age"`
-	Protocol           string `default:"prometheus" yaml:"protocol" json:"protocol,omitempty" property:"protocol"`
+	Enable      *bool             `default:"false" yaml:"enable" json:"enable,omitempty" property:"enable"`
+	Port        string            `default:"9090" yaml:"port" json:"port,omitempty" property:"port"`
+	Path        string            `default:"/metrics" yaml:"path" json:"path,omitempty" property:"path"`
+	Protocol    string            `default:"prometheus" yaml:"protocol" json:"protocol,omitempty" property:"protocol"`
+	Prometheus  *PrometheusConfig `yaml:"prometheus" json:"prometheus" property:"prometheus"`
+	Aggregation *AggregateConfig  `yaml:"aggregation" json:"aggregation" property:"aggregation"`
+}
+
+type AggregateConfig struct {
+	Enabled           *bool `default:"false" yaml:"enabled" json:"enabled,omitempty" property:"enabled"`
+	BucketNum         int   `default:"10" yaml:"bucket-num" json:"bucket-num,omitempty" property:"bucket-num"`
+	TimeWindowSeconds int   `default:"120" yaml:"time-window-seconds" json:"time-window-seconds,omitempty" property:"time-window-seconds"`
+}
+
+type PrometheusConfig struct {
+	Exporter    *Exporter          `yaml:"exporter" json:"exporter,omitempty" property:"exporter"`
+	Pushgateway *PushgatewayConfig `yaml:"pushgateway" json:"pushgateway,omitempty" property:"pushgateway"`
+}
+
+type Exporter struct {
+	Enabled *bool `default:"false" yaml:"enabled" json:"enabled,omitempty" property:"enabled"`
+}
+
+type PushgatewayConfig struct {
+	Enabled      *bool  `default:"false" yaml:"enabled" json:"enabled,omitempty" property:"enabled"`
+	BaseUrl      string `default:"" yaml:"base-url" json:"base-url,omitempty" property:"base-url"`
+	Job          string `default:"default_dubbo_job" yaml:"job" json:"job,omitempty" property:"job"`
+	Username     string `default:"" yaml:"username" json:"username,omitempty" property:"username"`
+	Password     string `default:"" yaml:"password" json:"password,omitempty" property:"password"`
+	PushInterval int    `default:"30" yaml:"push-interval" json:"push-interval,omitempty" property:"push-interval"`
 }
 
 func DefaultMetricConfig() *MetricConfig {
@@ -34,17 +56,91 @@
 	return &MetricConfig{}
 }
 
+func defaultPrometheusConfig() *PrometheusConfig {
+	return &PrometheusConfig{Exporter: &Exporter{}, Pushgateway: &PushgatewayConfig{}}
+}
+
 type MetricOption func(*MetricConfig)
 
-func WithMetric_Mode(mode string) MetricOption {
+func WithMetric_AggregateEnabled() MetricOption {
 	return func(cfg *MetricConfig) {
-		cfg.Mode = mode
+		if cfg.Aggregation == nil {
+			cfg.Aggregation = &AggregateConfig{}
+		}
+		enabled := true
+		cfg.Aggregation.Enabled = &enabled
 	}
 }
 
-func WithMetric_Namespace(namespace string) MetricOption {
+func WithMetric_AggregateBucketNum(num int) MetricOption {
 	return func(cfg *MetricConfig) {
-		cfg.Namespace = namespace
+		if cfg.Aggregation == nil {
+			cfg.Aggregation = &AggregateConfig{}
+		}
+		cfg.Aggregation.BucketNum = num
+	}
+}
+
+func WithMetric_AggregateTimeWindowSeconds(seconds int) MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Aggregation == nil {
+			cfg.Aggregation = &AggregateConfig{}
+		}
+		cfg.Aggregation.TimeWindowSeconds = seconds
+	}
+}
+
+func WithMetric_PrometheusEnabled() MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Prometheus == nil {
+			cfg.Prometheus.Exporter = &Exporter{}
+		}
+		enabled := true
+		cfg.Prometheus.Exporter.Enabled = &enabled
+	}
+}
+
+func WithMetric_PrometheusGatewayUrl(url string) MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Prometheus == nil {
+			cfg.Prometheus = defaultPrometheusConfig()
+		}
+		cfg.Prometheus.Pushgateway.BaseUrl = url
+	}
+}
+
+func WithMetric_PrometheusGatewayJob(job string) MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Prometheus == nil {
+			cfg.Prometheus = defaultPrometheusConfig()
+		}
+		cfg.Prometheus.Pushgateway.Job = job
+	}
+}
+
+func WithMetric_PrometheusGatewayUsername(username string) MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Prometheus == nil {
+			cfg.Prometheus = defaultPrometheusConfig()
+		}
+		cfg.Prometheus.Pushgateway.Username = username
+	}
+}
+
+func WithMetric_PrometheusGatewayPassword(password string) MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Prometheus == nil {
+			cfg.Prometheus = defaultPrometheusConfig()
+		}
+		cfg.Prometheus.Pushgateway.Password = password
+	}
+}
+func WithMetric_PrometheusGatewayInterval(interval int) MetricOption {
+	return func(cfg *MetricConfig) {
+		if cfg.Prometheus == nil {
+			cfg.Prometheus = defaultPrometheusConfig()
+		}
+		cfg.Prometheus.Pushgateway.PushInterval = interval
 	}
 }
 
@@ -66,18 +162,6 @@
 	}
 }
 
-func WithMetric_PushGatewayAddress(address string) MetricOption {
-	return func(cfg *MetricConfig) {
-		cfg.PushGatewayAddress = address
-	}
-}
-
-func WithMetric_SummaryMaxAge(age int64) MetricOption {
-	return func(cfg *MetricConfig) {
-		cfg.SummaryMaxAge = age
-	}
-}
-
 func WithMetric_Protocol(protocol string) MetricOption {
 	return func(cfg *MetricConfig) {
 		cfg.Protocol = protocol
diff --git a/go.mod b/go.mod
index 6c53469..e64da08 100644
--- a/go.mod
+++ b/go.mod
@@ -70,6 +70,7 @@
 	go.uber.org/atomic v1.10.0
 	go.uber.org/multierr v1.8.0 // indirect
 	go.uber.org/zap v1.21.0
+	golang.org/x/net v0.8.0
 	golang.org/x/oauth2 v0.6.0 // indirect
 	google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef
 	google.golang.org/grpc v1.52.0
diff --git a/options.go b/options.go
index 51e9b2d..b471732 100644
--- a/options.go
+++ b/options.go
@@ -126,7 +126,7 @@
 	if err := rcCompat.MetadataReport.Init(rcCompat); err != nil {
 		return err
 	}
-	if err := rcCompat.Metric.Init(); err != nil {
+	if err := rcCompat.Metric.Init(rcCompat); err != nil {
 		return err
 	}
 	for _, t := range rcCompat.Tracing {