|
205 | 205 | {
|
206 | 206 | name: 'k8s.rules.pod_owner',
|
207 | 207 | rules: [
|
| 208 | + // workload aggregation for replicasets |
| 209 | + { |
| 210 | + record: 'namespace_workload_pod:kube_pod_owner:relabel', |
| 211 | + expr: ||| |
| 212 | + max by (%(clusterLabel)s, namespace, workload, pod) ( |
| 213 | + label_replace( |
| 214 | + label_replace( |
| 215 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="ReplicaSet"}, |
| 216 | + "replicaset", "$1", "owner_name", "(.*)" |
| 217 | + ) * on (%(clusterLabel)s, replicaset, namespace) group_left(owner_name) topk by(%(clusterLabel)s, replicaset, namespace) ( |
| 218 | + 1, max by (%(clusterLabel)s, replicaset, namespace, owner_name) ( |
| 219 | + kube_replicaset_owner{%(kubeStateMetricsSelector)s, owner_kind=""} |
| 220 | + ) |
| 221 | + ), |
| 222 | + "workload", "$1", "replicaset", "(.*)" |
| 223 | + ) |
| 224 | + ) |
| 225 | + ||| % $._config, |
| 226 | + labels: { |
| 227 | + workload_type: 'replicaset', |
| 228 | + }, |
| 229 | + }, |
208 | 230 | // workload aggregation for deployments
|
209 | 231 | {
|
210 | 232 | record: 'namespace_workload_pod:kube_pod_owner:relabel',
|
|
214 | 236 | label_replace(
|
215 | 237 | kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="ReplicaSet"},
|
216 | 238 | "replicaset", "$1", "owner_name", "(.*)"
|
217 |
| - ) * on(replicaset, namespace) group_left(owner_name) topk by(replicaset, namespace) ( |
218 |
| - 1, max by (replicaset, namespace, owner_name) ( |
219 |
| - kube_replicaset_owner{%(kubeStateMetricsSelector)s} |
| 239 | + ) * on(replicaset, namespace, %(clusterLabel)s) group_left(owner_name) topk by(%(clusterLabel)s, replicaset, namespace) ( |
| 240 | + 1, max by (%(clusterLabel)s, replicaset, namespace, owner_name) ( |
| 241 | + kube_replicaset_owner{%(kubeStateMetricsSelector)s, owner_kind="Deployment"} |
220 | 242 | )
|
221 | 243 | ),
|
222 | 244 | "workload", "$1", "owner_name", "(.*)"
|
|
227 | 249 | workload_type: 'deployment',
|
228 | 250 | },
|
229 | 251 | },
|
| 252 | + // workload aggregation for daemonsets |
230 | 253 | {
|
231 | 254 | record: 'namespace_workload_pod:kube_pod_owner:relabel',
|
232 | 255 | expr: |||
|
|
241 | 264 | workload_type: 'daemonset',
|
242 | 265 | },
|
243 | 266 | },
|
| 267 | + // workload aggregation for statefulsets |
244 | 268 | {
|
245 | 269 | record: 'namespace_workload_pod:kube_pod_owner:relabel',
|
246 | 270 | expr: |||
|
247 | 271 | max by (%(clusterLabel)s, namespace, workload, pod) (
|
248 | 272 | label_replace(
|
249 | 273 | kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="StatefulSet"},
|
250 |
| - "workload", "$1", "owner_name", "(.*)" |
251 |
| - ) |
| 274 | + "workload", "$1", "owner_name", "(.*)") |
252 | 275 | )
|
253 | 276 | ||| % $._config,
|
254 | 277 | labels: {
|
255 | 278 | workload_type: 'statefulset',
|
256 | 279 | },
|
257 | 280 | },
|
| 281 | + // backwards compatibility for jobs |
| 282 | + { |
| 283 | + record: 'namespace_workload_pod:kube_pod_owner:relabel', |
| 284 | + expr: ||| |
| 285 | + group by (%(clusterLabel)s, namespace, workload, pod) ( |
| 286 | + label_join( |
| 287 | + group by (%(clusterLabel)s, namespace, job_name, pod, owner_name) ( |
| 288 | + label_join( |
| 289 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="Job"} |
| 290 | + , "job_name", "", "owner_name") |
| 291 | + ) |
| 292 | + * on (%(clusterLabel)s, namespace, job_name) group_left() |
| 293 | + group by (%(clusterLabel)s, namespace, job_name) ( |
| 294 | + kube_job_owner{%(kubeStateMetricsSelector)s, owner_kind=~"Pod|"} |
| 295 | + ) |
| 296 | + , "workload", "", "owner_name") |
| 297 | + ) |
| 298 | + ||| % $._config, |
| 299 | + labels: { |
| 300 | + workload_type: 'job', |
| 301 | + }, |
| 302 | + }, |
| 303 | + // workload aggregation for barepods |
258 | 304 | {
|
259 | 305 | record: 'namespace_workload_pod:kube_pod_owner:relabel',
|
260 | 306 | expr: |||
|
261 | 307 | max by (%(clusterLabel)s, namespace, workload, pod) (
|
262 | 308 | label_replace(
|
263 |
| - kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="Job"}, |
264 |
| - "workload", "$1", "owner_name", "(.*)" |
265 |
| - ) |
| 309 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="", owner_name=""}, |
| 310 | + "workload", "$1", "pod", "(.+)") |
266 | 311 | )
|
267 | 312 | ||| % $._config,
|
268 | 313 | labels: {
|
269 |
| - workload_type: 'job', |
| 314 | + workload_type: 'barepod', |
270 | 315 | },
|
271 | 316 | },
|
| 317 | + // workload aggregation for staticpods |
| 318 | + { |
| 319 | + record: 'namespace_workload_pod:kube_pod_owner:relabel', |
| 320 | + expr: ||| |
| 321 | + max by (%(clusterLabel)s, namespace, workload, pod) ( |
| 322 | + label_replace( |
| 323 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="Node"}, |
| 324 | + "workload", "$1", "pod", "(.+)") |
| 325 | + ) |
| 326 | + ||| % $._config, |
| 327 | + labels: { |
| 328 | + workload_type: 'staticpod', |
| 329 | + }, |
| 330 | + }, |
| 331 | + // workload aggregation for non-standard types (jobs, replicasets) |
| 332 | + { |
| 333 | + record: 'namespace_workload_pod:kube_pod_owner:relabel', |
| 334 | + expr: ||| |
| 335 | + group by (%(clusterLabel)s, namespace, workload, workload_type, pod) ( |
| 336 | + label_join( |
| 337 | + label_join( |
| 338 | + group by (%(clusterLabel)s, namespace, job_name, pod) ( |
| 339 | + label_join( |
| 340 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="Job"} |
| 341 | + , "job_name", "", "owner_name") |
| 342 | + ) |
| 343 | + * on (%(clusterLabel)s, namespace, job_name) group_left(owner_kind, owner_name) |
| 344 | + group by (%(clusterLabel)s, namespace, job_name, owner_kind, owner_name) ( |
| 345 | + kube_job_owner{%(kubeStateMetricsSelector)s, owner_kind!="Pod", owner_kind!=""} |
| 346 | + ) |
| 347 | + , "workload", "", "owner_name") |
| 348 | + , "workload_type", "", "owner_kind") |
| 349 | + |
| 350 | + OR |
| 351 | +
|
| 352 | + label_replace( |
| 353 | + label_replace( |
| 354 | + label_replace( |
| 355 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind="ReplicaSet"} |
| 356 | + , "replicaset", "$1", "owner_name", "(.+)" |
| 357 | + ) |
| 358 | + * on(%(clusterLabel)s, namespace, replicaset) group_left(owner_kind, owner_name) |
| 359 | + group by (%(clusterLabel)s, namespace, replicaset, owner_kind, owner_name) ( |
| 360 | + kube_replicaset_owner{%(kubeStateMetricsSelector)s, owner_kind!="Deployment", owner_kind!=""} |
| 361 | + ) |
| 362 | + , "workload", "$1", "owner_name", "(.+)") |
| 363 | + OR |
| 364 | + label_replace( |
| 365 | + group by (%(clusterLabel)s, namespace, pod, owner_name, owner_kind) ( |
| 366 | + kube_pod_owner{%(kubeStateMetricsSelector)s, owner_kind!="ReplicaSet", owner_kind!="DaemonSet", owner_kind!="StatefulSet", owner_kind!="Job", owner_kind!="Node", owner_kind!=""} |
| 367 | + ) |
| 368 | + , "workload", "$1", "owner_name", "(.+)" |
| 369 | + ) |
| 370 | + , "workload_type", "$1", "owner_kind", "(.+)") |
| 371 | + ) |
| 372 | + ||| % $._config, |
| 373 | + }, |
272 | 374 | ],
|
273 | 375 | },
|
274 | 376 | ],
|
|
0 commit comments