---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.9.2
  creationTimestamp: null
  name: podlogs.monitoring.grafana.com
spec:
  group: monitoring.grafana.com
  names:
    categories:
    - agent-operator
    kind: PodLogs
    listKind: PodLogsList
    plural: podlogs
    singular: podlogs
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: PodLogs defines how to collect logs for a pod.
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More 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. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: Spec holds the specification of the desired behavior for
              the PodLogs.
            properties:
              jobLabel:
                description: The label to use to retrieve the job name from.
                type: string
              namespaceSelector:
                description: Selector to select which namespaces the Pod objects are
                  discovered from.
                properties:
                  any:
                    description: Boolean describing whether all namespaces are selected
                      in contrast to a list restricting them.
                    type: boolean
                  matchNames:
                    description: List of namespace names to select from.
                    items:
                      type: string
                    type: array
                type: object
              pipelineStages:
                description: Pipeline stages for this pod. Pipeline stages support
                  transforming and filtering log lines.
                items:
                  description: "PipelineStageSpec defines an individual pipeline stage.
                    Each stage type is mutually exclusive and no more than one may
                    be set per stage. \n More information on pipelines can be found
                    in the Promtail documentation: https://grafana.com/docs/loki/latest/clients/promtail/pipelines/"
                  properties:
                    cri:
                      description: 'CRI is a parsing stage that reads log lines using
                        the standard CRI logging format. Supply cri: {} to enable.'
                      type: object
                    docker:
                      description: 'Docker is a parsing stage that reads log lines
                        using the standard Docker logging format. Supply docker: {}
                        to enable.'
                      type: object
                    drop:
                      description: Drop is a filtering stage that lets you drop certain
                        logs.
                      properties:
                        dropCounterReason:
                          description: Every time a log line is dropped, the metric
                            logentry_dropped_lines_total is incremented. A "reason"
                            label is added, and can be customized by providing a custom
                            value here. Defaults to "drop_stage".
                          type: string
                        expression:
                          description: "RE2 regular expression. \n If source is provided,
                            the regex attempts to match the source. \n If no source
                            is provided, then the regex attempts to attach the log
                            line. \n If the provided regex matches the log line or
                            a provided source, the line is dropped."
                          type: string
                        longerThan:
                          description: LongerThan will drop a log line if it its content
                            is longer than this value (in bytes). Can be expressed
                            as an integer (8192) or a number with a suffix (8kb).
                          type: string
                        olderThan:
                          description: OlderThan will be parsed as a Go duration.
                            If the log line's timestamp is older than the current
                            time minus the provided duration, it will be dropped.
                          type: string
                        source:
                          description: Name from the extract data to parse. If empty,
                            uses the log message.
                          type: string
                        value:
                          description: "Value can only be specified when source is
                            specified. If the value provided is an exact match for
                            the given source then the line will be dropped. \n Mutually
                            exclusive with expression."
                          type: string
                      type: object
                    json:
                      description: "JSON is a parsing stage that reads the log line
                        as JSON and accepts JMESPath expressions to extract data.
                        \n Information on JMESPath: http://jmespath.org/"
                      properties:
                        expressions:
                          additionalProperties:
                            type: string
                          description: "Set of the key/value pairs of JMESPath expressions.
                            The key will be the key in the extracted data while the
                            expression will be the value, evaluated as a JMESPath
                            from the source data. \n Literal JMESPath expressions
                            can be used by wrapping a key in double quotes, which
                            then must be wrapped again in single quotes in YAML so
                            they get passed to the JMESPath parser."
                          type: object
                        source:
                          description: Name from the extracted data to parse as JSON.
                            If empty, uses entire log message.
                          type: string
                      type: object
                    labelAllow:
                      description: LabelAllow is an action stage that only allows
                        the provided labels to be included in the label set that is
                        sent to Loki with the log entry.
                      items:
                        type: string
                      type: array
                    labelDrop:
                      description: LabelDrop is an action stage that drops labels
                        from the label set that is sent to Loki with the log entry.
                      items:
                        type: string
                      type: array
                    labels:
                      additionalProperties:
                        type: string
                      description: "Labels is an action stage that takes data from
                        the extracted map and modifies the label set that is sent
                        to Loki with the log entry. \n The key is REQUIRED and represents
                        the name for the label that will be created. Value is optional
                        and will be the name from extracted data to use for the value
                        of the label. If the value is not provided, it defaults to
                        match the key."
                      type: object
                    limit:
                      description: Limit is a rate-limiting stage that throttles logs
                        based on several options.
                      properties:
                        burst:
                          description: The cap in the quantity of burst lines that
                            Promtail will push to Loki.
                          type: integer
                        drop:
                          description: "When drop is true, log lines that exceed the
                            current rate limit are discarded. When drop is false,
                            log lines that exceed the current rate limit wait to enter
                            the back pressure mode. \n Defaults to false."
                          type: boolean
                        rate:
                          description: The rate limit in lines per second that Promtail
                            will push to Loki.
                          type: integer
                      type: object
                    match:
                      description: Match is a filtering stage that conditionally applies
                        a set of stages or drop entries when a log entry matches a
                        configurable LogQL stream selector and filter expressions.
                      properties:
                        action:
                          description: Determines what action is taken when the selector
                            matches the log line. Can be keep or drop. Defaults to
                            keep. When set to drop, entries are dropped and no later
                            metrics are recorded. Stages must be empty when dropping
                            metrics.
                          type: string
                        dropCounterReason:
                          description: Every time a log line is dropped, the metric
                            logentry_dropped_lines_total is incremented. A "reason"
                            label is added, and can be customized by providing a custom
                            value here. Defaults to "match_stage."
                          type: string
                        pipelineName:
                          description: Names the pipeline. When defined, creates an
                            additional label in the pipeline_duration_seconds histogram,
                            where the value is concatenated with job_name using an
                            underscore.
                          type: string
                        selector:
                          description: LogQL stream selector and filter expressions.
                            Required.
                          type: string
                        stages:
                          description: "Nested set of pipeline stages to execute when
                            action is keep and the log line matches selector. \n An
                            example value for stages may be: \n stages: | - json:
                            {} - labelAllow: [foo, bar] \n Note that stages is a string
                            because SIG API Machinery does not support recursive types,
                            and so it cannot be validated for correctness. Be careful
                            not to mistype anything."
                          type: string
                      required:
                      - selector
                      type: object
                    metrics:
                      additionalProperties:
                        description: MetricsStageSpec is an action stage that allows
                          for defining and updating metrics based on data from the
                          extracted map. Created metrics are not pushed to Loki or
                          Prometheus and are instead exposed via the /metrics endpoint
                          of the Grafana Agent pod. The Grafana Agent Operator should
                          be configured with a MetricsInstance that discovers the
                          logging DaemonSet to collect metrics created by this stage.
                        properties:
                          action:
                            description: "The action to take against the metric. Required.
                              \n Must be either \"inc\" or \"add\" for type: counter
                              or type: histogram. When type: gauge, must be one of
                              \"set\", \"inc\", \"dec\", \"add\", or \"sub\". \n \"add\",
                              \"set\", or \"sub\" requires the extracted value to
                              be convertible to a positive float."
                            type: string
                          buckets:
                            description: 'Buckets to create. Bucket values must be
                              convertible to float64s. Extremely large or small numbers
                              are subject to some loss of precision. Only valid for
                              type: histogram.'
                            items:
                              type: string
                            type: array
                          countEntryBytes:
                            description: "If true all log line bytes are counted.
                              Can only be set with matchAll: true and action: add.
                              \n Only valid for type: counter."
                            type: boolean
                          description:
                            description: Sets the description for the created metric.
                            type: string
                          matchAll:
                            description: "If true, all log lines are counted without
                              attempting to match the source to the extracted map.
                              Mutually exclusive with value. \n Only valid for type:
                              counter."
                            type: boolean
                          maxIdleDuration:
                            description: "Label values on metrics are dynamic which
                              can cause exported metrics to go stale. To prevent unbounded
                              cardinality, any metrics not updated within MaxIdleDuration
                              are removed. \n Must be greater or equal to 1s. Defaults
                              to 5m."
                            type: string
                          prefix:
                            description: Sets the custom prefix name for the metric.
                              Defaults to "promtail_custom_".
                            type: string
                          source:
                            description: Key from the extracted data map to use for
                              the metric. Defaults to the metrics name if not present.
                            type: string
                          type:
                            description: The metric type to create. Must be one of
                              counter, gauge, histogram. Required.
                            type: string
                          value:
                            description: Filters down source data and only changes
                              the metric if the targeted value matches the provided
                              string exactly. If not present, all data matches.
                            type: string
                        required:
                        - action
                        - type
                        type: object
                      description: Metrics is an action stage that supports defining
                        and updating metrics based on data from the extracted map.
                        Created metrics are not pushed to Loki or Prometheus and are
                        instead exposed via the /metrics endpoint of the Grafana Agent
                        pod. The Grafana Agent Operator should be configured with
                        a MetricsInstance that discovers the logging DaemonSet to
                        collect metrics created by this stage.
                      type: object
                    multiline:
                      description: Multiline stage merges multiple lines into a multiline
                        block before passing it on to the next stage in the pipeline.
                      properties:
                        firstLine:
                          description: RE2 regular expression. Creates a new multiline
                            block when matched. Required.
                          type: string
                        maxLines:
                          description: Maximum number of lines a block can have. A
                            new block is started if the number of lines surpasses
                            this value. Defaults to 128.
                          type: integer
                        maxWaitTime:
                          description: Maximum time to wait before passing on the
                            multiline block to the next stage if no new lines are
                            received. Defaults to 3s.
                          type: string
                      required:
                      - firstLine
                      type: object
                    output:
                      description: Output stage is an action stage that takes data
                        from the extracted map and changes the log line that will
                        be sent to Loki.
                      properties:
                        source:
                          description: Name from extract data to use for the log entry.
                            Required.
                          type: string
                      required:
                      - source
                      type: object
                    pack:
                      description: Pack is a transform stage that lets you embed extracted
                        values and labels into the log line by packing the log line
                        and labels inside of a JSON object.
                      properties:
                        ingestTimestamp:
                          description: If the resulting log line should use any existing
                            timestamp or use time.Now() when the line was created.
                            Set to true when combining several log streams from different
                            containers to avoid out of order errors.
                          type: boolean
                        labels:
                          description: Name from extracted data or line labels. Required.
                            Labels provided here are automatically removed from output
                            labels.
                          items:
                            type: string
                          type: array
                      required:
                      - labels
                      type: object
                    regex:
                      description: Regex is a parsing stage that parses a log line
                        using a regular expression.  Named capture groups in the regex
                        allows for adding data into the extracted map.
                      properties:
                        expression:
                          description: RE2 regular expression. Each capture group
                            MUST be named. Required.
                          type: string
                        source:
                          description: Name from extracted data to parse. If empty,
                            defaults to using the log message.
                          type: string
                      required:
                      - expression
                      type: object
                    replace:
                      description: Replace is a parsing stage that parses a log line
                        using a regular expression and replaces the log line. Named
                        capture groups in the regex allows for adding data into the
                        extracted map.
                      properties:
                        expression:
                          description: RE2 regular expression. Each capture group
                            MUST be named. Required.
                          type: string
                        replace:
                          description: Value to replace the captured group with.
                          type: string
                        source:
                          description: Name from extracted data to parse. If empty,
                            defaults to using the log message.
                          type: string
                      required:
                      - expression
                      type: object
                    template:
                      description: Template is a transform stage that manipulates
                        the values in the extracted map using Go's template syntax.
                      properties:
                        source:
                          description: Name from extracted data to parse. Required.
                            If empty, defaults to using the log message.
                          type: string
                        template:
                          description: Go template string to use. Required. In addition
                            to normal template functions, ToLower, ToUpper, Replace,
                            Trim, TrimLeft, TrimRight, TrimPrefix, and TrimSpace are
                            also available.
                          type: string
                      required:
                      - source
                      - template
                      type: object
                    tenant:
                      description: Tenant is an action stage that sets the tenant
                        ID for the log entry picking it from a field in the extracted
                        data map. If the field is missing, the default LogsClientSpec.tenantId
                        will be used.
                      properties:
                        label:
                          description: Name from labels whose value should be set
                            as tenant ID. Mutually exclusive with source and value.
                          type: string
                        source:
                          description: Name from extracted data to use as the tenant
                            ID. Mutually exclusive with label and value.
                          type: string
                        value:
                          description: Value to use for the template ID. Useful when
                            this stage is used within a conditional pipeline such
                            as match. Mutually exclusive with label and source.
                          type: string
                      type: object
                    timestamp:
                      description: Timestamp is an action stage that can change the
                        timestamp of a log line before it is sent to Loki. If not
                        present, the timestamp of a log line defaults to the time
                        when the log line was read.
                      properties:
                        actionOnFailure:
                          description: Action to take when the timestamp can't be
                            extracted or parsed. Can be skip or fudge. Defaults to
                            fudge.
                          type: string
                        fallbackFormats:
                          description: Fallback formats to try if format fails.
                          items:
                            type: string
                          type: array
                        format:
                          description: 'Determines format of the time string. Required.
                            Can be one of: ANSIC, UnixDate, RubyDate, RFC822, RFC822Z,
                            RFC850, RFC1123, RFC1123Z, RFC3339, RFC3339Nano, Unix,
                            UnixMs, UnixUs, UnixNs.'
                          type: string
                        location:
                          description: IANA Timezone Database string.
                          type: string
                        source:
                          description: Name from extracted data to use as the timestamp.
                            Required.
                          type: string
                      required:
                      - format
                      - source
                      type: object
                  type: object
                type: array
              podTargetLabels:
                description: PodTargetLabels transfers labels on the Kubernetes Pod
                  onto the target.
                items:
                  type: string
                type: array
              relabelings:
                description: "RelabelConfigs to apply to logs before delivering. Grafana
                  Agent Operator automatically adds relabelings for a few standard
                  Kubernetes fields and replaces original scrape job name with __tmp_logs_job_name.
                  \n More info: https://grafana.com/docs/loki/latest/clients/promtail/configuration/#relabel_configs"
                items:
                  description: 'RelabelConfig allows dynamic rewriting of the label
                    set, being applied to samples before ingestion. It defines `<metric_relabel_configs>`-section
                    of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs'
                  properties:
                    action:
                      default: replace
                      description: Action to perform based on regex matching. Default
                        is 'replace'. uppercase and lowercase actions require Prometheus
                        >= 2.36.
                      enum:
                      - replace
                      - Replace
                      - keep
                      - Keep
                      - drop
                      - Drop
                      - hashmod
                      - HashMod
                      - labelmap
                      - LabelMap
                      - labeldrop
                      - LabelDrop
                      - labelkeep
                      - LabelKeep
                      - lowercase
                      - Lowercase
                      - uppercase
                      - Uppercase
                      - keepequal
                      - KeepEqual
                      - dropequal
                      - DropEqual
                      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. Default is '(.*)'
                      type: string
                    replacement:
                      description: Replacement value against which a regex replace
                        is performed if the regular expression matches. Regex capture
                        groups are available. Default is '$1'
                      type: string
                    separator:
                      description: Separator placed between concatenated source label
                        values. default is ';'.
                      type: string
                    sourceLabels:
                      description: The source labels select values from existing labels.
                        Their content is concatenated using the configured separator
                        and matched against the configured regular expression for
                        the replace, keep, and drop actions.
                      items:
                        description: LabelName is a valid Prometheus label name which
                          may only contain ASCII letters, numbers, as well as underscores.
                        pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$
                        type: string
                      type: array
                    targetLabel:
                      description: Label to which the resulting value is written in
                        a replace action. It is mandatory for replace actions. Regex
                        capture groups are available.
                      type: string
                  type: object
                type: array
              selector:
                description: Selector to select Pod objects. Required.
                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 relates 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. Valid 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, the values array must be non-empty.
                            If the operator is Exists or DoesNotExist, the values
                            array must be empty. This array is replaced during a strategic
                            merge patch.
                          items:
                            type: string
                          type: array
                      required:
                      - key
                      - operator
                      type: object
                    type: array
                  matchLabels:
                    additionalProperties:
                      type: string
                    description: matchLabels is a map of {key,value} pairs. A single
                      {key,value} in the matchLabels map is equivalent to an element
                      of matchExpressions, whose key field is "key", the operator
                      is "In", and the values array contains only "value". The requirements
                      are ANDed.
                    type: object
                type: object
                x-kubernetes-map-type: atomic
            required:
            - selector
            type: object
        type: object
    served: true
    storage: true
