This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch v1.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/v1.x by this push:
     new c3bba37  Fix: Etcd metrics not correct (#1155)
c3bba37 is described below

commit c3bba374ea739a5fa94bad2a06923d12cf26839d
Author: little-cui <[email protected]>
AuthorDate: Mon Sep 27 16:07:15 2021 +0800

    Fix: Etcd metrics not correct (#1155)
    
    * Fix: Etcd metrics not correct
    
    * Fix: remove counter
---
 Dockerfile.build                                   |   2 +-
 go.mod                                             |   3 +-
 go.sum                                             |  41 +---
 pkg/registry/struct.go                             |  11 +
 proxy.sh                                           |   2 +-
 scripts/build/local.sh                             |   2 +-
 server/bootstrap/bootstrap.go                      |   2 +-
 server/connection/metrics.go                       |  22 +-
 server/core/backend/metrics.go                     |  14 +-
 server/core/key_convertor.go                       |   5 +
 server/handler/metric/metric.go                    |   2 +-
 server/health/metrics.go                           |   6 +-
 server/{metric => metrics}/calculator.go           |   2 +-
 server/{metric => metrics}/calculator_test.go      |   2 +-
 server/{metric => metrics}/common.go               |   2 +-
 server/{metric => metrics}/common_test.go          |   2 +-
 server/{metric => metrics}/gatherer.go             |  16 +-
 server/{metric => metrics}/gatherer_test.go        |   2 +-
 server/{metric => metrics}/metrics.go              |   6 +-
 server/{metric => metrics}/metrics_test.go         |   2 +-
 server/metrics/prometheus/meta_manager.go          | 129 ++++++++++
 .../prometheus/metrics_http.go}                    |  14 +-
 .../prometheus/metrics_meta.go}                    |  68 ++----
 server/{metric => metrics}/prometheus/reporter.go  |  37 ++-
 server/metrics/prometheus/reporter_meta.go         |  95 ++++++++
 server/{metric => metrics}/reporter.go             |   2 +-
 server/{metric => metrics}/reporter_test.go        |   2 +-
 server/plugin/discovery/etcd/metrics.go            |   6 +-
 server/plugin/discovery/etcd/metrics_test.go       |  10 +-
 server/plugin/discovery/metrics.go                 |  18 +-
 server/plugin/quota/buildin/buildin.go             |   2 -
 server/plugin/quota/counter/counter.go             |  49 ----
 server/plugin/quota/counter/event.go               | 111 ---------
 server/plugin/quota/counter/event_test.go          | 261 ---------------------
 server/plugin/registry/metrics.go                  |  14 +-
 server/plugin/tracing/pzipkin/common.go            |   4 +-
 server/service/event/domain_event_handler.go       |  46 ----
 server/service/event/event.go                      |   2 -
 server/service/event/instance_event_handler.go     |  34 +--
 .../service/event/schema_summary_event_handler.go  |  55 -----
 server/service/event/service_event_handler.go      |  18 --
 41 files changed, 370 insertions(+), 753 deletions(-)

diff --git a/Dockerfile.build b/Dockerfile.build
index a21740c..83b9273 100644
--- a/Dockerfile.build
+++ b/Dockerfile.build
@@ -18,5 +18,5 @@ FROM golang:1.14
 WORKDIR /go/src/github.com/apache/servicecomb-service-center
 
 COPY . .
-RUN export GOPROXY=https://goproxy.io
+RUN export GOPROXY=https://goproxy.cn,direct
 RUN bash -x scripts/build/local.sh linux 1.4.0 latest
