Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Switch from grpc-ecosystem/go-grpc-prometheus to grpc-ecosystem/go-grpc-middleware/providers/prometheus #19195

Conversation

dims
Copy link
Contributor

@dims dims commented Jan 14, 2025

Reviving previous effort from: #17974

xref: kubernetes/kubernetes#128583

Added a new test to make sure we are not missing any expected metrics.

Please read https://github.com/etcd-io/etcd/blob/main/CONTRIBUTING.md#contribution-flow.

@k8s-ci-robot
Copy link

Hi @dims. Thanks for your PR.

I'm waiting for a etcd-io member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@dims dims force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch from f7123cd to f80c5b2 Compare January 14, 2025 22:09
@ivanvc
Copy link
Member

ivanvc commented Jan 14, 2025

/ok-to-test

@dims
Copy link
Contributor Author

dims commented Jan 14, 2025

thanks @ivanvc

Copy link

codecov bot commented Jan 14, 2025

Codecov Report

Attention: Patch coverage is 60.00000% with 6 lines in your changes missing coverage. Please review.

Project coverage is 68.84%. Comparing base (f5973c9) to head (6d8c6af).
Report is 15 commits behind head on main.

Files with missing lines Patch % Lines
server/etcdmain/grpc_proxy.go 0.00% 4 Missing ⚠️
server/etcdserver/api/v3rpc/grpc.go 80.00% 1 Missing and 1 partial ⚠️
Additional details and impacted files
Files with missing lines Coverage Δ
server/config/config.go 80.23% <ø> (ø)
server/embed/etcd.go 76.79% <100.00%> (+0.30%) ⬆️
server/etcdserver/api/v3rpc/metrics.go 100.00% <ø> (ø)
server/etcdserver/api/v3rpc/grpc.go 95.12% <80.00%> (-4.88%) ⬇️
server/etcdmain/grpc_proxy.go 14.44% <0.00%> (-0.08%) ⬇️

... and 26 files with indirect coverage changes

@@            Coverage Diff             @@
##             main   #19195      +/-   ##
==========================================
- Coverage   68.85%   68.84%   -0.01%     
==========================================
  Files         420      420              
  Lines       35693    35701       +8     
==========================================
+ Hits        24577    24579       +2     
- Misses       9692     9702      +10     
+ Partials     1424     1420       -4     

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f5973c9...6d8c6af. Read the comment docs.

@dims
Copy link
Contributor Author

dims commented Jan 14, 2025

/test pull-etcd-integration-2-cpu-amd64

@dims
Copy link
Contributor Author

dims commented Jan 15, 2025

/assign @ahrtr @serathius

server/embed/etcd.go Outdated Show resolved Hide resolved
@ahrtr
Copy link
Member

ahrtr commented Jan 15, 2025

Thanks @dims for the PR.

I did some sanity test on this PR, and compared it with the existing main branch.

  • Confirmed that this PR can generate the same gRPC counter metrics as the existing main branch, including
    • grpc_server_handled_total
    • grpc_server_msg_received_total
    • grpc_server_msg_sent_total
    • grpc_server_started_total
  • It couldn't generate the histograms metrics, but the existing main branch can.
    • grpc_server_handling_seconds_bucket
    • grpc_server_handling_seconds_count
    • grpc_server_handling_seconds_sum

Also references:

@serathius
Copy link
Member

Do we need a test to confirm that no metric was removed?

@dims
Copy link
Contributor Author

dims commented Jan 17, 2025

It couldn't generate the histograms metrics, but the existing main branch can.
grpc_server_handling_seconds_bucket
grpc_server_handling_seconds_count
grpc_server_handling_seconds_sum

@ahrtr did you run with --metrics 'extensive' option? or let it default to 'basic'?

@dims
Copy link
Contributor Author

dims commented Jan 17, 2025

Do we need a test to confirm that no metric was removed?

i think so for future-proofing!

@ahrtr
Copy link
Member

ahrtr commented Jan 17, 2025

@ahrtr did you run with --metrics 'extensive' option?

YES, I executed the same command on this PR and the main branch. The main branch was working as expected, but this PR did not generate the histograms metrics.

@dims dims force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch from f80c5b2 to 03554ca Compare January 17, 2025 19:44
@dims
Copy link
Contributor Author

dims commented Jan 17, 2025

