diff --git a/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types.go b/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types.go index 8d04e2d8d..ad7324f28 100644 --- a/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types.go +++ b/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types.go @@ -126,6 +126,9 @@ type Service struct { SchedulerBase *int32 `json:"schedulerBase,omitempty"` // Set a maximum retry time in seconds for the scheduler. Supported in Fluent Bit >= 1.8.7 SchedulerCap *int32 `json:"schedulerCap,omitempty"` + // Set a default buffer size limit for multiline parsers. The value must be according to the Unit Size specification. + // +kubebuilder:validation:Pattern:="^\\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$" + MultilineBufferLimit string `json:"multilineBufferLimit,omitempty"` } // +kubebuilder:object:root=true @@ -243,6 +246,9 @@ func (s *Service) Params() *params.KVs { if s.SchedulerCap != nil { m.Insert("scheduler.cap", fmt.Sprint(*s.SchedulerCap)) } + if s.MultilineBufferLimit != "" { + m.Insert("multiline_buffer_limit", s.MultilineBufferLimit) + } return m } diff --git a/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types_test.go b/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types_test.go index ab77e536d..7d1623bf5 100644 --- a/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types_test.go +++ b/apis/fluentbit/v1alpha2/clusterfluentbitconfig_types_test.go @@ -1184,6 +1184,47 @@ func TestRenderMainConfigK8sInYaml(t *testing.T) { g.Expect(yamlConfig).To(Equal(expectedK8sYamlWithClusterFilterOutput)) } +func TestClusterFluentBitConfig_Service_MultilineBufferLimit(t *testing.T) { + g := NewGomegaWithT(t) + sl := plugins.NewSecretLoader(nil, "testnamespace") + + cfbc := ClusterFluentBitConfig{ + Spec: FluentBitConfigSpec{ + Service: &Service{ + Daemon: utils.ToPtr(false), + FlushSeconds: utils.ToPtr[float64](1), + MultilineBufferLimit: "5MB", + }, + }, + } + + expectedClassic := `[Service] + Daemon false + Flush 1 + multiline_buffer_limit 5MB +` + expectedYamlFmt := `service: + daemon: false + flush: 1 + multiline_buffer_limit: 5MB +pipeline: + inputs: + outputs: +` + + config, err := cfbc.RenderMainConfig( + sl, ClusterInputList{}, ClusterFilterList{}, ClusterOutputList{}, nil, nil, nil, + ) + g.Expect(err).NotTo(HaveOccurred()) + g.Expect(config).To(Equal(expectedClassic)) + + yamlConfig, err := cfbc.RenderMainConfigInYaml( + sl, ClusterInputList{}, ClusterFilterList{}, ClusterOutputList{}, nil, nil, nil, + ) + g.Expect(err).NotTo(HaveOccurred()) + g.Expect(yamlConfig).To(Equal(expectedYamlFmt)) +} + func TestClusterFluentBitConfig_RenderMainConfig_WithParsersFiles(t *testing.T) { g := NewGomegaWithT(t) sl := plugins.NewSecretLoader(nil, "testnamespace") diff --git a/charts/fluent-bit-crds/templates/fluentbit.fluent.io_clusterfluentbitconfigs.yaml b/charts/fluent-bit-crds/templates/fluentbit.fluent.io_clusterfluentbitconfigs.yaml index d8687a9ec..f5cb7051f 100644 --- a/charts/fluent-bit-crds/templates/fluentbit.fluent.io_clusterfluentbitconfigs.yaml +++ b/charts/fluent-bit-crds/templates/fluentbit.fluent.io_clusterfluentbitconfigs.yaml @@ -372,6 +372,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string diff --git a/charts/fluent-bit-crds/templates/fluentbit.fluent.io_fluentbitconfigs.yaml b/charts/fluent-bit-crds/templates/fluentbit.fluent.io_fluentbitconfigs.yaml index 97c44304c..ff0dfce5f 100644 --- a/charts/fluent-bit-crds/templates/fluentbit.fluent.io_fluentbitconfigs.yaml +++ b/charts/fluent-bit-crds/templates/fluentbit.fluent.io_fluentbitconfigs.yaml @@ -404,6 +404,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string diff --git a/config/crd/bases/fluentbit.fluent.io_clusterfluentbitconfigs.yaml b/config/crd/bases/fluentbit.fluent.io_clusterfluentbitconfigs.yaml index 1d039ed5e..7e6293ad0 100644 --- a/config/crd/bases/fluentbit.fluent.io_clusterfluentbitconfigs.yaml +++ b/config/crd/bases/fluentbit.fluent.io_clusterfluentbitconfigs.yaml @@ -369,6 +369,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string diff --git a/config/crd/bases/fluentbit.fluent.io_fluentbitconfigs.yaml b/config/crd/bases/fluentbit.fluent.io_fluentbitconfigs.yaml index ffcce2a45..1d91fb155 100644 --- a/config/crd/bases/fluentbit.fluent.io_fluentbitconfigs.yaml +++ b/config/crd/bases/fluentbit.fluent.io_fluentbitconfigs.yaml @@ -401,6 +401,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string diff --git a/docs/fluentbit.md b/docs/fluentbit.md index bd6ba7796..1b2ee8869 100644 --- a/docs/fluentbit.md +++ b/docs/fluentbit.md @@ -646,6 +646,7 @@ ParserSpec defines the desired state of ClusterParser | hotReload | If true enable reloading via HTTP | *bool | | schedulerBase | Set a base for exponential backoff in the scheduler. Supported in Fluent Bit >= 1.8.7 | *int32 | | schedulerCap | Set a maximum retry time in seconds for the scheduler. Supported in Fluent Bit >= 1.8.7 | *int32 | +| multilineBufferLimit | Set a default buffer size limit for multiline parsers. The value must be according to the Unit Size specification. | string | [Back to TOC](#table-of-contents) # Storage diff --git a/manifests/setup/fluent-operator-crd.yaml b/manifests/setup/fluent-operator-crd.yaml index af615273b..4ecb44a85 100644 --- a/manifests/setup/fluent-operator-crd.yaml +++ b/manifests/setup/fluent-operator-crd.yaml @@ -1830,6 +1830,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string @@ -17082,6 +17087,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string diff --git a/manifests/setup/setup.yaml b/manifests/setup/setup.yaml index 2f43346dc..85d600fbd 100644 --- a/manifests/setup/setup.yaml +++ b/manifests/setup/setup.yaml @@ -1830,6 +1830,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string @@ -17082,6 +17087,11 @@ spec: - debug - trace type: string + multilineBufferLimit: + description: Set a default buffer size limit for multiline parsers. + The value must be according to the Unit Size specification. + pattern: ^\d+(k|K|KB|kb|m|M|MB|mb|g|G|GB|gb)?$ + type: string parsersFile: description: Optional 'parsers' config file (can be multiple) type: string