{
  "description": "PodMonitoring defines monitoring for a set of pods, scoped to pods\nwithin the PodMonitoring's namespace.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "Specification of desired Pod selection for target discovery by\nPrometheus.",
      "properties": {
        "endpoints": {
          "description": "The endpoints to scrape on the selected pods.",
          "items": {
            "description": "ScrapeEndpoint specifies a Prometheus metrics endpoint to scrape.",
            "properties": {
              "authorization": {
                "description": "Authorization is the HTTP authorization credentials for the targets.",
                "properties": {
                  "credentials": {
                    "description": "Credentials uses the secret as the credentials (token) for the authentication header.",
                    "properties": {
                      "secret": {
                        "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                        "properties": {
                          "key": {
                            "description": "Key of the secret to select from. Must be a valid secret key.",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the secret to select from.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": {
                    "description": "Type is the authentication type. Defaults to Bearer.\nBasic will cause an error, as the BasicAuth object should be used instead.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "basicAuth": {
                "description": "BasicAuth is the HTTP basic authentication credentials for the targets.",
                "properties": {
                  "password": {
                    "description": "Password uses the secret as the BasicAuth password.",
                    "properties": {
                      "secret": {
                        "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                        "properties": {
                          "key": {
                            "description": "Key of the secret to select from. Must be a valid secret key.",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the secret to select from.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "username": {
                    "description": "Username is the BasicAuth username.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "interval": {
                "default": "1m",
                "description": "Interval at which to scrape metrics. Must be a valid Prometheus duration.",
                "pattern": "^((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)$",
                "type": "string"
              },
              "metricRelabeling": {
                "description": "Relabeling rules for metrics scraped from this endpoint. Relabeling rules that\noverride protected target labels (project_id, location, cluster, namespace, job,\ninstance, top_level_controller, top_level_controller_type, or __address__) are\nnot permitted. The labelmap action is not permitted in general.",
                "items": {
                  "description": "RelabelingRule defines a single Prometheus relabeling rule.",
                  "properties": {
                    "action": {
                      "description": "Action to perform based on regex matching. Defaults to 'replace'.",
                      "type": "string"
                    },
                    "modulus": {
                      "description": "Modulus to take of the hash of the source label values.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "regex": {
                      "description": "Regular expression against which the extracted value is matched. Defaults to '(.*)'.",
                      "type": "string"
                    },
                    "replacement": {
                      "description": "Replacement value against which a regex replace is performed if the\nregular expression matches. Regex capture groups are available. Defaults to '$1'.",
                      "type": "string"
                    },
                    "separator": {
                      "description": "Separator placed between concatenated source label values. Defaults to ';'.",
                      "type": "string"
                    },
                    "sourceLabels": {
                      "description": "The source labels select values from existing labels. Their content is concatenated\nusing the configured separator and matched against the configured regular expression\nfor the replace, keep, and drop actions.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "targetLabel": {
                      "description": "Label to which the resulting value is written in a replace action.\nIt is mandatory for replace actions. Regex capture groups are available.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "oauth2": {
                "description": "OAuth2 is the OAuth2 client credentials used to fetch a token for the targets.",
                "properties": {
                  "clientID": {
                    "description": "ClientID is the public identifier for the client.",
                    "type": "string"
                  },
                  "clientSecret": {
                    "description": "ClientSecret uses the secret as the client secret token.",
                    "properties": {
                      "secret": {
                        "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                        "properties": {
                          "key": {
                            "description": "Key of the secret to select from. Must be a valid secret key.",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the secret to select from.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "endpointParams": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "EndpointParams are additional parameters to append to the token URL.",
                    "type": "object"
                  },
                  "proxyUrl": {
                    "description": "ProxyURL is the HTTP proxy server to use to connect to the targets.\n\n\nEncoded passwords are not supported.",
                    "type": "string"
                  },
                  "scopes": {
                    "description": "Scopes represents the scopes for the token request.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "tlsConfig": {
                    "description": "TLS configures the token request's TLS settings.",
                    "properties": {
                      "ca": {
                        "description": "SecretSelector references a secret from a secret provider e.g. Kubernetes Secret. Only one\nprovider can be used at a time.",
                        "properties": {
                          "secret": {
                            "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                            "properties": {
                              "key": {
                                "description": "Key of the secret to select from. Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "description": "Name of the secret to select from.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "cert": {
                        "description": "Cert uses the secret as the certificate for client authentication to the server.",
                        "properties": {
                          "secret": {
                            "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                            "properties": {
                              "key": {
                                "description": "Key of the secret to select from. Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "description": "Name of the secret to select from.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "insecureSkipVerify": {
                        "description": "InsecureSkipVerify disables target certificate validation.",
                        "type": "boolean"
                      },
                      "key": {
                        "description": "Key uses the secret as the private key for client authentication to the server.",
                        "properties": {
                          "secret": {
                            "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                            "properties": {
                              "key": {
                                "description": "Key of the secret to select from. Must be a valid secret key.",
                                "type": "string"
                              },
                              "name": {
                                "description": "Name of the secret to select from.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "name"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "maxVersion": {
                        "description": "MaxVersion is the maximum TLS version. Accepted values: TLS10 (TLS 1.0), TLS11 (TLS 1.1),\nTLS12 (TLS 1.2), TLS13 (TLS 1.3).\n\n\nIf unset, Prometheus will use Go default minimum version, which is TLS 1.2.\nSee MinVersion in https://pkg.go.dev/crypto/tls#Config.",
                        "type": "string"
                      },
                      "minVersion": {
                        "description": "MinVersion is the minimum TLS version. Accepted values: TLS10 (TLS 1.0), TLS11 (TLS 1.1),\nTLS12 (TLS 1.2), TLS13 (TLS 1.3).\n\n\nIf unset, Prometheus will use Go default minimum version, which is TLS 1.2.\nSee MinVersion in https://pkg.go.dev/crypto/tls#Config.",
                        "type": "string"
                      },
                      "serverName": {
                        "description": "ServerName is used to verify the hostname for the targets.",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "tokenURL": {
                    "description": "TokenURL is the URL to fetch the token from.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "params": {
                "additionalProperties": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "description": "HTTP GET params to use when scraping.",
                "type": "object"
              },
              "path": {
                "description": "HTTP path to scrape metrics from. Defaults to \"/metrics\".",
                "type": "string"
              },
              "port": {
                "anyOf": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  }
                ],
                "description": "Name or number of the port to scrape.\nThe container metadata label is only populated if the port is referenced by name\nbecause port numbers are not unique across containers.",
                "x-kubernetes-int-or-string": true
              },
              "proxyUrl": {
                "description": "ProxyURL is the HTTP proxy server to use to connect to the targets.\n\n\nEncoded passwords are not supported.",
                "type": "string"
              },
              "scheme": {
                "description": "Protocol scheme to use to scrape.",
                "type": "string"
              },
              "timeout": {
                "description": "Timeout for metrics scrapes. Must be a valid Prometheus duration.\nMust not be larger than the scrape interval.",
                "type": "string"
              },
              "tls": {
                "description": "TLS configures the scrape request's TLS settings.",
                "properties": {
                  "ca": {
                    "description": "SecretSelector references a secret from a secret provider e.g. Kubernetes Secret. Only one\nprovider can be used at a time.",
                    "properties": {
                      "secret": {
                        "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                        "properties": {
                          "key": {
                            "description": "Key of the secret to select from. Must be a valid secret key.",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the secret to select from.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "cert": {
                    "description": "Cert uses the secret as the certificate for client authentication to the server.",
                    "properties": {
                      "secret": {
                        "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                        "properties": {
                          "key": {
                            "description": "Key of the secret to select from. Must be a valid secret key.",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the secret to select from.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "insecureSkipVerify": {
                    "description": "InsecureSkipVerify disables target certificate validation.",
                    "type": "boolean"
                  },
                  "key": {
                    "description": "Key uses the secret as the private key for client authentication to the server.",
                    "properties": {
                      "secret": {
                        "description": "Secret represents reference to a given key from certain Secret in a given namespace.",
                        "properties": {
                          "key": {
                            "description": "Key of the secret to select from. Must be a valid secret key.",
                            "type": "string"
                          },
                          "name": {
                            "description": "Name of the secret to select from.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "name"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "maxVersion": {
                    "description": "MaxVersion is the maximum TLS version. Accepted values: TLS10 (TLS 1.0), TLS11 (TLS 1.1),\nTLS12 (TLS 1.2), TLS13 (TLS 1.3).\n\n\nIf unset, Prometheus will use Go default minimum version, which is TLS 1.2.\nSee MinVersion in https://pkg.go.dev/crypto/tls#Config.",
                    "type": "string"
                  },
                  "minVersion": {
                    "description": "MinVersion is the minimum TLS version. Accepted values: TLS10 (TLS 1.0), TLS11 (TLS 1.1),\nTLS12 (TLS 1.2), TLS13 (TLS 1.3).\n\n\nIf unset, Prometheus will use Go default minimum version, which is TLS 1.2.\nSee MinVersion in https://pkg.go.dev/crypto/tls#Config.",
                    "type": "string"
                  },
                  "serverName": {
                    "description": "ServerName is used to verify the hostname for the targets.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "required": [
              "port"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "filterRunning": {
          "description": "FilterRunning will drop any pods that are in the \"Failed\" or \"Succeeded\"\npod lifecycle.\nSee: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase",
          "type": "boolean"
        },
        "limits": {
          "description": "Limits to apply at scrape time.",
          "properties": {
            "labelNameLength": {
              "description": "Maximum label name length.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            },
            "labelValueLength": {
              "description": "Maximum label value length.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            },
            "labels": {
              "description": "Maximum number of labels accepted for a single sample.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            },
            "samples": {
              "description": "Maximum number of samples accepted within a single scrape.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "selector": {
          "description": "Label selector that specifies which pods are selected for this monitoring\nconfiguration.",
          "properties": {
            "matchExpressions": {
              "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
              "items": {
                "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                "properties": {
                  "key": {
                    "description": "key is the label key that the selector applies to.",
                    "type": "string"
                  },
                  "operator": {
                    "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                    "type": "string"
                  },
                  "values": {
                    "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "atomic"
                  }
                },
                "required": [
                  "key",
                  "operator"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array",
              "x-kubernetes-list-type": "atomic"
            },
            "matchLabels": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
              "type": "object"
            }
          },
          "type": "object",
          "x-kubernetes-map-type": "atomic",
          "additionalProperties": false
        },
        "targetLabels": {
          "description": "Labels to add to the Prometheus target for discovered endpoints.\nThe `instance` label is always set to `<pod_name>:<port>` or `<node_name>:<port>`\nif the scraped pod is controlled by a DaemonSet.",
          "properties": {
            "fromPod": {
              "description": "Labels to transfer from the Kubernetes Pod to Prometheus target labels.\nMappings are applied in order.",
              "items": {
                "description": "LabelMapping specifies how to transfer a label from a Kubernetes resource\nonto a Prometheus target.",
                "properties": {
                  "from": {
                    "description": "Kubernetes resource label to remap.",
                    "type": "string"
                  },
                  "to": {
                    "description": "Remapped Prometheus target label.\nDefaults to the same name as `From`.",
                    "type": "string"
                  }
                },
                "required": [
                  "from"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "metadata": {
              "description": "Pod metadata labels that are set on all scraped targets.\nPermitted keys are `pod`, `container`, and `node` for PodMonitoring and\n`pod`, `container`, `node`, and `namespace` for ClusterPodMonitoring. The `container`\nlabel is only populated if the scrape port is referenced by name.\nDefaults to [pod, container, top_level_controller_name, top_level_controller_type] for\nPodMonitoring and [namespace, pod, container, top_level_controller_name, top_level_controller_type]\nfor ClusterPodMonitoring.\nIf set to null, it will be interpreted as the empty list for PodMonitoring\nand to [namespace] for ClusterPodMonitoring. This is for backwards-compatibility\nonly.",
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "endpoints",
        "selector"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "Most recently observed status of the resource.",
      "properties": {
        "conditions": {
          "description": "Represents the latest available observations of a podmonitor's current state.",
          "items": {
            "description": "MonitoringCondition describes the condition of a PodMonitoring.",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "lastUpdateTime": {
                "description": "The last time this condition was updated.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human-readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "MonitoringConditionType is the type of MonitoringCondition.",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "endpointStatuses": {
          "description": "Represents the latest available observations of target state for each ScrapeEndpoint.",
          "items": {
            "properties": {
              "activeTargets": {
                "description": "Total number of active targets.",
                "format": "int64",
                "type": "integer"
              },
              "collectorsFraction": {
                "description": "Fraction of collectors included in status, bounded [0,1].\nIdeally, this should always be 1. Anything less can\nbe considered a problem and should be investigated.",
                "type": "string"
              },
              "lastUpdateTime": {
                "description": "Last time this status was updated.",
                "format": "date-time",
                "type": "string"
              },
              "name": {
                "description": "The name of the ScrapeEndpoint.",
                "type": "string"
              },
              "sampleGroups": {
                "description": "A fixed sample of targets grouped by error type.",
                "items": {
                  "properties": {
                    "count": {
                      "description": "Total count of similar errors.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "sampleTargets": {
                      "description": "Targets emitting the error message.",
                      "items": {
                        "properties": {
                          "health": {
                            "description": "Health status.",
                            "type": "string"
                          },
                          "labels": {
                            "additionalProperties": {
                              "description": "A LabelValue is an associated value for a LabelName.",
                              "type": "string"
                            },
                            "description": "The label set, keys and values, of the target.",
                            "type": "object"
                          },
                          "lastError": {
                            "description": "Error message.",
                            "type": "string"
                          },
                          "lastScrapeDurationSeconds": {
                            "description": "Scrape duration in seconds.",
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "unhealthyTargets": {
                "description": "Total number of active, unhealthy targets.",
                "format": "int64",
                "type": "integer"
              }
            },
            "required": [
              "name"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "observedGeneration": {
          "description": "The generation observed by the controller.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
