This is an automated email from the ASF dual-hosted git repository.
humingcheng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git
The following commit(s) were added to refs/heads/dev by this push:
new f9ae11cf 添加指标microservice_total,记录不区分版本的微服务数量 (#1522)
f9ae11cf is described below
commit f9ae11cfb211c490c6a9402d00f4f298be062c03
Author: hzp-excellent <[email protected]>
AuthorDate: Sat Jan 17 17:08:36 2026 +0800
添加指标microservice_total,记录不区分版本的微服务数量 (#1522)
* 添加指标microservice_total,记录不区分版本的微服务数量
---
datasource/etcd/metrics.go | 11 +++++++++++
datasource/etcd/metrics_test.go | 5 +++++
datasource/metrics.go | 1 +
server/metrics/meta.go | 14 ++++++++++++--
server/metrics/meta_reporter.go | 18 ++++++++++++++++++
5 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/datasource/etcd/metrics.go b/datasource/etcd/metrics.go
index 37c89c2d..2d4ed894 100644
--- a/datasource/etcd/metrics.go
+++ b/datasource/etcd/metrics.go
@@ -88,6 +88,10 @@ func reportSchemas(ctx context.Context, r
datasource.MetricsReporter) {
}
}
+func getServiceKey(service *discovery.MicroService) string {
+ return fmt.Sprintf("%s/%s/%s", service.Environment, service.AppId,
service.ServiceName)
+}
+
func reportServices(ctx context.Context, r datasource.MetricsReporter) {
key := path.GetServiceRootKey("")
servicesResp, err := sd.Service().Search(ctx,
@@ -99,6 +103,7 @@ func reportServices(ctx context.Context, r
datasource.MetricsReporter) {
return
}
isMetricSet := false
+ recordedMetricsMicroservicesWithoutVersion := make(map[string]struct{},
len(servicesResp.Kvs))
for _, keyValue := range servicesResp.Kvs {
service := keyValue.Value.(*discovery.MicroService)
_, domainProject := path.GetInfoFromSvcKV(keyValue.Key)
@@ -113,6 +118,11 @@ func reportServices(ctx context.Context, r
datasource.MetricsReporter) {
Framework: frameworkName,
FrameworkVersion: frameworkVersion,
}
+ _, exist :=
recordedMetricsMicroservicesWithoutVersion[getServiceKey(service)]
+ if !exist {
+ r.MicroServiceAdd(1, labels)
+
recordedMetricsMicroservicesWithoutVersion[getServiceKey(service)] = struct{}{}
+ }
r.ServiceAdd(1, labels)
instanceCount := getInstanceCount4Service(ctx, domainProject,
service)
r.FrameworkSet(labels)
@@ -121,6 +131,7 @@ func reportServices(ctx context.Context, r
datasource.MetricsReporter) {
}
// 0也应该是有效的指标,无指标是异常场景
if !isMetricSet {
+ r.MicroServiceAdd(0, defaultLabel)
r.ServiceAdd(0, defaultLabel)
r.SetFrameworkValue(0, defaultLabel)
r.InstanceAdd(0, defaultLabel)
diff --git a/datasource/etcd/metrics_test.go b/datasource/etcd/metrics_test.go
index 28a2dbd9..c0399b47 100644
--- a/datasource/etcd/metrics_test.go
+++ b/datasource/etcd/metrics_test.go
@@ -34,6 +34,11 @@ func TestMetricsManager_Report(t *testing.T) {
assert.True(t, len(domainTotal.Metric) == 1)
assert.True(t, labelEqual(domainTotal.Metric[0].Label,
map[string]string{"instance": pkgmetrics.InstanceName()}))
+ microserviceTotal, err :=
pkgmetrics.GetMetrics(metrics.KeyMicroserviceTotal)
+ assert.NoError(t, err)
+ assert.NotNil(t, microserviceTotal)
+ assert.True(t, labelEqual(microserviceTotal.Metric[0].Label,
expectedLabels))
+
serviceTotal, err := pkgmetrics.GetMetrics(metrics.KeyServiceTotal)
assert.NoError(t, err)
assert.NotNil(t, serviceTotal)
diff --git a/datasource/metrics.go b/datasource/metrics.go
index 8b1bf0f9..d30b9a45 100644
--- a/datasource/metrics.go
+++ b/datasource/metrics.go
@@ -28,6 +28,7 @@ type MetricsLabels struct {
type MetricsReporter interface {
DomainAdd(delta float64)
+ MicroServiceAdd(delta float64, labels MetricsLabels)
ServiceAdd(delta float64, labels MetricsLabels)
InstanceAdd(delta float64, labels MetricsLabels)
SchemaAdd(delta float64, labels MetricsLabels)
diff --git a/server/metrics/meta.go b/server/metrics/meta.go
index 909d64a5..5f8029e9 100644
--- a/server/metrics/meta.go
+++ b/server/metrics/meta.go
@@ -28,7 +28,10 @@ import (
)
const (
- SubSystem = "db"
+ SubSystem = "db"
+ // 微服务数量:环境-应用-服务名称 相同的认为是同一个服务
+ KeyMicroserviceTotal = metricsvc.FamilyName + "_" + SubSystem + "_" +
"microservice_total"
+ // 微服务版本数量:环境-应用-服务名称-版本
KeyServiceTotal = metricsvc.FamilyName + "_" + SubSystem + "_" +
"service_total"
KeyInstanceTotal = metricsvc.FamilyName + "_" + SubSystem + "_" +
"instance_total"
KeyServiceUsage = metricsvc.FamilyName + "_" + SubSystem + "_" +
"service_usage"
@@ -58,9 +61,16 @@ func InitMetaMetrics() (err error) {
}); err != nil {
return
}
+ if err = metrics.CreateGauge(metrics.GaugeOpts{
+ Key: KeyMicroserviceTotal,
+ Help: "Gauge of version-independent microservice created in
Service Center",
+ Labels: []string{"instance", "framework", "frameworkVersion",
"domain", "project"},
+ }); err != nil {
+ return
+ }
if err = metrics.CreateGauge(metrics.GaugeOpts{
Key: KeyServiceTotal,
- Help: "Gauge of microservice created in Service Center",
+ Help: "Gauge of microservice with version created in Service
Center",
Labels: []string{"instance", "framework", "frameworkVersion",
"domain", "project"},
}); err != nil {
return
diff --git a/server/metrics/meta_reporter.go b/server/metrics/meta_reporter.go
index 284da7dc..e33b06f0 100644
--- a/server/metrics/meta_reporter.go
+++ b/server/metrics/meta_reporter.go
@@ -43,6 +43,19 @@ func (m *MetaReporter) DomainAdd(delta float64) {
log.Error("gauge add failed", err)
}
}
+func (m *MetaReporter) MicroServiceAdd(delta float64, ml
datasource.MetricsLabels) {
+ instance := metricsvc.InstanceName()
+ labels := map[string]string{
+ "instance": instance,
+ "framework": ml.Framework,
+ "frameworkVersion": ml.FrameworkVersion,
+ "domain": ml.Domain,
+ "project": ml.Project,
+ }
+ if err := metrics.GaugeAdd(KeyMicroserviceTotal, delta, labels); err !=
nil {
+ log.Error("gauge add failed", err)
+ }
+}
func (m *MetaReporter) ServiceAdd(delta float64, ml datasource.MetricsLabels) {
instance := metricsvc.InstanceName()
labels := map[string]string{
@@ -135,6 +148,11 @@ func ResetMetaMetrics() {
log.Error("reset metrics failed", err)
return
}
+ err = metrics.Reset(KeyMicroserviceTotal)
+ if err != nil {
+ log.Error("reset metrics failed", err)
+ return
+ }
err = metrics.Reset(KeyServiceTotal)
if err != nil {
log.Error("reset metrics failed", err)