Repository: kubernetes
Issue: response_sizes metrics for verb=WATCH is only present for built in resources.
Labels: kind/bug,sig/api-machinery,triage/accepted

### What happened?

The `apiserver_response_sizes` correctly report `GET` and `LIST` metrics for all resources. However, for `WATCH`, its only present for built in resources. This means resources defined in CustomResourceDefinitions are not present.

Its not 100% clear to me what the expected behavior was when it was introduced (https://github.com/kubernetes/kubernetes/pull/49117), and if the plan was to not have `watch` metrics here - but we have seen it useful in practice. The verb definition here has changed a bit as well, and https://github.com/kubernetes/kubernetes/pull/93523 + https://github.com/kubernetes/kubernetes/pull/81660 split the definition of `verb` and `reportedVerb`. And given this metric is treated as STABLE now, it feels wrong to me to remove the existing `WATCH` metrics here.

Here is an example of how it works today;

```bash
$ kubectl get --raw /metrics | egrep 'apiserver_response_sizes_sum\{component="apiserver",group="(cilium.io)?",resource="(pods|ciliumnetworkpolicies)",scope="cluster"'
apiserver_response_sizes_sum{component="apiserver",group="",resource="pods",scope="cluster",subresource="",verb="LIST",version="v1"} 1.00624648e+08
apiserver_response_sizes_sum{component="apiserver",group="",resource="pods",scope="cluster",subresource="",verb="WATCH",version="v1"} 2.6141637319e+10
apiserver_response_sizes_sum{component="apiserver",group="cilium.io",resource="ciliumnetworkpolicies",scope="cluster",subresource="",verb="LIST",version="v2"} 1.723691e+06
```

As seen both resources have `LIST` metrics, but only the built in resource `pods` has `WATCH`.

### What did you expect to happen?

I would expect the above request to also contain WATCH for the custom type as well;
```bash
$ kubectl get --raw /metrics | egrep 'apiserver_response_sizes_sum\{component="apiserver",group="(cilium.io)?",resource="(pods|ciliumnetworkpolicies)",scope="cluster"'
apiserver_response_sizes_sum{component="apiserver",group="",resource="pods",scope="cluster",subresource="",verb="LIST",version="v1"} 1.00624648e+08
apiserver_response_sizes_sum{component="apiserver",group="",resource="pods",scope="cluster",subresource="",verb="WATCH",version="v1"} 2.6141637319e+10
apiserver_response_sizes_sum{component="apiserver",group="cilium.io",resource="ciliumnetworkpolicies",scope="cluster",subresource="",verb="LIST",version="v2"} 1.723691e+06
apiserver_response_sizes_sum{component="apiserver",group="cilium.io",resource="ciliumnetworkpolicies",scope="cluster",subresource="",verb="WATCH",version="v2"} 1.090217513e+09
```

### How can we reproduce it (as minimally and precisely as possible)?

Install a CRD, have at least one watcher on it, and use `kubectl get --raw /metrics | grep 'apiserver_response_sizes_sum'` and look for the `WATCH` metric of that resource.

### Anything else we need to know?

_No response_

### Kubernetes version

<details>

```console
$ kubectl version
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.31.0
```

Seems to be reproduceable across all recent versions.

</details>


### Cloud provider

<details>
n/a - can reproduce in kind.
</details>


### OS version

<details>

n/a.

```console
# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here
```

</details>


### Install tools

<details>

</details>


### Container runtime (CRI) and version (if applicable)

<details>

</details>


### Related plugins (CNI, CSI, ...) and versions (if applicable)

<details>

</details>