@ahrtr found the issue and hopefully fixed it. Added a test as well. However, please check if i broke anything in the process of threading the option through to both the test suite and the main binary.

@dims dims force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch 2 times, most recently from cafe302 to d3fe3e2 Compare January 17, 2025 20:09
@dims dims force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch 2 times, most recently from 7c41ce2 to 95a93bf Compare January 30, 2025 13:39
…pc-middleware/providers/prometheus

Signed-off-by: Davanum Srinivas <[email protected]>
@dims dims force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch from 95a93bf to c3e4df6 Compare January 30, 2025 13:44
server/etcdserver/api/v3rpc/grpc.go Outdated Show resolved Hide resolved
tests/integration/clientv3/metrics_test.go Outdated Show resolved Hide resolved
@ahrtr
Copy link
Member

ahrtr commented Jan 30, 2025

I also see a difference when comparing this PR with the main branch.

When there is no any traffic at all, this PR generates nothing for grpc_server_handling_seconds,

curl http://127.0.0.1:2379/metrics | grep grpc_server_handling_seconds

But the main branch generates/exposes all metrics with zero values, see below

Metrics with zero values generated by main branch
# HELP grpc_server_handling_seconds Histogram of response latency (seconds) of gRPC that had been application-level handled by the server.
# TYPE grpc_server_handling_seconds histogram
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Alarm",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="AuthDisable",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="AuthEnable",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="AuthStatus",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Authenticate",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Check",grpc_service="grpc.health.v1.Health",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Compact",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Defragment",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="DeleteRange",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Downgrade",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Hash",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="HashKV",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="LeaseGrant",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"} 0
grpc_server_handling_seconds_count{grpc_method="LeaseKeepAlive",grpc_service="etcdserverpb.Lease",grpc_type="bidi_stream"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="LeaseLeases",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="LeaseRevoke",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="LeaseTimeToLive",grpc_service="etcdserverpb.Lease",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="MemberAdd",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="MemberList",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="MemberPromote",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="MemberRemove",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="MemberUpdate",grpc_service="etcdserverpb.Cluster",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="MoveLeader",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Put",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Range",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="RoleAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="RoleDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="RoleGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="RoleGrantPermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="RoleList",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="RoleRevokePermission",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"} 0
grpc_server_handling_seconds_count{grpc_method="Snapshot",grpc_service="etcdserverpb.Maintenance",grpc_type="server_stream"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Status",grpc_service="etcdserverpb.Maintenance",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="Txn",grpc_service="etcdserverpb.KV",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserAdd",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserChangePassword",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserDelete",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserGet",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserGrantRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserList",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_count{grpc_method="UserRevokeRole",grpc_service="etcdserverpb.Auth",grpc_type="unary"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"} 0
grpc_server_handling_seconds_count{grpc_method="Watch",grpc_service="etcdserverpb.Watch",grpc_type="bidi_stream"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.005"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.01"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.025"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.05"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.25"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="0.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="1"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="2.5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="5"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="10"} 0
grpc_server_handling_seconds_bucket{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream",le="+Inf"} 0
grpc_server_handling_seconds_sum{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"} 0
grpc_server_handling_seconds_count{grpc_method="Watch",grpc_service="grpc.health.v1.Health",grpc_type="server_stream"} 0

@ahrtr
Copy link
Member

ahrtr commented Jan 30, 2025

I also see a difference when comparing this PR with the main branch.

When there is no any traffic at all, this PR generates nothing for grpc_server_handling_seconds,

curl http://127.0.0.1:2379/metrics | grep grpc_server_handling_seconds

But the main branch generates/exposes all metrics with zero values, see below

@dims Just confirmed that the following patch resolves this difference perfectly!

$ git diff
diff --git a/server/etcdserver/api/v3rpc/grpc.go b/server/etcdserver/api/v3rpc/grpc.go
index 5ef831816..abfa9a2d0 100644
--- a/server/etcdserver/api/v3rpc/grpc.go
+++ b/server/etcdserver/api/v3rpc/grpc.go
@@ -42,7 +42,11 @@ func Server(s *etcdserver.EtcdServer, tls *tls.Config, interceptor grpc.UnarySer
                opts = append(opts, grpc.Creds(credentials.NewTransportCredential(tls)))
        }
 
-       serverMetrics := grpc_prometheus.NewServerMetrics()
+       var mopts []grpc_prometheus.ServerMetricsOption
+       if s.Cfg.Metrics == "extensive" {
+               mopts = append(mopts, grpc_prometheus.WithServerHandlingTimeHistogram())
+       }
+       serverMetrics := grpc_prometheus.NewServerMetrics(mopts...)
        err := prometheus.Register(serverMetrics)
        if err != nil {
                s.Cfg.Logger.Warn("etcdserver: failed to register grpc metrics: ", zap.Error(err))
@@ -63,11 +67,11 @@ func Server(s *etcdserver.EtcdServer, tls *tls.Config, interceptor grpc.UnarySer
        }
 
        // If extensive metrics are enabled, register a histogram to track the reponse latency of gRPC requests
-       if s.Cfg.Metrics == "extensive" {
+       /*if s.Cfg.Metrics == "extensive" {
                unaryInterceptor, streamInterceptor := constructExtensiveMetricsInterceptors()
                chainUnaryInterceptors = append(chainUnaryInterceptors, unaryInterceptor)
                chainStreamInterceptors = append(chainStreamInterceptors, streamInterceptor)
-       }
+       }*/
 
        if s.Cfg.ExperimentalEnableDistributedTracing {
                chainUnaryInterceptors = append(chainUnaryInterceptors, otelgrpc.UnaryServerInterceptor(s.Cfg.ExperimentalTracerOptions...))

Signed-off-by: Davanum Srinivas <[email protected]>
@dims
Copy link
Contributor Author

dims commented Jan 31, 2025

@ahrtr Done! i added a separate commit with the suggested changes (so it is easier to drop it and merge the original commit if we want to for some reason!)

@dims
Copy link
Contributor Author

dims commented Jan 31, 2025

@ahrtr as i mentioned earlier tests are failing with with the suggested changes

    metrics_test.go:326: Expected metric grpc_server_handling_seconds not found in generated metrics

@ahrtr
Copy link
Member

ahrtr commented Jan 31, 2025

@ahrtr as i mentioned earlier tests are failing with with the suggested changes

    metrics_test.go:326: Expected metric grpc_server_handling_seconds not found in generated metrics

It's weird.

  • I manually verified your PR and confirmed that the grpc_server_handling_seconds isn't missing.
  • The e2e test case TestNoMetricsMissing passed. It also confirms that the metrics isn't missing,
    func TestNoMetricsMissing(t *testing.T) {
  • I also manually executed your integration test case TestAllMetricsGenerated locally on both MacBook and Linux sever, also both passed.

As mentioned in #19242 (comment), the integration test does too much hack in both test and the etcdserver's bootstrap workflow, so it's hard to ensure that it's testing the exact same as the production implementation.

Can you print the generatedMetrics to double confirm?

@ahrtr ahrtr force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch from 397cf13 to e88fda2 Compare January 31, 2025 13:54
@ahrtr
Copy link
Member

ahrtr commented Jan 31, 2025

When we execute only one integration test (your test TestAllMetricsGenerated), then everything is running well. If we execute multiple integration test cases, then it will fail to register the metrics, because the DefaultRegistereris a global variable.

While e2e test case doesn't have this problem, because each e2e test case starts a new process.

So I propose to remove the integration test case. @dims

@ahrtr ahrtr force-pushed the switch-from-grpc-ecosystem/go-grpc-prometheus-to-grpc-ecosystem/go-grpc-middleware/providers/prometheus-take-2 branch from e88fda2 to 1f33baf Compare January 31, 2025 14:31
Signed-off-by: Benjamin Wang <[email protected]>
@dims
Copy link
Contributor Author

dims commented Jan 31, 2025

So I propose to remove the integration test case. @dims

+1 from me @ahrtr

@ahrtr
Copy link
Member

ahrtr commented Jan 31, 2025

@dims @serathius This PR should be ready to go. Please take a look. Also cc @fuweid

Copy link
Member

@ahrtr ahrtr left a comment

Choose a reason for hiding this comment

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

LGTM

Thanks @dims for the PR, also happy for the cooperation.

@k8s-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ahrtr, dims, fuweid

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@dims
Copy link
Contributor Author

dims commented Jan 31, 2025

@ahrtr this was a fun one! learnt a lot!

@ahrtr ahrtr merged commit 83ff4ff into etcd-io:main Jan 31, 2025
35 checks passed
aladesawe pushed a commit to aladesawe/etcd that referenced this pull request Feb 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

6 participants