{
  "description": "Filter is the Schema for namespace level filter API",
  "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",
        "null"
      ]
    },
    "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",
        "null"
      ]
    },
    "metadata": {
      "type": [
        "object",
        "null"
      ]
    },
    "spec": {
      "additionalProperties": false,
      "description": "FilterSpec defines the desired state of ClusterFilter",
      "properties": {
        "filters": {
          "description": "A set of filter plugins in order.",
          "items": {
            "additionalProperties": false,
            "properties": {
              "aws": {
                "additionalProperties": false,
                "description": "Aws defines a Aws configuration.",
                "properties": {
                  "accountID": {
                    "description": "The account ID for current EC2 instance.Default is false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "amiID": {
                    "description": "The EC2 instance image id.Default is false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "az": {
                    "description": "The availability zone; for example, \"us-east-1a\". Default is true.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "ec2InstanceID": {
                    "description": "The EC2 instance ID.Default is true.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "ec2InstanceType": {
                    "description": "The EC2 instance type.Default is false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "hostName": {
                    "description": "The hostname for current EC2 instance.Default is false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "imdsVersion": {
                    "description": "Specify which version of the instance metadata service to use. Valid values are 'v1' or 'v2'.",
                    "enum": [
                      "v1",
                      "v2"
                    ],
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "privateIP": {
                    "description": "The EC2 instance private ip.Default is false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "vpcID": {
                    "description": "The VPC ID for current EC2 instance.Default is false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "customPlugin": {
                "additionalProperties": false,
                "description": "CustomPlugin defines a Custom plugin configuration.",
                "properties": {
                  "config": {
                    "description": "Config holds any unsupported plugins classic configurations,\nif ConfigFileFormat is set to yaml, this filed will be ignored",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "yamlConfig": {
                    "description": "YamlConfig holds the unsupported plugins yaml configurations, it only works when the ConfigFileFormat is yaml",
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-preserve-unknown-fields": true
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "grep": {
                "additionalProperties": false,
                "description": "Grep defines Grep Filter configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "exclude": {
                    "description": "Exclude records which field matches the regular expression.\nValue Format: FIELD REGEX",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "logicalOp": {
                    "description": "Specify the logical operator for multiple regex/exclude rules.",
                    "enum": [
                      "and",
                      "or"
                    ],
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "regex": {
                    "description": "Keep records which field matches the regular expression.\nValue Format: FIELD REGEX",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "kubernetes": {
                "additionalProperties": false,
                "description": "Kubernetes defines Kubernetes Filter configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "annotations": {
                    "description": "Include Kubernetes resource annotations in the extra metadata.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "bufferSize": {
                    "description": "Set the buffer size for HTTP client when reading responses from Kubernetes API server.",
                    "pattern": "^\\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "cacheUseDockerId": {
                    "description": "When enabled, metadata will be fetched from K8s when docker_id is changed.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "dnsRetries": {
                    "description": "DNS lookup retries N times until the network start working",
                    "format": "int32",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "dnsWaitTime": {
                    "description": "DNS lookup interval between network status checks",
                    "format": "int32",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "dummyMeta": {
                    "description": "If set, use dummy-meta data (for test/dev purposes)",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "k8sLoggingExclude": {
                    "description": "Allow Kubernetes Pods to exclude their logs from the log processor\n(read more about it in Kubernetes Annotations section).",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "k8sLoggingParser": {
                    "description": "Allow Kubernetes Pods to suggest a pre-defined Parser\n(read more about it in Kubernetes Annotations section)",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "keepLog": {
                    "description": "When Keep_Log is disabled, the log field is removed\nfrom the incoming message once it has been successfully merged\n(Merge_Log must be enabled as well).",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "kubeCAFile": {
                    "description": "CA certificate file",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeCAPath": {
                    "description": "Absolute path to scan for certificate files",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeMetaCacheTTL": {
                    "description": "configurable TTL for K8s cached metadata. By default, it is set to 0\nwhich means TTL for cache entries is disabled and cache entries are evicted at random\nwhen capacity is reached. In order to enable this option, you should set the number to a time interval.\nFor example, set this value to 60 or 60s and cache entries which have been created more than 60s will be evicted.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeMetaNamespaceCacheTTL": {
                    "description": "Configurable TTL for K8s cached namespace metadata.\nBy default, it is set to 900 which means a 15min TTL for namespace cache entries.\nSetting this to 0 will mean entries are evicted at random once the cache is full.",
                    "format": "int32",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "kubeMetaPreloadCacheDir": {
                    "description": "If set, Kubernetes meta-data can be cached/pre-loaded from files in JSON format in this directory,\nnamed as namespace-pod.meta",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeTagPrefix": {
                    "description": "When the source records comes from Tail input plugin,\nthis option allows to specify what's the prefix used in Tail configuration.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeTokenCommand": {
                    "description": "Command to get Kubernetes authorization token.\nBy default, it will be NULL and we will use token file to get token.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeTokenFile": {
                    "description": "Token file",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeTokenTTL": {
                    "description": "configurable 'time to live' for the K8s token. By default, it is set to 600 seconds.\nAfter this time, the token is reloaded from Kube_Token_File or the Kube_Token_Command.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeURL": {
                    "description": "API Server end-point",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeletHost": {
                    "description": "kubelet host using for HTTP request, this only works when Use_Kubelet set to On.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kubeletPort": {
                    "description": "kubelet port using for HTTP request, this only works when useKubelet is set to On.",
                    "format": "int32",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "labels": {
                    "description": "Include Kubernetes resource labels in the extra metadata.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "mergeLog": {
                    "description": "When enabled, it checks if the log field content is a JSON string map,\nif so, it append the map fields as part of the log structure.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "mergeLogKey": {
                    "description": "When Merge_Log is enabled, the filter tries to assume the log field from the incoming message is a JSON string message\nand make a structured representation of it at the same level of the log field in the map.\nNow if Merge_Log_Key is set (a string name), all the new structured fields taken from the original log content are inserted under the new key.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "mergeLogTrim": {
                    "description": "When Merge_Log is enabled, trim (remove possible \\n or \\r) field values.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "mergeParser": {
                    "description": "Optional parser name to specify how to parse the data contained in the log key. Recommended use is for developers or testing only.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "namespaceAnnotations": {
                    "description": "Include Kubernetes namespace resource annotations in the extra metadata.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "namespaceLabels": {
                    "description": "Include Kubernetes namespace resource labels in the extra metadata.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "namespaceMetadataOnly": {
                    "description": "Include Kubernetes namespace metadata only and no pod metadata.\nIf this is set, the values of Labels and Annotations are ignored.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "ownerReferences": {
                    "description": "Include Kubernetes owner references in the extra metadata.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "regexParser": {
                    "description": "Set an alternative Parser to process record Tag and extract pod_name, namespace_name, container_name and docker_id.\nThe parser must be registered in a parsers file (refer to parser filter-kube-test as an example).",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tlsDebug": {
                    "description": "Debug level between 0 (nothing) and 4 (every detail).",
                    "format": "int32",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "tlsVerify": {
                    "description": "When enabled, turns on certificate validation when connecting to the Kubernetes API server.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "useJournal": {
                    "description": "When enabled, the filter reads logs coming in Journald format.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "useKubelet": {
                    "description": "This is an optional feature flag to get metadata information from kubelet\ninstead of calling Kube Server API to enhance the log.\nThis could mitigate the Kube API heavy traffic issue for large cluster.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "useTagForMeta": {
                    "description": "If true, Kubernetes metadata (e.g., pod_name, container_name, namespace_name etc) will be extracted from the tag itself.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "logToMetrics": {
                "additionalProperties": false,
                "description": "LogToMetrics defines a Log to Metrics Filter configuration.",
                "properties": {
                  "addLabel": {
                    "description": "Add a custom label NAME and set the value to the value of KEY",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "bucket": {
                    "description": "Defines a bucket for histogram",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "discardLogs": {
                    "description": "Flag that defines if logs should be discarded after processing. This applies\nfor all logs, no matter if they have emitted metrics or not.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "emitterMemBufLimit": {
                    "description": "set a buffer limit to restrict memory usage of metrics emitter",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "emitterName": {
                    "description": "Name of the emitter (advanced users)",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "exclude": {
                    "description": "Optional filter for records in which the content of KEY does not matches the regular expression.\nValue Format: FIELD REGEX",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "kubernetesMode": {
                    "description": "If enabled, it will automatically put pod_id, pod_name, namespace_name, docker_id and container_name\ninto the metric as labels. This option is intended to be used in combination with the kubernetes filter plugin.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "labelField": {
                    "description": "Includes a record field as label dimension in the metric.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "metricDescription": {
                    "description": "Sets a help text for the metric.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "metricMode": {
                    "description": "Defines the mode for the metric. Valid values are [counter, gauge or histogram]",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "metricName": {
                    "description": "Sets the name of the metric.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "metricNamespace": {
                    "description": "Namespace of the metric",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "metricSubsystem": {
                    "description": "Sets a sub-system for the metric.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "regex": {
                    "description": "Optional filter for records in which the content of KEY matches the regular expression.\nValue Format: FIELD REGEX",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tag": {
                    "description": "Defines the tag for the generated metrics record",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "valueField": {
                    "description": "Specify the record field that holds a numerical value",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "lua": {
                "additionalProperties": false,
                "description": "Lua defines Lua Filter configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "call": {
                    "description": "Lua function name that will be triggered to do filtering.\nIt's assumed that the function is declared inside the Script defined above.",
                    "type": "string"
                  },
                  "code": {
                    "description": "Inline LUA code instead of loading from a path via script.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "enable_flb_null": {
                    "description": "If enabled, null will be converted to flb_null in Lua.\nThis helps prevent removing key/value since nil is a special value to remove key/value from map in Lua. Default value: false.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "protectedMode": {
                    "description": "If enabled, Lua script will be executed in protected mode.\nIt prevents to crash when invalid Lua script is executed. Default is true.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "script": {
                    "additionalProperties": false,
                    "description": "Path to the Lua script that will be used.",
                    "properties": {
                      "key": {
                        "description": "The key to select.",
                        "type": "string"
                      },
                      "name": {
                        "default": "",
                        "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "optional": {
                        "description": "Specify whether the ConfigMap or its key must be defined",
                        "type": [
                          "boolean",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "key"
                    ],
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-map-type": "atomic"
                  },
                  "timeAsTable": {
                    "description": "By default when the Lua script is invoked, the record timestamp is passed as a\nFloating number which might lead to loss precision when the data is converted back.\nIf you desire timestamp precision enabling this option will pass the timestamp as\na Lua table with keys sec for seconds since epoch and nsec for nanoseconds.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "typeArrayKey": {
                    "description": "If these keys are matched, the fields are handled as array. If more than\none key, delimit by space. It is useful the array can be empty.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "typeIntKey": {
                    "description": "If these keys are matched, the fields are converted to integer.\nIf more than one key, delimit by space.\nNote that starting from Fluent Bit v1.6 integer data types are preserved\nand not converted to double as in previous versions.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "required": [
                  "call"
                ],
                "type": [
                  "object",
                  "null"
                ]
              },
              "modify": {
                "additionalProperties": false,
                "description": "Modify defines Modify Filter configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "conditions": {
                    "description": "All conditions have to be true for the rules to be applied.",
                    "items": {
                      "additionalProperties": false,
                      "description": "The plugin supports the following conditions",
                      "properties": {
                        "aKeyMatches": {
                          "description": "Is true if a key matches regex KEY",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "keyDoesNotExist": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if KEY does not exist",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "keyExists": {
                          "description": "Is true if KEY exists",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "keyValueDoesNotEqual": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if KEY exists and its value is not VALUE",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "keyValueDoesNotMatch": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if key KEY exists and its value does not match VALUE",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "keyValueEquals": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if KEY exists and its value is VALUE",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "keyValueMatches": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if key KEY exists and its value matches VALUE",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "matchingKeysDoNotHaveMatchingValues": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if all keys matching KEY have values that do not match VALUE",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "matchingKeysHaveMatchingValues": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Is true if all keys matching KEY have values that match VALUE",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "noKeyMatches": {
                          "description": "Is true if no key matches regex KEY",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "rules": {
                    "description": "Rules are applied in the order they appear,\nwith each rule operating on the result of the previous rule.",
                    "items": {
                      "additionalProperties": false,
                      "description": "The plugin supports the following rules",
                      "properties": {
                        "add": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Add a key/value pair with key KEY and value VALUE if KEY does not exist",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "copy": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Copy a key/value pair with key KEY to COPIED_KEY if KEY exists AND COPIED_KEY does not exist",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "hardCopy": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Copy a key/value pair with key KEY to COPIED_KEY if KEY exists.\nIf COPIED_KEY already exists, this field is overwritten",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "hardRename": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Rename a key/value pair with key KEY to RENAMED_KEY if KEY exists.\nIf RENAMED_KEY already exists, this field is overwritten",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "remove": {
                          "description": "Remove a key/value pair with key KEY if it exists",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "removeRegex": {
                          "description": "Remove all key/value pairs with key matching regexp KEY",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "removeWildcard": {
                          "description": "Remove all key/value pairs with key matching wildcard KEY",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "rename": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Rename a key/value pair with key KEY to RENAMED_KEY if KEY exists AND RENAMED_KEY does not exist",
                          "type": [
                            "object",
                            "null"
                          ]
                        },
                        "set": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "description": "Add a key/value pair with key KEY and value VALUE. If KEY already exists, this field is overwritten",
                          "type": [
                            "object",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "multiline": {
                "additionalProperties": false,
                "description": "Multiline defines a Multiline configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "buffer": {
                    "default": false,
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "emitterMemBufLimit": {
                    "default": 10,
                    "description": "Set a limit on the amount of memory in MB the emitter can consume if the outputs provide backpressure. The default for this limit is 10M. The pipeline will pause once the buffer exceeds the value of this setting. For example, if the value is set to 10MB then the pipeline will pause if the buffer exceeds 10M. The pipeline will remain paused until the output drains the buffer below the 10M limit.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "emitterName": {
                    "description": "Name for the emitter input instance which re-emits the completed records at the beginning of the pipeline.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "emitterType": {
                    "default": "memory",
                    "description": "The storage type for the emitter input instance. This option supports the values memory (default) and filesystem.",
                    "enum": [
                      "memory",
                      "filesystem"
                    ],
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "flushMs": {
                    "default": 2000,
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "keyContent": {
                    "description": "Key name that holds the content to process.\nNote that a Multiline Parser definition can already specify the key_content to use, but this option allows to overwrite that value for the purpose of the filter.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "mode": {
                    "enum": [
                      "parser",
                      "partial_message"
                    ],
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "parser": {
                    "description": "Specify one or multiple Multiline Parsing definitions to apply to the content.\nYou can specify multiple multiline parsers to detect different formats by separating them with a comma.",
                    "type": "string"
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "parser"
                ],
                "type": [
                  "object",
                  "null"
                ]
              },
              "nest": {
                "additionalProperties": false,
                "description": "Nest defines Nest Filter configuration.",
                "properties": {
                  "addPrefix": {
                    "description": "Prefix affected keys with this string",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "nestUnder": {
                    "description": "Nest records matching the Wildcard under this key",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "nestedUnder": {
                    "description": "Lift records nested under the Nested_under key",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "operation": {
                    "description": "Select the operation nest or lift",
                    "enum": [
                      "nest",
                      "lift"
                    ],
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "removePrefix": {
                    "description": "Remove prefix from affected keys if it matches this string",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "wildcard": {
                    "description": "Nest records which field matches the wildcard",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "parser": {
                "additionalProperties": false,
                "description": "Parser defines Parser Filter configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "keyName": {
                    "description": "Specify field name in record to parse.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "parser": {
                    "description": "Specify the parser name to interpret the field.\nMultiple Parser entries are allowed (split by comma).",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "preserveKey": {
                    "description": "Keep original Key_Name field in the parsed result.\nIf false, the field will be removed.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "reserveData": {
                    "description": "Keep all other original fields in the parsed result.\nIf false, all other original fields will be removed.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "unescapeKey": {
                    "description": "If the key is a escaped string (e.g: stringify JSON), unescape the string before to apply the parser.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "recordModifier": {
                "additionalProperties": false,
                "description": "RecordModifier defines Record Modifier Filter configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowlistKeys": {
                    "description": "If the key is not matched, that field is removed.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "records": {
                    "description": "Append fields. This parameter needs key and value pair.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "removeKeys": {
                    "description": "If the key is matched, that field is removed.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "uuidKeys": {
                    "description": "If set, the plugin appends uuid to each record. The value assigned becomes the key in the map.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "whitelistKeys": {
                    "description": "An alias of allowlistKeys for backwards compatibility.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "rewriteTag": {
                "additionalProperties": false,
                "description": "RewriteTag defines a RewriteTag configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "emitterMemBufLimit": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "emitterName": {
                    "description": "When the filter emits a record under the new Tag, there is an internal emitter\nplugin that takes care of the job. Since this emitter expose metrics as any other\ncomponent of the pipeline, you can use this property to configure an optional name for it.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "emitterStorageType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "rules": {
                    "description": "Defines the matching criteria and the format of the Tag for the matching record.\nThe Rule format have four components: KEY REGEX NEW_TAG KEEP.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "throttle": {
                "additionalProperties": false,
                "description": "Throttle defines a Throttle configuration.",
                "properties": {
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "interval": {
                    "description": "Interval is the time interval expressed in \"sleep\" format. e.g. 3s, 1.5m, 0.5h, etc.",
                    "pattern": "^\\d+(\\.[0-9]{0,2})?(s|m|h|d)?$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "printStatus": {
                    "description": "PrintStatus represents whether to print status messages with current rate and the limits to information logs.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "rate": {
                    "description": "Rate is the amount of messages for the time.",
                    "format": "int64",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "window": {
                    "description": "Window is the amount of intervals to calculate average over.",
                    "format": "int64",
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "wasm": {
                "additionalProperties": false,
                "description": "Wasm defines a Wasm configuration.",
                "properties": {
                  "accessiblePaths": {
                    "description": "Specify the whitelist of paths to be able to access paths from WASM programs.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "alias": {
                    "description": "Alias for the plugin",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "eventFormat": {
                    "description": "Define event format to interact with Wasm programs: msgpack or json. Default: json",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "functionName": {
                    "description": "Wasm function name that will be triggered to do filtering. It's assumed that the function is built inside the Wasm program specified above.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "retryLimit": {
                    "description": "RetryLimit describes how many times fluent-bit should retry to send data to a specific output. If set to false fluent-bit will try indefinitely. If set to any integer N\u003e0 it will try at most N+1 times. Leading zeros are not allowed (values such as 007, 0150, 01 do not work). If this property is not defined fluent-bit will use the default value: 1.",
                    "pattern": "^(((f|F)alse)|(no_limits)|(no_retries)|([1-9]+[0-9]*))$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "wasmHeapSize": {
                    "description": "Size of the heap size of Wasm execution. Review unit sizes for allowed values.",
                    "pattern": "^\\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "wasmPath": {
                    "description": "Path to the built Wasm program that will be used. This can be a relative path against the main configuration file.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "wasmStackSize": {
                    "description": "Size of the stack size of Wasm execution. Review unit sizes for allowed values.",
                    "pattern": "^\\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              }
            },
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "logLevel": {
          "enum": [
            "off",
            "error",
            "warning",
            "info",
            "debug",
            "trace"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "match": {
          "description": "A pattern to match against the tags of incoming records.\nIt's case-sensitive and support the star (*) character as a wildcard.",
          "type": [
            "string",
            "null"
          ]
        },
        "matchRegex": {
          "description": "A regular expression to match against the tags of incoming records.\nUse this option if you want to use the full regex syntax.",
          "type": [
            "string",
            "null"
          ]
        },
        "ordinal": {
          "description": "An ordinal to influence filter ordering",
          "format": "int32",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "type": "object"
}