diff --git a/go.mod b/go.mod
index c122e02..f5aed54 100644
--- a/go.mod
+++ b/go.mod
@@ -14,10 +14,9 @@ require (
        github.com/dgrijalva/jwt-go v3.2.0+incompatible
        github.com/elithrar/simple-scrypt v1.3.0
        github.com/go-chassis/cari v0.3.0
-       github.com/go-chassis/foundation v0.3.0
+       github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c
        github.com/go-chassis/go-archaius v1.3.2
        github.com/go-chassis/go-chassis v0.0.0-20200826064053-d90be848aa10
-       github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c
        github.com/go-chassis/paas-lager v1.1.1
        github.com/gogo/protobuf v1.3.2
        github.com/golang/protobuf v1.4.3
diff --git a/go.sum b/go.sum
index 27c2de6..3f110dc 100644
--- a/go.sum
+++ b/go.sum
@@ -1,4 +1,3 @@
-cloud.google.com/go v0.26.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
 cloud.google.com/go v0.38.0/go.mod 
h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@@ -67,9 +66,6 @@ github.com/alicebob/miniredis v2.5.0+incompatible/go.mod 
h1:8HZjEj4yU0dwhYHky+Dx
 github.com/apache/servicecomb-service-center 
v0.0.0-20200723031815-784c3533a8f2/go.mod 
h1:jiw0zTHphl1PVLX+LgftTSebaECo7XX6qwCNUONSMvE=
 github.com/apache/thrift v0.0.0-20180125231006-3d556248a8b9 
h1:ymi1nHra1RZXqjg5xvka4YVyK+3uKPk2B9HUlPRIiBc=
 github.com/apache/thrift v0.0.0-20180125231006-3d556248a8b9/go.mod 
h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/apache/thrift v0.12.0/go.mod 
h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/apache/thrift v0.13.0 
h1:5hryIiq9gtn+MiLVn0wP37kb/uTeRZgN08WoCsAhIhI=
-github.com/apache/thrift v0.13.0/go.mod 
h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e 
h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod 
h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod 
h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -112,8 +108,6 @@ github.com/chzyer/logex v1.1.10/go.mod 
h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod 
h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod 
h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod 
h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
-github.com/client9/misspell v0.3.4 
h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=
-github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod 
h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod 
h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
 github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod 
h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
@@ -177,7 +171,6 @@ github.com/elithrar/simple-scrypt v1.3.0/go.mod 
h1:U2XQRI95XHY0St410VE3UjT7vuKb1
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod 
h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.12.0+incompatible 
h1:SIvoTSbsMEwuM3dzFirLwKc4BH6VXP5CNf+G1FfJVr4=
 github.com/emicklei/go-restful v2.12.0+incompatible/go.mod 
h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/envoyproxy/go-control-plane v0.6.9/go.mod 
h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
 github.com/envoyproxy/go-control-plane 
v0.9.1-0.20191026205805-5f8ba28d4473/go.mod 
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod 
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/evanphx/json-patch v4.2.0+incompatible 
h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I=
@@ -205,12 +198,8 @@ github.com/go-chassis/cari v0.3.0 
h1:ysEX1t9dBObshebFKca3zhrWFqyPvcIZo2r66IyJjuk
 github.com/go-chassis/cari v0.3.0/go.mod 
h1:Ie2lW11Y5ZFClY9z7bhAwK6BoNxqGSf3fYGs4mPFs74=
 github.com/go-chassis/foundation v0.1.1-0.20191113114104-2b05871e9ec4/go.mod 
h1:21/ajGtgJlWTCeM0TxGJdRhO8bJkKirWyV8Stlh6g6c=
 github.com/go-chassis/foundation v0.1.1-0.20200825060850-b16bf420f7b3/go.mod 
h1:21/ajGtgJlWTCeM0TxGJdRhO8bJkKirWyV8Stlh6g6c=
-github.com/go-chassis/foundation v0.3.0 
h1:jG4BIrK8fXD9jbTtJ5rOLGQZ1pQI/mLnDuVJzToCtos=
-github.com/go-chassis/foundation v0.3.0/go.mod 
h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
 github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c 
h1:6ooUyysnayGgoJHV++NLEcnnnXzsw3ud4VydjISGBqI=
 github.com/go-chassis/foundation v0.3.1-0.20210811025651-7f4d2b2b906c/go.mod 
h1:6NsIUaHghTFRGfCBcZN011zl196F6OR5QvD9N+P4oWU=
-github.com/go-chassis/glog v0.0.0-20180920075250-95a09b2413e9 
h1:z6ezGZIJVMl2Yo0gOJlv8jOvCDFi9W3TLADQvJ6Z2t0=
-github.com/go-chassis/glog v0.0.0-20180920075250-95a09b2413e9/go.mod 
h1:tfdQUl8deEC8YmpbYjbSZJv7Y/7hC0ag9n3RVrjIoJs=
 github.com/go-chassis/go-archaius v1.3.2 
h1:b52voYtSL+fukmvg/rsn/quw/hgDWtV945adl0VV8Lg=
 github.com/go-chassis/go-archaius v1.3.2/go.mod 
h1:nzRL1sSodtgeCZMzCNu0y2LPH5zz7chp8uaQ0GS0x6I=
 github.com/go-chassis/go-chassis v0.0.0-20200716073336-4183d5dd1246/go.mod 
h1:S7RbnpeTWBqZ4+UxGAs05a6qdhDyWKpTNuil8FYNiME=
@@ -252,7 +241,6 @@ github.com/go-sql-driver/mysql v1.4.0/go.mod 
h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG
 github.com/go-sql-driver/mysql v1.5.0/go.mod 
h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-stack/stack v1.8.0 
h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod 
h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gogo/googleapis v1.1.0/go.mod 
h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
 github.com/gogo/protobuf v1.1.1/go.mod 
h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.0/go.mod 
h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod 
h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -261,12 +249,14 @@ github.com/gogo/protobuf v1.3.1 
h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 github.com/gogo/protobuf v1.3.1/go.mod 
h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod 
h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b 
h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod 
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef 
h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 
h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 
h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA=
 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
@@ -287,8 +277,6 @@ github.com/golang/protobuf v1.4.1/go.mod 
h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
 github.com/golang/protobuf v1.4.2/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/protobuf v1.4.3 
h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
 github.com/golang/protobuf v1.4.3/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod 
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod 
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db 
h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod 
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -302,7 +290,6 @@ github.com/google/go-cmp v0.3.0/go.mod 
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
 github.com/google/go-cmp v0.3.1/go.mod 
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
 github.com/google/go-cmp v0.4.0/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod 
h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -459,7 +446,6 @@ github.com/leodido/go-urn v1.2.1/go.mod 
h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ic
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lightstep/lightstep-tracer-common/golang/gogo 
v0.0.0-20190605223551-bc2310a04743/go.mod 
h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
 github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod 
h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/lyft/protoc-gen-validate v0.0.13/go.mod 
h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
 github.com/magiconair/properties v1.8.0/go.mod 
h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a 
h1:TpvdAwDAt1K4ANVOfcihouRdvP+MgAfDWwBuct4l6ZY=
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod 
h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -587,7 +573,6 @@ github.com/prometheus/client_golang v0.9.1 
h1:K47Rk0v/fkEfwfQet2KWhscE0cJzjgCCDB
 github.com/prometheus/client_golang v0.9.1/go.mod 
h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang 
v0.9.3-0.20190127221311-3c4408c8b829/go.mod 
h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
 github.com/prometheus/client_golang v0.9.3/go.mod 
h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
-github.com/prometheus/client_golang v0.9.4/go.mod 
h1:oCXIBxdI62A4cR6aTRJCgetEjecSIYzOEaeAn4iYEpM=
 github.com/prometheus/client_golang v1.0.0/go.mod 
h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.3.0/go.mod 
h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
 github.com/prometheus/client_golang v1.7.0 
h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=
@@ -777,7 +762,6 @@ golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod 
h1:86+5VVa7VpoJ4kLfm0
 golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod 
h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod 
h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod 
h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod 
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod 
h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod 
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod 
h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -797,7 +781,6 @@ golang.org/x/mod v0.3.0 
h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -845,7 +828,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 
h1:SQFwaSi55rU7vdNs9Yr0Z324
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -900,11 +882,9 @@ golang.org/x/time 
v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 
h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod 
h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod 
h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -943,7 +923,6 @@ google.golang.org/api v0.7.0/go.mod 
h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E
 google.golang.org/api v0.8.0/go.mod 
h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.9.0/go.mod 
h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.15.0/go.mod 
h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/appengine v1.1.0/go.mod 
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.2.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0 
h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
@@ -964,21 +943,8 @@ google.golang.org/genproto 
v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBr
 google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod 
h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 
h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod 
h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/grpc v1.17.0/go.mod 
h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
-google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
-google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.0/go.mod 
h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
-google.golang.org/grpc v1.20.1/go.mod 
h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0=
-google.golang.org/grpc v1.21.0/go.mod 
h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.21.1/go.mod 
h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.22.1/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.0/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg=
 google.golang.org/grpc v1.26.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
-google.golang.org/grpc v1.27.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod 
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod 
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod 
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -990,8 +956,6 @@ google.golang.org/protobuf v1.23.0/go.mod 
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod 
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.24.0 
h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
 google.golang.org/protobuf v1.24.0/go.mod 
h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod 
h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod 
h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6 
h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod 
h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1033,7 +997,6 @@ gopkg.in/yaml.v2 v2.3.0 
h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c 
h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a 
h1:/8zB6iBfHCl1qAnEAWwGPNrUvapuy6CPla1VM0k8hQw=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/pkg/registry/struct.go b/pkg/registry/struct.go
index 453ce57..b440287 100644
--- a/pkg/registry/struct.go
+++ b/pkg/registry/struct.go
@@ -415,3 +415,14 @@ type GetAppsResponse struct {
 type MicroServiceDependency struct {
        Dependency []*MicroServiceKey `json:"Dependency,omitempty"`
 }
+
+func ToFrameworkLabel(ms *MicroService) (string, string) {
+       if ms.Framework != nil && len(ms.Framework.Name) > 0 {
+               version := ms.Framework.Version
+               if len(ms.Framework.Version) == 0 {
+                       version = "UNKNOWN"
+               }
+               return ms.Framework.Name, version
+       }
+       return "UNKNOWN", "UNKNOWN"
+}
diff --git a/proxy.sh b/proxy.sh
index dd0c9af..be9f90c 100755
--- a/proxy.sh
+++ b/proxy.sh
@@ -13,4 +13,4 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-export GOPROXY=https://goproxy.io,direct
+export GOPROXY=https://goproxy.cn,direct
diff --git a/scripts/build/local.sh b/scripts/build/local.sh
index 2dfb536..3d0bb3e 100644
--- a/scripts/build/local.sh
+++ b/scripts/build/local.sh
@@ -16,7 +16,7 @@
 # limitations under the License.
 
 set -e
-export GOPROXY=https://goproxy.io
+export GOPROXY=${GOPROXY:-"https://goproxy.cn,direct"}
 export GOOS=${1:-"linux"}
 export GOARCH=${4:-"amd64"}
 export CGO_ENABLED=${CGO_ENABLED:-0} # prevent to compile cgo file
diff --git a/server/bootstrap/bootstrap.go b/server/bootstrap/bootstrap.go
index e1898d2..2ed5c0e 100644
--- a/server/bootstrap/bootstrap.go
+++ b/server/bootstrap/bootstrap.go
@@ -73,7 +73,7 @@ import (
        _ "github.com/apache/servicecomb-service-center/server/rest/admin"
 
        //metrics
-       _ "github.com/apache/servicecomb-service-center/server/metric"
+       _ 
"github.com/apache/servicecomb-service-center/server/metrics/prometheus"
 
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/server/handler/accesslog"
diff --git a/server/connection/metrics.go b/server/connection/metrics.go
index 26f34e0..27949cf 100644
--- a/server/connection/metrics.go
+++ b/server/connection/metrics.go
@@ -21,7 +21,7 @@ import (
        "time"
 
        "github.com/apache/servicecomb-service-center/pkg/event"
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
@@ -33,7 +33,7 @@ const (
 var (
        notifyCounter = prometheus.NewCounterVec(
                prometheus.CounterOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "notify",
                        Name:      "publish_total",
                        Help:      "Counter of publishing instance events",
@@ -41,16 +41,16 @@ var (
 
        notifyLatency = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "notify",
                        Name:       "publish_durations_microseconds",
                        Help:       "Latency of publishing instance events",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"instance", "source", "status"})
 
        pendingGauge = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "notify",
                        Name:      "pending_total",
                        Help:      "Counter of pending instance events",
@@ -58,16 +58,16 @@ var (
 
        pendingLatency = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "notify",
                        Name:       "pending_durations_microseconds",
                        Help:       "Latency of pending instance events",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"instance", "source"})
 
        subscriberGauge = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "notify",
                        Name:      "subscriber_total",
                        Help:      "Gauge of subscribers",
@@ -79,7 +79,7 @@ func init() {
 }
 
 func ReportPublishCompleted(evt event.Event, err error) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        elapsed := float64(time.Since(evt.CreateAt()).Nanoseconds()) / 
float64(time.Microsecond)
        status := success
        if err != nil {
@@ -91,14 +91,14 @@ func ReportPublishCompleted(evt event.Event, err error) {
 }
 
 func ReportPendingCompleted(evt event.Event) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        elapsed := float64(time.Since(evt.CreateAt()).Nanoseconds()) / 
float64(time.Microsecond)
        pendingLatency.WithLabelValues(instance, 
evt.Type().String()).Observe(elapsed)
        pendingGauge.WithLabelValues(instance, evt.Type().String()).Inc()
 }
 
 func ReportSubscriber(domain, scheme string, n float64) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
 
        subscriberGauge.WithLabelValues(instance, domain, scheme).Add(n)
 }
diff --git a/server/core/backend/metrics.go b/server/core/backend/metrics.go
index 07170c5..ac1efb3 100644
--- a/server/core/backend/metrics.go
+++ b/server/core/backend/metrics.go
@@ -20,7 +20,7 @@ package backend
 import (
        "time"
 
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
@@ -32,7 +32,7 @@ const (
 var (
        scCounter = prometheus.NewCounterVec(
                prometheus.CounterOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      "sc_total",
                        Help:      "Counter of the Service Center instance",
@@ -40,7 +40,7 @@ var (
 
        heartbeatCounter = prometheus.NewCounterVec(
                prometheus.CounterOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      "heartbeat_total",
                        Help:      "Counter of heartbeat renew",
@@ -48,11 +48,11 @@ var (
 
        heartbeatLatency = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "db",
                        Name:       "heartbeat_durations_microseconds",
                        Help:       "Latency of heartbeat renew",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"instance", "status"})
 )
 
@@ -61,12 +61,12 @@ func init() {
 }
 
 func ReportScInstance() {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        scCounter.WithLabelValues(instance).Add(1)
 }
 
 func ReportHeartbeatCompleted(err error, start time.Time) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        elapsed := float64(time.Since(start).Nanoseconds()) / 
float64(time.Microsecond)
        status := success
        if err != nil {
diff --git a/server/core/key_convertor.go b/server/core/key_convertor.go
index ffbb87a..ddcf95a 100644
--- a/server/core/key_convertor.go
+++ b/server/core/key_convertor.go
@@ -21,6 +21,7 @@ import (
 
        "github.com/apache/servicecomb-service-center/pkg/registry"
        "github.com/apache/servicecomb-service-center/pkg/util"
+       "github.com/go-chassis/foundation/stringutil"
 )
 
 func KvToResponse(key []byte) (keys []string) {
@@ -167,3 +168,7 @@ func GetInfoFromDependencyRuleKV(key []byte) (t string, _ 
*registry.MicroService
                Version:     keys[l-1],
        }
 }
+
+func SplitDomainProject(domainProject string) (string, string) {
+       return stringutil.SplitToTwo(domainProject, SPLIT)
+}
diff --git a/server/handler/metric/metric.go b/server/handler/metric/metric.go
index 339a5ff..dedd63f 100644
--- a/server/handler/metric/metric.go
+++ b/server/handler/metric/metric.go
@@ -24,7 +24,7 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/chain"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/rest"
-       "github.com/apache/servicecomb-service-center/server/metric/prometheus"
+       "github.com/apache/servicecomb-service-center/server/metrics/prometheus"
        svr "github.com/apache/servicecomb-service-center/server/rest"
 )
 
diff --git a/server/health/metrics.go b/server/health/metrics.go
index 2959aa0..2b313c1 100644
--- a/server/health/metrics.go
+++ b/server/health/metrics.go
@@ -22,7 +22,7 @@ import (
 
        "github.com/apache/servicecomb-service-center/pkg/gopool"
        "github.com/apache/servicecomb-service-center/pkg/util"
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
@@ -31,7 +31,7 @@ const durationReportCPUUsage = 3 * time.Second
 var (
        cpuGauge = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "process",
                        Name:      "cpu_usage",
                        Help:      "Process cpu usage",
@@ -55,7 +55,7 @@ func AutoReportCPUUsage(ctx context.Context) {
                        return
                case <-time.After(durationReportCPUUsage):
                        pt, ct := util.GetProcCPUUsage()
-                       cpuGauge.WithLabelValues(metric.InstanceName()).Set(
+                       cpuGauge.WithLabelValues(metrics.InstanceName()).Set(
                                (pt - cpuProc) * float64(cpus) / (ct - 
cpuTotal))
                        cpuTotal, cpuProc = ct, pt
                }
diff --git a/server/metric/calculator.go b/server/metrics/calculator.go
similarity index 99%
rename from server/metric/calculator.go
rename to server/metrics/calculator.go
index f1c4ee7..6574e6d 100644
--- a/server/metric/calculator.go
+++ b/server/metrics/calculator.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package metric
+package metrics
 
 import (
        dto "github.com/prometheus/client_model/go"
diff --git a/server/metric/calculator_test.go 
b/server/metrics/calculator_test.go
similarity index 99%
rename from server/metric/calculator_test.go
rename to server/metrics/calculator_test.go
index e4a356a..4dcf76d 100644
--- a/server/metric/calculator_test.go
+++ b/server/metrics/calculator_test.go
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package metric
+package metrics
 
 import (
        "testing"
diff --git a/server/metric/common.go b/server/metrics/common.go
similarity index 99%
rename from server/metric/common.go
rename to server/metrics/common.go
index 9358283..b2aee7e 100644
--- a/server/metric/common.go
+++ b/server/metrics/common.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package metric
+package metrics
 
 import (
        "net"
diff --git a/server/metric/common_test.go b/server/metrics/common_test.go
similarity index 99%
rename from server/metric/common_test.go
rename to server/metrics/common_test.go
index 6de7968..7c68186 100644
--- a/server/metric/common_test.go
+++ b/server/metrics/common_test.go
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package metric
+package metrics
 
 import (
        "os"
diff --git a/server/metric/gatherer.go b/server/metrics/gatherer.go
similarity index 87%
rename from server/metric/gatherer.go
rename to server/metrics/gatherer.go
index 37b58bf..b2c8451 100644
--- a/server/metric/gatherer.go
+++ b/server/metrics/gatherer.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package metric
+package metrics
 
 import (
        "context"
@@ -29,28 +29,28 @@ import (
 )
 
 // Gatherer is the reader of sc metrics
-var Gatherer *MetricsGatherer
+var Gatherer *Gather
 
 func init() {
        Gatherer = NewGatherer()
        Gatherer.Start()
 }
 
-func NewGatherer() *MetricsGatherer {
-       return &MetricsGatherer{
+func NewGatherer() *Gather {
+       return &Gather{
                Records: NewMetrics(),
                closed:  true,
        }
 }
 
-type MetricsGatherer struct {
+type Gather struct {
        Records *Metrics
 
        lock   sync.Mutex
        closed bool
 }
 
-func (mm *MetricsGatherer) Start() {
+func (mm *Gather) Start() {
        mm.lock.Lock()
        if !mm.closed {
                mm.lock.Unlock()
@@ -63,7 +63,7 @@ func (mm *MetricsGatherer) Start() {
        mm.lock.Unlock()
 }
 
-func (mm *MetricsGatherer) loop(ctx context.Context) {
+func (mm *Gather) loop(ctx context.Context) {
        ticker := time.NewTicker(Period)
        for {
                select {
@@ -80,7 +80,7 @@ func (mm *MetricsGatherer) loop(ctx context.Context) {
        }
 }
 
-func (mm *MetricsGatherer) Collect() error {
+func (mm *Gather) Collect() error {
        mfs, err := prometheus.DefaultGatherer.Gather()
        if err != nil {
                return err
diff --git a/server/metric/gatherer_test.go b/server/metrics/gatherer_test.go
similarity index 98%
rename from server/metric/gatherer_test.go
rename to server/metrics/gatherer_test.go
index 4867aca..d3581eb 100644
--- a/server/metric/gatherer_test.go
+++ b/server/metrics/gatherer_test.go
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package metric
+package metrics
 
 import "testing"
 
diff --git a/server/metric/metrics.go b/server/metrics/metrics.go
similarity index 98%
rename from server/metric/metrics.go
rename to server/metrics/metrics.go
index 45bb294..83a4314 100644
--- a/server/metric/metrics.go
+++ b/server/metrics/metrics.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package metric
+package metrics
 
 import (
        "reflect"
@@ -41,7 +41,7 @@ func NewDetails() *Details {
        }
 }
 
-// Details is the struct to hold the calculated result and index by metric 
label
+// Details is the struct to hold the calculated result and index by metrics 
label
 type Details struct {
        // Summary is the calculation results of the details
        Summary float64
@@ -94,7 +94,7 @@ func (cm *Details) ForEach(f func(labels []*dto.LabelPair, v 
float64) (next bool
        }
 }
 
-// Metrics is the struct to hold the Details objects store and index by metric 
name
+// Metrics is the struct to hold the Details objects store and index by 
metrics name
 type Metrics struct {
        mapper map[string]*Details
 }
diff --git a/server/metric/metrics_test.go b/server/metrics/metrics_test.go
similarity index 99%
rename from server/metric/metrics_test.go
rename to server/metrics/metrics_test.go
index 2a7c463..64760e9 100644
--- a/server/metric/metrics_test.go
+++ b/server/metrics/metrics_test.go
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package metric
+package metrics
 
 import (
        "reflect"
diff --git a/server/metrics/prometheus/meta_manager.go 
b/server/metrics/prometheus/meta_manager.go
new file mode 100644
index 0000000..8ff9fae
--- /dev/null
+++ b/server/metrics/prometheus/meta_manager.go
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package prometheus
+
+import (
+       "context"
+       "fmt"
+
+       "github.com/apache/servicecomb-service-center/pkg/log"
+       pb "github.com/apache/servicecomb-service-center/pkg/registry"
+       "github.com/apache/servicecomb-service-center/server/core"
+       "github.com/apache/servicecomb-service-center/server/core/backend"
+       "github.com/apache/servicecomb-service-center/server/core/proto"
+       "github.com/apache/servicecomb-service-center/server/plugin/registry"
+)
+
+type MetricsManager struct {
+}
+
+func (m *MetricsManager) Report(ctx context.Context, r *MetaReporter) error {
+       reportDomains(ctx, r)
+       reportServices(ctx, r)
+       reportSchemas(ctx, r)
+       return nil
+}
+
+func reportDomains(ctx context.Context, r *MetaReporter) {
+       key := core.GenerateDomainKey("")
+       domainsResp, err := backend.Store().Domain().Search(ctx,
+               registry.WithCacheOnly(), registry.WithCountOnly(),
+               registry.WithStrKey(key),
+               registry.WithPrefix())
+       if err != nil {
+               log.Error("query all domains failed", err)
+               return
+       }
+       r.DomainAdd(float64(domainsResp.Count))
+}
+
+func reportSchemas(ctx context.Context, r *MetaReporter) {
+       key := core.GetServiceSchemaSummaryRootKey("")
+       schemaKeysResp, err := backend.Store().SchemaSummary().Search(ctx,
+               registry.WithCacheOnly(), registry.WithKeyOnly(),
+               registry.WithStrKey(key),
+               registry.WithPrefix())
+       if err != nil {
+               log.Error("query all schemas failed", err)
+               return
+       }
+       for _, keyValue := range schemaKeysResp.Kvs {
+               domainProject, _, _ := 
core.GetInfoFromSchemaSummaryKV(keyValue.Key)
+               domain, project := core.SplitDomainProject(domainProject)
+               labels := MetricsLabels{
+                       Domain:  domain,
+                       Project: project,
+               }
+               r.SchemaAdd(1, labels)
+       }
+}
+
+func reportServices(ctx context.Context, r *MetaReporter) {
+       key := core.GetServiceRootKey("")
+       servicesResp, err := backend.Store().Service().Search(ctx,
+               registry.WithCacheOnly(),
+               registry.WithStrKey(key),
+               registry.WithPrefix())
+       if err != nil {
+               log.Error("query all microservices failed", err)
+               return
+       }
+       for _, keyValue := range servicesResp.Kvs {
+               service := keyValue.Value.(*pb.MicroService)
+               _, domainProject := core.GetInfoFromSvcKV(keyValue.Key)
+               if core.IsShared(proto.MicroServiceToKey(domainProject, 
service)) {
+                       continue
+               }
+               domain, project := core.SplitDomainProject(domainProject)
+               frameworkName, frameworkVersion := pb.ToFrameworkLabel(service)
+               labels := MetricsLabels{
+                       Domain:           domain,
+                       Project:          project,
+                       Framework:        frameworkName,
+                       FrameworkVersion: frameworkVersion,
+               }
+               r.ServiceAdd(1, labels)
+
+               reportInstances(ctx, r, domainProject, service)
+       }
+}
+
+func reportInstances(ctx context.Context, r *MetaReporter, domainProject 
string, service *pb.MicroService) {
+       instancesResp, err := backend.Store().Instance().Search(ctx,
+               registry.WithCacheOnly(), registry.WithCountOnly(),
+               registry.WithStrKey(core.GenerateInstanceKey(domainProject, 
service.ServiceId, "")),
+               registry.WithPrefix())
+       if err != nil {
+               log.Error(fmt.Sprintf("query microservice %s isntances failed", 
service.ServiceId), err)
+               return
+       }
+       if instancesResp.Count == 0 {
+               return
+       }
+       count := float64(instancesResp.Count)
+       domain, project := core.SplitDomainProject(domainProject)
+       frameworkName, frameworkVersion := pb.ToFrameworkLabel(service)
+       labels := MetricsLabels{
+               Domain:           domain,
+               Project:          project,
+               Framework:        frameworkName,
+               FrameworkVersion: frameworkVersion,
+       }
+       r.FrameworkSet(labels)
+       r.InstanceAdd(count, labels)
+}
diff --git a/server/metric/prometheus/metrics.go 
b/server/metrics/prometheus/metrics_http.go
similarity index 92%
rename from server/metric/prometheus/metrics.go
rename to server/metrics/prometheus/metrics_http.go
index 2dff27f..4b5615f 100644
--- a/server/metric/prometheus/metrics.go
+++ b/server/metrics/prometheus/metrics_http.go
@@ -26,7 +26,7 @@ import (
 
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/pkg/util"
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        api "github.com/apache/servicecomb-service-center/server/rest"
        "github.com/prometheus/client_golang/prometheus"
        "github.com/prometheus/client_golang/prometheus/promhttp"
@@ -35,7 +35,7 @@ import (
 var (
        incomingRequests = prometheus.NewCounterVec(
                prometheus.CounterOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "http",
                        Name:      "request_total",
                        Help:      "Counter of requests received into ROA 
handler",
@@ -43,7 +43,7 @@ var (
 
        successfulRequests = prometheus.NewCounterVec(
                prometheus.CounterOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "http",
                        Name:      "success_total",
                        Help:      "Counter of successful requests processed by 
ROA handler",
@@ -51,16 +51,16 @@ var (
 
        reqDurations = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "http",
                        Name:       "request_durations_microseconds",
                        Help:       "HTTP request latency summary of ROA 
handler",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"method", "instance", "api", "domain"})
 
        queryPerSeconds = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "http",
                        Name:      "query_per_seconds",
                        Help:      "HTTP requests per seconds of ROA handler",
@@ -75,7 +75,7 @@ func init() {
 }
 
 func ReportRequestCompleted(w http.ResponseWriter, r *http.Request, start 
time.Time) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        elapsed := float64(time.Since(start).Nanoseconds()) / 
float64(time.Microsecond)
        route, _ := r.Context().Value(rest.CtxMatchFunc).(string)
        domain := util.ParseDomain(r.Context())
diff --git a/server/service/metrics/metrics.go 
b/server/metrics/prometheus/metrics_meta.go
similarity index 56%
rename from server/service/metrics/metrics.go
rename to server/metrics/prometheus/metrics_meta.go
index 389abc8..0ebd272 100644
--- a/server/service/metrics/metrics.go
+++ b/server/metrics/prometheus/metrics_meta.go
@@ -15,11 +15,10 @@
  * limitations under the License.
  */
 
-package metrics
+package prometheus
 
 import (
-       "github.com/apache/servicecomb-service-center/pkg/util"
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
@@ -32,87 +31,56 @@ const (
        KeyFrameworkTotal = "framework_total"
 
        SubSystem = "db"
-)
 
-// Key return metrics key
-func Key(name string) string {
-       return util.StringJoin([]string{SubSystem, name}, "_")
-}
+       LabelInstance         = "instance"
+       LabelFramework        = "framework"
+       LabelFrameworkVersion = "frameworkVersion"
+       LabelDomain           = "domain"
+       LabelProject          = "project"
+)
 
 var (
        domainCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: SubSystem,
                        Name:      KeyDomainTotal,
                        Help:      "Gauge of domain created in Service Center",
-               }, []string{"instance"})
+               }, []string{LabelInstance})
 
        serviceCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      KeyServiceTotal,
                        Help:      "Gauge of microservice created in Service 
Center",
-               }, []string{"instance", "framework", "frameworkVersion", 
"domain"})
+               }, []string{LabelInstance, LabelFramework, 
LabelFrameworkVersion, LabelDomain, LabelProject})
 
        instanceCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: SubSystem,
                        Name:      KeyInstanceTotal,
                        Help:      "Gauge of microservice created in Service 
Center",
-               }, []string{"instance", "domain"})
+               }, []string{LabelInstance, LabelFramework, 
LabelFrameworkVersion, LabelDomain, LabelProject})
 
        schemaCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: SubSystem,
                        Name:      KeySchemaTotal,
                        Help:      "Gauge of schema created in Service Center",
-               }, []string{"instance", "domain"})
+               }, []string{LabelInstance, LabelDomain, LabelProject})
 
        frameworkCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: SubSystem,
                        Name:      KeyFrameworkTotal,
                        Help:      "Gauge of client framework info in Service 
Center",
-               }, metric.ToLabelNames(Framework{}))
+               }, []string{LabelInstance, LabelFramework, 
LabelFrameworkVersion, LabelDomain, LabelProject})
 )
 
-// Framework return framework info.
-type Framework struct {
-       DomainName       string `json:"domainName"`
-       ProjectName      string `json:"projectName"`
-       FrameWork        string `json:"framework"`
-       FrameworkVersion string `json:"frameworkVersion"`
-}
-
 func init() {
        prometheus.MustRegister(domainCounter, serviceCounter, instanceCounter, 
schemaCounter, frameworkCounter)
 }
-
-func ReportDomains(c float64) {
-       instance := metric.InstanceName()
-       domainCounter.WithLabelValues(instance).Add(c)
-}
-
-func ReportServices(domain, framework, frameworkVersion string, c float64) {
-       instance := metric.InstanceName()
-       serviceCounter.WithLabelValues(instance, framework, frameworkVersion, 
domain).Add(c)
-}
-
-func ReportInstances(domain string, c float64) {
-       instance := metric.InstanceName()
-       instanceCounter.WithLabelValues(instance, domain).Add(c)
-}
-
-func ReportSchemas(domain string, c float64) {
-       instance := metric.InstanceName()
-       schemaCounter.WithLabelValues(instance, domain).Add(c)
-}
-
-func ReportFramework(domainName, projectName string, framework, 
frameworkVersion string, c float64) {
-       frameworkCounter.WithLabelValues(domainName, projectName, framework, 
frameworkVersion).Add(c)
-}
diff --git a/server/metric/prometheus/reporter.go 
b/server/metrics/prometheus/reporter.go
similarity index 65%
rename from server/metric/prometheus/reporter.go
rename to server/metrics/prometheus/reporter.go
index 32cc6df..ae99e8f 100644
--- a/server/metric/prometheus/reporter.go
+++ b/server/metrics/prometheus/reporter.go
@@ -16,7 +16,10 @@
 package prometheus
 
 import (
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "context"
+
+       "github.com/apache/servicecomb-service-center/pkg/log"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        dto "github.com/prometheus/client_model/go"
 )
 
@@ -31,12 +34,17 @@ var qpsLabelMap = map[string]int{
        "domain":   3,
 }
 
-type APIReporter struct {
-       cache *metric.Details
+type Reporter struct {
+       cache *metrics.Details
+}
+
+func (r *Reporter) Report() {
+       r.reportMetaMetrics()
+       r.reportHTTPMetrics()
 }
 
-func (r *APIReporter) Report() {
-       details := metric.Gatherer.Records.Get(httpRequestTotal)
+func (r *Reporter) reportHTTPMetrics() {
+       details := metrics.Gatherer.Records.Get(httpRequestTotal)
        if details == nil {
                return
        }
@@ -48,12 +56,12 @@ func (r *APIReporter) Report() {
        }
        details.ForEach(func(labels []*dto.LabelPair, v float64) (next bool) {
                old := r.cache.Get(labels)
-               queryPerSeconds.WithLabelValues(r.toLabels(labels)...).Set((v - 
old) / metric.Period.Seconds())
+               queryPerSeconds.WithLabelValues(r.toLabels(labels)...).Set((v - 
old) / metrics.Period.Seconds())
                return true
        })
 }
 
-func (r *APIReporter) toLabels(pairs []*dto.LabelPair) (labels []string) {
+func (r *Reporter) toLabels(pairs []*dto.LabelPair) (labels []string) {
        labels = make([]string, len(qpsLabelMap))
        for _, pair := range pairs {
                if i, ok := qpsLabelMap[pair.GetName()]; ok {
@@ -63,10 +71,19 @@ func (r *APIReporter) toLabels(pairs []*dto.LabelPair) 
(labels []string) {
        return
 }
 
+func (r *Reporter) reportMetaMetrics() {
+       ResetMetaMetrics()
+       mgr := MetricsManager{}
+       err := mgr.Report(context.Background(), GetMetaReporter())
+       if err != nil {
+               log.Error("report meta metrics failed", err)
+       }
+}
+
 func init() {
-       metric.RegisterReporter("rest", NewAPIReporter())
+       metrics.RegisterReporter("job", NewReporter())
 }
 
-func NewAPIReporter() *APIReporter {
-       return &APIReporter{}
+func NewReporter() *Reporter {
+       return &Reporter{}
 }
diff --git a/server/metrics/prometheus/reporter_meta.go 
b/server/metrics/prometheus/reporter_meta.go
new file mode 100644
index 0000000..75b55c6
--- /dev/null
+++ b/server/metrics/prometheus/reporter_meta.go
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package prometheus
+
+import (
+       "github.com/apache/servicecomb-service-center/server/metrics"
+)
+
+var metaReporter = &MetaReporter{}
+
+type MetricsLabels struct {
+       Domain           string `json:"domain"`
+       Project          string `json:"project"`
+       Framework        string `json:"framework"`
+       FrameworkVersion string `json:"frameworkVersion"`
+}
+
+type MetaReporter struct {
+}
+
+func (m *MetaReporter) DomainAdd(delta float64) {
+       instance := metrics.InstanceName()
+       labels := map[string]string{
+               LabelInstance: instance,
+       }
+       domainCounter.With(labels).Add(delta)
+}
+func (m *MetaReporter) ServiceAdd(delta float64, ml MetricsLabels) {
+       instance := metrics.InstanceName()
+       labels := map[string]string{
+               LabelInstance:         instance,
+               LabelFramework:        ml.Framework,
+               LabelFrameworkVersion: ml.FrameworkVersion,
+               LabelDomain:           ml.Domain,
+               LabelProject:          ml.Project,
+       }
+       serviceCounter.With(labels).Add(delta)
+}
+func (m *MetaReporter) InstanceAdd(delta float64, ml MetricsLabels) {
+       instance := metrics.InstanceName()
+       labels := map[string]string{
+               LabelInstance:         instance,
+               LabelFramework:        ml.Framework,
+               LabelFrameworkVersion: ml.FrameworkVersion,
+               LabelDomain:           ml.Domain,
+               LabelProject:          ml.Project,
+       }
+       instanceCounter.With(labels).Add(delta)
+}
+func (m *MetaReporter) SchemaAdd(delta float64, ml MetricsLabels) {
+       instance := metrics.InstanceName()
+       labels := map[string]string{
+               LabelInstance: instance,
+               LabelDomain:   ml.Domain,
+               LabelProject:  ml.Project,
+       }
+       schemaCounter.With(labels).Add(delta)
+}
+func (m *MetaReporter) FrameworkSet(ml MetricsLabels) {
+       instance := metrics.InstanceName()
+       labels := map[string]string{
+               LabelInstance:         instance,
+               LabelFramework:        ml.Framework,
+               LabelFrameworkVersion: ml.FrameworkVersion,
+               LabelDomain:           ml.Domain,
+               LabelProject:          ml.Project,
+       }
+       frameworkCounter.With(labels).Set(1)
+}
+
+func GetMetaReporter() *MetaReporter {
+       return metaReporter
+}
+
+func ResetMetaMetrics() {
+       domainCounter.Reset()
+       serviceCounter.Reset()
+       instanceCounter.Reset()
+       schemaCounter.Reset()
+}
diff --git a/server/metric/reporter.go b/server/metrics/reporter.go
similarity index 98%
rename from server/metric/reporter.go
rename to server/metrics/reporter.go
index decfba4..072acc2 100644
--- a/server/metric/reporter.go
+++ b/server/metrics/reporter.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package metric
+package metrics
 
 import "github.com/apache/servicecomb-service-center/pkg/log"
 
diff --git a/server/metric/reporter_test.go b/server/metrics/reporter_test.go
similarity index 98%
rename from server/metric/reporter_test.go
rename to server/metrics/reporter_test.go
index 3962540..0b76074 100644
--- a/server/metric/reporter_test.go
+++ b/server/metrics/reporter_test.go
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package metric
+package metrics
 
 import "testing"
 
diff --git a/server/plugin/discovery/etcd/metrics.go 
b/server/plugin/discovery/etcd/metrics.go
index c104ec4..f900e30 100644
--- a/server/plugin/discovery/etcd/metrics.go
+++ b/server/plugin/discovery/etcd/metrics.go
@@ -17,14 +17,14 @@
 package etcd
 
 import (
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
 var (
        cacheSizeGauge = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "local",
                        Name:      "cache_size_bytes",
                        Help:      "Local cache size summary of backend store",
@@ -36,7 +36,7 @@ func init() {
 }
 
 func ReportCacheSize(resource, t string, s int) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        if len(instance) == 0 || len(resource) == 0 {
                // endpoints list will be empty when initializing
                // resource may be empty when report SCHEMA
diff --git a/server/plugin/discovery/etcd/metrics_test.go 
b/server/plugin/discovery/etcd/metrics_test.go
index 9265f15..1e56a0d 100644
--- a/server/plugin/discovery/etcd/metrics_test.go
+++ b/server/plugin/discovery/etcd/metrics_test.go
@@ -19,7 +19,7 @@ package etcd
 import (
        "testing"
 
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/astaxie/beego"
 )
 
@@ -29,17 +29,17 @@ func init() {
 
 func TestReportCacheSize(t *testing.T) {
        ReportCacheSize("a", "b", 100)
-       err := metric.Gatherer.Collect()
+       err := metrics.Gatherer.Collect()
        if err != nil {
                t.Fatalf("TestReportCacheSize failed")
        }
-       if metric.Gatherer.Records.Summary("local_cache_size_bytes") != 100 {
+       if metrics.Gatherer.Records.Summary("local_cache_size_bytes") != 100 {
                t.Fatalf("TestReportCacheSize failed")
        }
 
        ReportCacheSize("", "b", 200)
-       err = metric.Gatherer.Collect()
-       if metric.Gatherer.Records.Summary("local_cache_size_bytes") != 100 {
+       err = metrics.Gatherer.Collect()
+       if metrics.Gatherer.Records.Summary("local_cache_size_bytes") != 100 {
                t.Fatalf("TestReportCacheSize failed")
        }
 }
diff --git a/server/plugin/discovery/metrics.go 
b/server/plugin/discovery/metrics.go
index 2dfec76..2b47e89 100644
--- a/server/plugin/discovery/metrics.go
+++ b/server/plugin/discovery/metrics.go
@@ -19,14 +19,14 @@ package discovery
 import (
        "time"
 
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
 var (
        eventsCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      "backend_event_total",
                        Help:      "Counter of backend events",
@@ -34,16 +34,16 @@ var (
 
        eventsLatency = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "db",
                        Name:       "backend_event_durations_microseconds",
                        Help:       "Latency of backend events processing",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"instance", "prefix"})
 
        dispatchCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      "dispatch_event_total",
                        Help:      "Counter of backend events dispatch",
@@ -51,11 +51,11 @@ var (
 
        dispatchLatency = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "db",
                        Name:       "dispatch_event_durations_microseconds",
                        Help:       "Latency of backend events dispatch",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"instance", "prefix"})
 )
 
@@ -68,7 +68,7 @@ func ReportProcessEventCompleted(prefix string, evts 
[]KvEvent) {
        if l == 0 {
                return
        }
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        now := time.Now()
        for _, evt := range evts {
                elapsed := float64(now.Sub(evt.CreateAt.Local()).Nanoseconds()) 
/ float64(time.Microsecond)
@@ -83,7 +83,7 @@ func ReportDispatchEventCompleted(prefix string, evts 
[]KvEvent) {
        if l == 0 {
                return
        }
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        now := time.Now()
        for _, evt := range evts {
                elapsed := float64(now.Sub(evt.CreateAt.Local()).Nanoseconds()) 
/ float64(time.Microsecond)
diff --git a/server/plugin/quota/buildin/buildin.go 
b/server/plugin/quota/buildin/buildin.go
index 3c5e10d..40cee0c 100644
--- a/server/plugin/quota/buildin/buildin.go
+++ b/server/plugin/quota/buildin/buildin.go
@@ -23,12 +23,10 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/log"
        mgr "github.com/apache/servicecomb-service-center/server/plugin"
        "github.com/apache/servicecomb-service-center/server/plugin/quota"
-       
"github.com/apache/servicecomb-service-center/server/plugin/quota/counter"
 )
 
 func init() {
        mgr.RegisterPlugin(mgr.Plugin{PName: mgr.QUOTA, Name: "buildin", New: 
New})
-       counter.RegisterCounterListener("buildin")
 }
 
 func New() mgr.Instance {
diff --git a/server/plugin/quota/counter/counter.go 
b/server/plugin/quota/counter/counter.go
deleted file mode 100644
index 768fde2..0000000
--- a/server/plugin/quota/counter/counter.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package counter
-
-import (
-       "github.com/apache/servicecomb-service-center/server/plugin/discovery"
-)
-
-var counters = Counters{}
-
-type Counter interface {
-       OnCreate(t discovery.Type, domainProject string)
-       OnDelete(t discovery.Type, domainProject string)
-}
-
-type Counters []Counter
-
-func (cs Counters) OnCreate(t discovery.Type, domainProject string) {
-       for _, c := range cs {
-               c.OnCreate(t, domainProject)
-       }
-}
-
-func (cs Counters) OnDelete(t discovery.Type, domainProject string) {
-       for _, c := range cs {
-               c.OnDelete(t, domainProject)
-       }
-}
-
-func RegisterCounter(c Counter) {
-       counters = append(counters, c)
-}
-
-func GetCounters() Counters {
-       return counters
-}
diff --git a/server/plugin/quota/counter/event.go 
b/server/plugin/quota/counter/event.go
deleted file mode 100644
index 898478e..0000000
--- a/server/plugin/quota/counter/event.go
+++ /dev/null
@@ -1,111 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package counter
-
-import (
-       "context"
-
-       "github.com/apache/servicecomb-service-center/pkg/log"
-       "github.com/apache/servicecomb-service-center/pkg/registry"
-       "github.com/apache/servicecomb-service-center/pkg/util"
-       "github.com/apache/servicecomb-service-center/server/core"
-       "github.com/apache/servicecomb-service-center/server/core/backend"
-       "github.com/apache/servicecomb-service-center/server/core/proto"
-       "github.com/apache/servicecomb-service-center/server/plugin/discovery"
-       serviceUtil 
"github.com/apache/servicecomb-service-center/server/service/util"
-       "github.com/astaxie/beego"
-)
-
-var (
-       SharedServiceIds util.ConcurrentMap
-)
-
-// ServiceIndexEventHandler counting the number of services
-// Deprecated: Use metrics instead.
-type ServiceIndexEventHandler struct {
-}
-
-func (h *ServiceIndexEventHandler) Type() discovery.Type {
-       return backend.ServiceIndex
-}
-
-func (h *ServiceIndexEventHandler) OnEvent(evt discovery.KvEvent) {
-       key := core.GetInfoFromSvcIndexKV(evt.KV.Key)
-       if core.IsShared(key) {
-               
SharedServiceIds.Put(key.Tenant+core.SPLIT+evt.KV.Value.(string), struct{}{})
-               return
-       }
-
-       switch evt.Type {
-       case registry.EVT_INIT, registry.EVT_CREATE:
-               GetCounters().OnCreate(h.Type(), key.Tenant)
-       case registry.EVT_DELETE:
-               GetCounters().OnDelete(h.Type(), key.Tenant)
-       default:
-       }
-}
-
-func NewServiceIndexEventHandler() *ServiceIndexEventHandler {
-       return &ServiceIndexEventHandler{}
-}
-
-// InstanceEventHandler counting the number of instances
-// Deprecated: Use metrics instead.
-type InstanceEventHandler struct {
-       SharedServiceIds map[string]struct{}
-}
-
-func (h *InstanceEventHandler) Type() discovery.Type {
-       return backend.INSTANCE
-}
-
-func (h *InstanceEventHandler) OnEvent(evt discovery.KvEvent) {
-       serviceID, _, domainProject := core.GetInfoFromInstKV(evt.KV.Key)
-       key := domainProject + core.SPLIT + serviceID
-       if _, ok := SharedServiceIds.Get(key); ok {
-               return
-       }
-
-       switch evt.Type {
-       case registry.EVT_INIT, registry.EVT_CREATE:
-               if domainProject == core.RegistryDomainProject {
-                       service, err := 
serviceUtil.GetService(context.Background(), domainProject, serviceID)
-                       if service == nil || err != nil {
-                               log.Errorf(err, "GetService[%s] failed", key)
-                               return
-                       }
-                       if core.IsShared(proto.MicroServiceToKey(domainProject, 
service)) {
-                               SharedServiceIds.Put(key, struct{}{})
-                               return
-                       }
-               }
-               GetCounters().OnCreate(h.Type(), domainProject)
-       case registry.EVT_DELETE:
-               GetCounters().OnDelete(h.Type(), domainProject)
-       }
-}
-
-func NewInstanceEventHandler() *InstanceEventHandler {
-       return &InstanceEventHandler{SharedServiceIds: 
make(map[string]struct{})}
-}
-
-func RegisterCounterListener(pluginName string) {
-       if pluginName != beego.AppConfig.DefaultString("quota_plugin", 
"buildin") {
-               return
-       }
-       discovery.AddEventHandler(NewServiceIndexEventHandler())
-       discovery.AddEventHandler(NewInstanceEventHandler())
-}
diff --git a/server/plugin/quota/counter/event_test.go 
b/server/plugin/quota/counter/event_test.go
deleted file mode 100644
index 7ad6699..0000000
--- a/server/plugin/quota/counter/event_test.go
+++ /dev/null
@@ -1,261 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package counter
-
-import (
-       "testing"
-
-       registry2 "github.com/apache/servicecomb-service-center/pkg/registry"
-       "github.com/apache/servicecomb-service-center/server/core"
-       "github.com/apache/servicecomb-service-center/server/core/backend"
-       "github.com/apache/servicecomb-service-center/server/plugin/discovery"
-)
-
-type mockCounter struct {
-       ServiceCount  int64
-       InstanceCount int64
-}
-
-func (c *mockCounter) OnCreate(t discovery.Type, domainProject string) {
-       switch t {
-       case backend.ServiceIndex:
-               c.ServiceCount++
-       case backend.INSTANCE:
-               c.InstanceCount++
-       default:
-               panic("error")
-       }
-}
-
-func (c *mockCounter) OnDelete(t discovery.Type, domainProject string) {
-       switch t {
-       case backend.ServiceIndex:
-               c.ServiceCount--
-       case backend.INSTANCE:
-               c.InstanceCount--
-       default:
-               panic("error")
-       }
-}
-
-func TestNewServiceIndexEventHandler(t *testing.T) {
-
-       var counter = mockCounter{}
-       RegisterCounter(&counter)
-       h := NewServiceIndexEventHandler()
-
-       cases := []discovery.KvEvent{
-               {
-                       Type: registry2.EVT_INIT,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      core.RegistryDomainProject,
-                                       Project:     "",
-                                       AppId:       core.RegistryAppID,
-                                       ServiceName: core.RegistryServiceName,
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_UPDATE,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      core.RegistryDomainProject,
-                                       Project:     "",
-                                       AppId:       core.RegistryAppID,
-                                       ServiceName: core.RegistryServiceName,
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_DELETE,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      core.RegistryDomainProject,
-                                       Project:     "",
-                                       AppId:       core.RegistryAppID,
-                                       ServiceName: core.RegistryServiceName,
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_CREATE,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      core.RegistryDomainProject,
-                                       Project:     "",
-                                       AppId:       core.RegistryAppID,
-                                       ServiceName: core.RegistryServiceName,
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_INIT,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      "a/b",
-                                       Project:     "",
-                                       AppId:       "c",
-                                       ServiceName: "d",
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_DELETE,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      "a/b",
-                                       Project:     "",
-                                       AppId:       "c",
-                                       ServiceName: "d",
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_UPDATE,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      "a/b",
-                                       Project:     "",
-                                       AppId:       "c",
-                                       ServiceName: "d",
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-               {
-                       Type: registry2.EVT_CREATE,
-                       KV: &discovery.KeyValue{
-                               Key: 
[]byte(core.GenerateServiceIndexKey(&registry2.MicroServiceKey{
-                                       Tenant:      "a/b",
-                                       Project:     "",
-                                       AppId:       "c",
-                                       ServiceName: "d",
-                                       Version:     "e",
-                                       Environment: "f",
-                                       Alias:       "g",
-                               })),
-                               Value: "1",
-                       },
-               },
-       }
-
-       for _, evt := range cases {
-               h.OnEvent(evt)
-       }
-       if counter.ServiceCount != 1 || counter.InstanceCount != 0 {
-               t.Fatal("TestNewServiceIndexEventHandler failed", counter)
-       }
-}
-
-func TestNewInstanceEventHandler(t *testing.T) {
-       var counter = mockCounter{}
-       RegisterCounter(&counter)
-       h := NewInstanceEventHandler()
-       SharedServiceIds.Put(core.RegistryDomainProject+core.SPLIT+"2", 
struct{}{})
-       cases := []discovery.KvEvent{
-               {
-                       Type: registry2.EVT_INIT,
-                       KV: &discovery.KeyValue{
-                               Key:   
[]byte(core.GenerateInstanceKey(core.RegistryDomainProject, "2", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_UPDATE,
-                       KV: &discovery.KeyValue{
-                               Key:   
[]byte(core.GenerateInstanceKey(core.RegistryDomainProject, "2", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_CREATE,
-                       KV: &discovery.KeyValue{
-                               Key:   
[]byte(core.GenerateInstanceKey(core.RegistryDomainProject, "2", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_DELETE,
-                       KV: &discovery.KeyValue{
-                               Key:   
[]byte(core.GenerateInstanceKey(core.RegistryDomainProject, "2", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_INIT,
-                       KV: &discovery.KeyValue{
-                               Key:   []byte(core.GenerateInstanceKey("a/b", 
"1", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_DELETE,
-                       KV: &discovery.KeyValue{
-                               Key:   []byte(core.GenerateInstanceKey("a/b", 
"1", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_UPDATE,
-                       KV: &discovery.KeyValue{
-                               Key:   []byte(core.GenerateInstanceKey("a/b", 
"1", "1")),
-                               Value: nil,
-                       },
-               },
-               {
-                       Type: registry2.EVT_CREATE,
-                       KV: &discovery.KeyValue{
-                               Key:   []byte(core.GenerateInstanceKey("a/b", 
"1", "1")),
-                               Value: nil,
-                       },
-               },
-       }
-
-       for _, evt := range cases {
-               h.OnEvent(evt)
-       }
-       if counter.InstanceCount != 1 || counter.ServiceCount != 0 {
-               t.Fatal("TestNewServiceIndexEventHandler failed", counter)
-       }
-}
diff --git a/server/plugin/registry/metrics.go 
b/server/plugin/registry/metrics.go
index 565e837..edda004 100644
--- a/server/plugin/registry/metrics.go
+++ b/server/plugin/registry/metrics.go
@@ -20,7 +20,7 @@ package registry
 import (
        "time"
 
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/prometheus/client_golang/prometheus"
 )
 
@@ -32,7 +32,7 @@ const (
 var (
        backendCounter = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      "backend_total",
                        Help:      "Gauge of the backend instance",
@@ -40,7 +40,7 @@ var (
 
        operationCounter = prometheus.NewCounterVec(
                prometheus.CounterOpts{
-                       Namespace: metric.FamilyName,
+                       Namespace: metrics.FamilyName,
                        Subsystem: "db",
                        Name:      "backend_operation_total",
                        Help:      "Counter of backend operation",
@@ -48,11 +48,11 @@ var (
 
        operationLatency = prometheus.NewSummaryVec(
                prometheus.SummaryOpts{
-                       Namespace:  metric.FamilyName,
+                       Namespace:  metrics.FamilyName,
                        Subsystem:  "db",
                        Name:       "backend_operation_durations_microseconds",
                        Help:       "Latency of backend operation",
-                       Objectives: metric.Pxx,
+                       Objectives: metrics.Pxx,
                }, []string{"instance", "operation", "status"})
 )
 
@@ -61,12 +61,12 @@ func init() {
 }
 
 func ReportBackendInstance(c int) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        backendCounter.WithLabelValues(instance).Set(float64(c))
 }
 
 func ReportBackendOperationCompleted(operation string, err error, start 
time.Time) {
-       instance := metric.InstanceName()
+       instance := metrics.InstanceName()
        elapsed := float64(time.Since(start).Nanoseconds()) / 
float64(time.Microsecond)
        status := success
        if err != nil {
diff --git a/server/plugin/tracing/pzipkin/common.go 
b/server/plugin/tracing/pzipkin/common.go
index 7ac0548..d427196 100644
--- a/server/plugin/tracing/pzipkin/common.go
+++ b/server/plugin/tracing/pzipkin/common.go
@@ -26,7 +26,7 @@ import (
 
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/server/core"
-       "github.com/apache/servicecomb-service-center/server/metric"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        "github.com/opentracing/opentracing-go"
        zipkin "github.com/openzipkin/zipkin-go-opentracing"
 )
@@ -45,7 +45,7 @@ func initTracer() {
                log.Errorf(err, "new tracing collector failed, use the noop 
tracer")
                return
        }
-       ipPort := metric.InstanceName()
+       ipPort := metrics.InstanceName()
        recorder := zipkin.NewRecorder(collector, false, ipPort, 
strings.ToLower(core.Service.ServiceName))
        tracer, err := zipkin.NewTracer(recorder,
                zipkin.TraceID128Bit(true),
diff --git a/server/service/event/domain_event_handler.go 
b/server/service/event/domain_event_handler.go
deleted file mode 100644
index 60fcf9b..0000000
--- a/server/service/event/domain_event_handler.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package event
-
-import (
-       "github.com/apache/servicecomb-service-center/pkg/registry"
-       "github.com/apache/servicecomb-service-center/server/core/backend"
-       "github.com/apache/servicecomb-service-center/server/plugin/discovery"
-       "github.com/apache/servicecomb-service-center/server/service/metrics"
-)
-
-// DomainEventHandler report domain & project total number
-type DomainEventHandler struct {
-}
-
-func (h *DomainEventHandler) Type() discovery.Type {
-       return backend.DOMAIN
-}
-
-func (h *DomainEventHandler) OnEvent(evt discovery.KvEvent) {
-       action := evt.Type
-       switch action {
-       case registry.EVT_INIT, registry.EVT_CREATE:
-               metrics.ReportDomains(1)
-       case registry.EVT_DELETE:
-               metrics.ReportDomains(-1)
-       }
-}
-
-func NewDomainEventHandler() *DomainEventHandler {
-       return &DomainEventHandler{}
-}
diff --git a/server/service/event/event.go b/server/service/event/event.go
index 8fe602f..bde1091 100644
--- a/server/service/event/event.go
+++ b/server/service/event/event.go
@@ -21,12 +21,10 @@ import (
 )
 
 func init() {
-       discovery.AddEventHandler(NewDomainEventHandler())
        discovery.AddEventHandler(NewServiceEventHandler())
        discovery.AddEventHandler(NewInstanceEventHandler())
        discovery.AddEventHandler(NewRuleEventHandler())
        discovery.AddEventHandler(NewTagEventHandler())
        discovery.AddEventHandler(NewDependencyEventHandler())
        discovery.AddEventHandler(NewDependencyRuleEventHandler())
-       discovery.AddEventHandler(NewSchemaSummaryEventHandler())
 }
diff --git a/server/service/event/instance_event_handler.go 
b/server/service/event/instance_event_handler.go
index 46f9b3a..b30871b 100644
--- a/server/service/event/instance_event_handler.go
+++ b/server/service/event/instance_event_handler.go
@@ -30,15 +30,9 @@ import (
        "github.com/apache/servicecomb-service-center/server/event"
        "github.com/apache/servicecomb-service-center/server/plugin/discovery"
        "github.com/apache/servicecomb-service-center/server/service/cache"
-       "github.com/apache/servicecomb-service-center/server/service/metrics"
        serviceUtil 
"github.com/apache/servicecomb-service-center/server/service/util"
 )
 
-const (
-       increaseOne = 1
-       decreaseOne = -1
-)
-
 // InstanceEventHandler is the handler to handle:
 // 1. report instance metrics
 // 2. recover the instance quota
@@ -57,33 +51,19 @@ func (h *InstanceEventHandler) OnEvent(evt 
discovery.KvEvent) {
        providerID, providerInstanceID, domainProject := 
apt.GetInfoFromInstKV(evt.KV.Key)
        idx := strings.Index(domainProject, "/")
        domainName := domainProject[:idx]
-       projectName := domainProject[idx+1:]
 
        ctx := context.WithValue(context.WithValue(context.Background(),
                util.CtxCacheOnly, "1"),
                util.CtxGlobal, "1")
 
-       var count float64 = increaseOne
        if action == pb.EVT_INIT {
-               metrics.ReportInstances(domainName, count)
-               ms, err := serviceUtil.GetService(ctx, domainProject, 
providerID)
-               if err != nil {
-                       log.Warnf("caught [%s] instance[%s/%s] event, endpoints 
%v, get cached provider's file failed",
-                               action, providerID, providerInstanceID, 
instance.Endpoints)
-                       return
-               }
-               frameworkName, frameworkVersion := getFramework(ms)
-               metrics.ReportFramework(domainName, projectName, frameworkName, 
frameworkVersion, count)
                return
        }
 
-       if action == pb.EVT_DELETE {
-               count = decreaseOne
-               if !apt.IsDefaultDomainProject(domainProject) {
-                       projectName := domainProject[idx+1:]
-                       serviceUtil.RemandInstanceQuota(
-                               util.SetDomainProject(context.Background(), 
domainName, projectName))
-               }
+       if action == pb.EVT_DELETE && 
!apt.IsDefaultDomainProject(domainProject) {
+               projectName := domainProject[idx+1:]
+               serviceUtil.RemandInstanceQuota(
+                       util.SetDomainProject(context.Background(), domainName, 
projectName))
        }
 
        // 查询服务版本信息
@@ -100,12 +80,6 @@ func (h *InstanceEventHandler) OnEvent(evt 
discovery.KvEvent) {
                return
        }
 
-       if action != pb.EVT_UPDATE {
-               frameworkName, frameworkVersion := getFramework(ms)
-               metrics.ReportInstances(domainName, count)
-               metrics.ReportFramework(domainName, projectName, frameworkName, 
frameworkVersion, count)
-       }
-
        log.Infof("caught [%s] service[%s][%s/%s/%s/%s] instance[%s] event, 
endpoints %v",
                action, providerID, ms.Environment, ms.AppId, ms.ServiceName, 
ms.Version,
                providerInstanceID, instance.Endpoints)
diff --git a/server/service/event/schema_summary_event_handler.go 
b/server/service/event/schema_summary_event_handler.go
deleted file mode 100644
index 4aba1c0..0000000
--- a/server/service/event/schema_summary_event_handler.go
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package event
-
-import (
-       "strings"
-
-       pb "github.com/apache/servicecomb-service-center/pkg/registry"
-       "github.com/apache/servicecomb-service-center/server/core"
-       "github.com/apache/servicecomb-service-center/server/core/backend"
-       "github.com/apache/servicecomb-service-center/server/plugin/discovery"
-       "github.com/apache/servicecomb-service-center/server/service/metrics"
-)
-
-// SchemaSummaryEventHandler report schema metrics
-type SchemaSummaryEventHandler struct {
-}
-
-func (h *SchemaSummaryEventHandler) Type() discovery.Type {
-       return backend.SchemaSummary
-}
-
-func (h *SchemaSummaryEventHandler) OnEvent(evt discovery.KvEvent) {
-       action := evt.Type
-       switch action {
-       case pb.EVT_INIT, pb.EVT_CREATE, pb.EVT_DELETE:
-               domainProject, _, _ := 
core.GetInfoFromSchemaSummaryKV(evt.KV.Key)
-               idx := strings.Index(domainProject, "/")
-               newDomain := domainProject[:idx]
-               if pb.EVT_DELETE == action {
-                       metrics.ReportSchemas(newDomain, -1)
-               } else {
-                       metrics.ReportSchemas(newDomain, 1)
-               }
-       default:
-       }
-}
-
-func NewSchemaSummaryEventHandler() *SchemaSummaryEventHandler {
-       return &SchemaSummaryEventHandler{}
-}
diff --git a/server/service/event/service_event_handler.go 
b/server/service/event/service_event_handler.go
index e45fab0..7cdbd7f 100644
--- a/server/service/event/service_event_handler.go
+++ b/server/service/event/service_event_handler.go
@@ -27,7 +27,6 @@ import (
        "github.com/apache/servicecomb-service-center/server/core/proto"
        "github.com/apache/servicecomb-service-center/server/plugin/discovery"
        "github.com/apache/servicecomb-service-center/server/service/cache"
-       "github.com/apache/servicecomb-service-center/server/service/metrics"
        serviceUtil 
"github.com/apache/servicecomb-service-center/server/service/util"
 )
 
@@ -45,7 +44,6 @@ func (h *ServiceEventHandler) Type() discovery.Type {
 func (h *ServiceEventHandler) OnEvent(evt discovery.KvEvent) {
        ms := evt.KV.Value.(*pb.MicroService)
        _, domainProject := core.GetInfoFromSvcKV(evt.KV.Key)
-       fn, fv := getFramework(ms)
 
        switch evt.Type {
        case pb.EVT_INIT, pb.EVT_CREATE:
@@ -56,11 +54,6 @@ func (h *ServiceEventHandler) OnEvent(evt discovery.KvEvent) 
{
                if err != nil {
                        log.Errorf(err, "new domain[%s] or project[%s] failed", 
newDomain, newProject)
                }
-               metrics.ReportServices(newDomain, fn, fv, 1)
-       case pb.EVT_DELETE:
-               domainName := domainProject[:strings.Index(domainProject, "/")]
-               metrics.ReportServices(domainName, fn, fv, -1)
-       default:
        }
 
        if evt.Type == pb.EVT_INIT {
@@ -75,17 +68,6 @@ func (h *ServiceEventHandler) OnEvent(evt discovery.KvEvent) 
{
        cache.FindInstances.Remove(providerKey)
 }
 
-func getFramework(ms *pb.MicroService) (string, string) {
-       if ms.Framework != nil && len(ms.Framework.Name) > 0 {
-               version := ms.Framework.Version
-               if len(ms.Framework.Version) == 0 {
-                       version = "UNKNOWN"
-               }
-               return ms.Framework.Name, version
-       }
-       return "UNKNOWN", "UNKNOWN"
-}
-
 func NewServiceEventHandler() *ServiceEventHandler {
        return &ServiceEventHandler{}
 }

Reply via email to