Skip to content

Can I create custom label to metric by GrpcMonitoringInterceptor? #25

Description

@kkpolak

Hi @dinowernli and other creators.
I want to add custom label "errorCode" to my metric. Is it even possible?
I have such Configuration of GrpcMonitoringInterceptor:

@GRpcGlobalInterceptor
public class GrpcMonitoringInterceptor implements ServerInterceptor {

  private final MonitoringServerInterceptor interceptor;

  public GrpcMonitoringInterceptor(CollectorRegistry collectorRegistry) {
    Configuration configuration = Configuration
        .cheapMetricsOnly().withCollectorRegistry(collectorRegistry);
    interceptor = MonitoringServerInterceptor.create(configuration);
  }

  @Override
  public <ReqT, RespT> Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers,
      ServerCallHandler<ReqT, RespT> next) {
    return interceptor.interceptCall(call, headers, next);
  }
}

I have such grpc_server_handled_total metric:

expr: |
              ((sum by (job, namespace, grpc_method) ((grpc_server_handled_total{job=~"wallet.*",code!="OK"}) - (grpc_server_handled_total{job=~"wallet.*",code!="OK"}  offset 5m))) / sum by (job, namespace, grpc_method) ((grpc_server_handled_total{job=~"wallet.*"}) - (grpc_server_handled_total{job=~"wallet.*"} offset 5m)) * 100) > 10 and (sum by (job, namespace, grpc_method) ((grpc_server_handled_total{job=~"wallet.*"}) - (grpc_server_handled_total{job=~"wallet.*"} offset 5m)) > 20)

I want to change the metric to this:

((sum by (job, namespace, grpc_method) ((grpc_server_handled_total{job=~"wallet.*",code!="OK",errorCode!="IP_BLOCKED"}) - (grpc_server_handled_total{job=~"wallet.*",code!="OK",errorCode!="IP_BLOCKED"}  offset 5m))) / sum by (job, namespace, grpc_method) ((grpc_server_handled_total{job=~"wallet.*"}) - (grpc_server_handled_total{job=~"wallet.*"} offset 5m)) * 100) > 10 and (sum by (job, namespace, grpc_method) ((grpc_server_handled_total{job=~"wallet.*"}) - (grpc_server_handled_total{job=~"wallet.*"} offset 5m)) > 20)

I tried to make some changes with collectorRegistry when intercepotr is creating, but it doesn't work.

  public GrpcMonitoringInterceptor(CollectorRegistry collectorRegistry) {
    Counter tmp = Counter.build()
        .namespace("grpc")
        .subsystem("server")
        .name("handled_total")
        .labelNames("grpc_type", "grpc_service", "grpc_method", "code", "errorCode")
        .help("Total number of RPCs completed on the server, regardless of success or failure.").register();
    collectorRegistry.register(tmp);
  public GrpcMonitoringInterceptor(CollectorRegistry collectorRegistry) {
    Counter tmp = Counter.build()
        .namespace("grpc")
        .subsystem("server")
        .name("handled_total")
        .labelNames("grpc_type", "grpc_service", "grpc_method", "code", "errorCode")
        .help("Total number of RPCs completed on the server, regardless of success or failure.").register();
    collectorRegistry.register(tmp);

    Configuration configuration = Configuration
        .cheapMetricsOnly().withCollectorRegistry(collectorRegistry);
    interceptor = MonitoringServerInterceptor.create(configuration);
  }
    Configuration configuration = Configuration
        .cheapMetricsOnly().withCollectorRegistry(collectorRegistry);
    interceptor = MonitoringServerInterceptor.create(configuration);
  }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions