Template to deploy the Logging agent using a 1.6.x Helm chart
Starting with Helm chart version 1.6.0, the Fluent Bit log pipeline configuration has transitioned to using the official Fluent Bit YAML configuration format. This change brings enhanced flexibility and clarity to configuration management.
Changes with Helm 1.6.0
New configuration format: The Helm chart now uses the YAML-based configuration format instead of the classic .conf
style.
Backward compatibility: You can still use your existing logs-values.yaml
file from version 1.5.x with version 1.6.0. The transition is designed to be non-disruptive.
Deprecated The classic configuration mode will be officially unsupported by Fluent Bit by the end of 2025. We recommend migrating to the YAML format as soon as possible to stay aligned with future updates. You can continue to use the previous versions of the Helm charts that were based on the classic configuration mode with newer versions of the Fluent Bit agent, but by the end of 2025 the classic configuration mode will be unsupported by Fluent Bit.
Template to deploy the Logging agent using a Helm chart on an Red Hat OpenShift on IBM Cloud cluster
metadata:
name: "logs-agent"
image:
version: "1.6.0" # required
clusterName: "" # recommended to improve the metadata
env:
# ingestionHost is a required field. For example:
# ingestionHost: "<logs instance>.ingress.us-east.logs.cloud.ibm.com"
ingestionHost: "" # required
# If you are using CSE proxy, then use port number "3443"
# If you are using private VPE Gateway, then use port number "443"
# If you are using the public endpoint, then use port number "443"
ingestionPort: "" # required
iamMode: "TrustedProfile"
# trustedProfileID - trusted profile id - required for iam trusted profile mode
trustedProfileID: "" # required if iamMode is TrustedProfile
scc:
# true here enables creation of Security Context Constraints in Openshift
create: true
Template to deploy the Logging agent using a Helm chart on a IBM Cloud Kubernetes Service cluster
metadata:
name: "logs-agent"
image:
version: "1.6.0" # required
clusterName: "" # recommended to improve the metadata
env:
# ingestionHost is a required field. For example:
# ingestionHost: "<logs instance>.ingress.us-east.logs.cloud.ibm.com"
ingestionHost: "" # required
# If you are using CSE proxy, then use port number "3443"
# If you are using private VPE Gateway, then use port number "443"
# If you are using the public endpoint, then use port number "443"
ingestionPort: "" # required
iamMode: "TrustedProfile"
# trustedProfileID - trusted profile id - required for iam trusted profile mode
trustedProfileID: "" # required if iamMode is TrustedProfile
New features with Helm 1.6.0
The ability to add custom configurations to all sections
Each of the service, parsers and pipeline (inputs, processors, filters and outputs) can optionally be configured with additional settings that are not necessarily exposed with the default configurations.
The following configurations can be used for more advanced configurations if necessary: - additionalServiceOptions
- additionalKubeLogInputProcessors
- additionalInputs
- additionalFilters
(use additionalKubeLogInputProcessors
if possible) - additionalOutputs
- additionalParsers
Enhanced system file processing of /var/log
(for example, syslog
, messages
, kubelet.log
)
Use the systemFiles
configuration to replace the additionalLogSourcePaths
configuration to get better details for your host files: - Timestamps are parsed according to the format of the syslog files. - The Kubernetes
filter is skipped which will reduce warnings in the logs and improve performance. - In IBM Cloud Logs the subsystemName
is the name of the host filename without the path. - In IBM Cloud Logs the applicationName
is the hostname of the node. - The cluster name is still recorded in kubernetes.cluster_name
to be consistent with the container logs for filtering.
Multiline patterns are easier to configure
The enableMultiline: true
option can be used in conjunction with the multilinePreprocessor
to override the default multiline processor to better fit your situation.
Option to skip the Kubernetes filter
The enableKubernetesFilter: false
option can be used to bypass the Kubernetes plug-in. This will mean that some of the Kubernetes metadata will be unavailable and some of the advanced parsing features provided by the Kubernetes
filter such as using container annotations to control the parser will be unavailable.
additionalLogSourcePaths
Deprecated
The additionalLogSourcePaths
option will be removed in an upcoming Helm release. It was originally intended to be used for processing host files or application log files in non-container locations. These files were either inappropriately
processed by the Kubernetes plug-in, or ignored with a warning - neither being efficient.
To improve parsing of the system files, a new configuration named systemLogs
has been implemented to provide a better parsing experience for these host system files. See the new systemLogs
configuration for details.
For non-system or non-container logs the additionalInputs
section can provide a customized input section within the pipeline, giving full control over the input and processors for your files.
Helm Chart configuration options
The following table contains a list of the parameters that you can configure in the logs-values.yaml
file to adjust the Logging agent configurations:
Parameter | Description | Default |
---|---|---|
metadata.name |
The name used for all of the Kubernetes resources | required - no default |
image.version |
The version of the agent container image (for example 1.6.0) | required - no default |
env.ingestionHost |
The IBM Cloud Logs host where logs are sent | required - no default |
env.ingestionPort |
The IBM Cloud Logs port where logs are sent | required - no default |
env.iamMode |
Indicate the IAM authentication mechanism used - TrustedProfile or IAMAPIKey |
required - no default |
env.trustedProfileID |
The trusted profile to use - required when iamMode=TrustedProfile |
optional |
env.iamEnvironment |
Controls the IAM endpoint used by the agent to exchange the tokens. For more information, see iamEnvironment. |
Production |
env.iamHost |
IAM host required for IAM Environment Custom setting. See iamEnvironment |
required for iamEnvironment Custom - no default |
secret.iamAPIKey |
The APIKey used when iamMode=IAMAPIKey . Should only be provided when using the CLI |
optional |
clusterName |
The name of the Kubernetes cluster | optional |
scc.create |
When to create the Secure Context Constraints in Openshift | false |
defaultMetadata.subsystemName |
Static string to override the subsystemName in IBM Cloud Logs |
Container that generated the log |
defaultMetadata.applicationName |
Static string to override the applicationName in IBM Cloud Logs |
Namespace name that generated the log |
resources |
Override the Kubernetes resources allocated to the logs-agent | Optional |
additionalLogSourcePaths Deprecated |
The path of additional logs beyond the default /var/log/containers/*.log .For more information, see Log Source Paths configurations. |
optional - not set |
excludeLogSourcePaths |
Additional logs that should not be collected by the agent. For more information, see Log Source Paths configurations. |
optional - not set |
selectedLogSourcePaths |
Override /var/log/containers/*.log and only collect logs in these paths.For more information, see Log Source Paths configurations. |
optional - not set |
includeAnnotations |
Instruct the Kubernetes plug-in to include the container annotations with the log messages. For more information, see [includeAnnotations]#agent-helm-template-clusters-chart-options-include-annotations). |
false |
retryLimit |
Limit the number of retries that will be attempted | False - no retry limits |
loggingLevel |
The type of logs that should be reported by the agent (debug , info , error ) |
info |
additionalMetadata |
A list of key/value pair tags that can be added as metadata to every log line. For more information, see additionalMetadata. |
optional - not set |
keepParsedLogs |
If a log is parsed by the Kubernetes filter, still keep the original log field containing the message |
false |
outputWorkers |
The number of worker threads used by the output plug-in to send to IBM Cloud Logs | 4 |
severityFieldName |
The name of the field to be used to populate the severity field in the log record when a severity field doesn't already exist | optional - not set |
tolerations |
The toleration definition for the daemonset in order to run the agent pods on nodes with taints | optional - not set |
enableKubernetesFilter |
Indicate whether the Kubernetes filter should be used when parsing container logs | true |
additionalServiceOptions |
Additional user provided service configurations | optional - not set |
additionalKubeLogInputProcessors |
Additional user provided input processors | optional - not set |
additionalInputs |
Additional user provided input definitions | optional - not set |
additionalFilters |
Additional user provided filter definitions | optional - not set |
additionalKubeLogInputProcessors |
Additional input processor for container logs | optional - not set |
additionalOutputs |
Additional output definitions | optional - not set |
additionalParsers |
Additional parsers | optional - not set |
additionalMultilineParsers |
Additional multiline parsers | optional - not set |
env.iamMode
Configure this parameter to choose the authentication method to use by the agent when sending logs to an IBM Cloud Logs instance.
- You can choose an IAM APIKey or a Trusted Profile configuration.
- Valid values are:
TrustedProfile
orIAMAPIKey
- The default value is a Trusted Profile configuration.
The entry in the logs-values.yaml
file looks as follows:
env:
iamMode: IAMAPIKey
Consider the following information when setting this parameter:
-
If
env.iamMode: "TrustedProfile"
is set, then theenv.trustedProfileID
variable must also be provided. -
If
env.iamMode: "IAMAPIKey"
is set, then the configuration expects a secret to be defined that contains an IAM Apikey with permissions.If the
secret.iamAPIKey
variable is provided on the helm command (for example--set secret.iamAPIKey=<your iamAPIKey>
), then the helm chart will create the Kubernetes secret.Alternatively, you can create the secret ahead of time with the command: (Make sure you are connected to your cluster.)
kubectl create secret generic <helm install-name> -n ibm-observe --from-literal=IAM_API_KEY=<apikey>
defaultMetadata
This section allows the user to override the default subsystemName
and applicationName
that are used in the environment. By default, the values are not set and the output plug-in will dynamically set the values to:
subsystemName
: the Kubernetes namespace that generated the logapplicationName
: the container name that generated the log
The entry in the logs-values.yaml
file looks as follows:
defaultMetadata:
subsystemName: ""
applicationName: ""
resources
This section allows the user to change the resources that are assigned to the Logging agent container.
The entry in the logs-values.yaml
file looks as follows and sets the following default values:
resources:
limits:
cpu: 500m
ephemeral_storage: 10Gi
memory: 3Gi
requests:
cpu: 100m
ephemeral_storage: 2Gi
memory: 1Gi
If you need to update any of the values, the entire configuration must be provided even if you don't update all of the values.
Log source paths configurations
By default the agent will collect the logs from /var/log/containers/*.log
.
The following additional variables can be provided to include, exclude or restrict the set of logs to be processed:
additionalLogSourcePaths
adds locations to the default set of logs that will be processed.excludeLogSourcePaths
ignores logs in the specified locations.selectedLogSourcePaths
overrides the default path/var/log/containers/*.log
and ignores theadditionalLogSourcePaths
configurations. Only the files that are set through this parameter are collected by the agent.
You can define multiple paths by using a comma separated list, for example /var/log/abc/*.log,/var/log/xyz/*.log
.
The entry in the logs-values.yaml
file looks as follows:
# comma separated list, for example “/var/log/abc/*.log,/var/log/xyz/*.log”
additionalLogSourcePaths: ""
excludeLogSourcePaths: ""
selectedLogSourcePaths: ""
env.iamEnvironment
This configuration controls the IAM endpoint used by the agent to exchange the tokens.
The default value is Production
.
Valid values are :
- Set
Production
to use theiam.cloud.ibm.com
default endpoint - Set
PrivateProduction
to use theprivate.iam.cloud.ibm.com
endpoint - Set
Custom
to use a custom IAM endpoint (for exampleprivate.eu-de.iam.cloud.ibm.com
)
The entry in the logs-values.yaml
file looks as follows:
env:
iamEnvironment: "Production"
For the Custom
iamEnvironment
setting, the iamHost
must also be provided.
env:
iamEnvironment: "Custom"
iamHost: "private.eu-de.iam.cloud.ibm.com"
includeAnnotations
This configuration changes the setting for the Kubernetes filter to include the annotations from Kubernetes with the log records.
The default value for this setting is false
.
The entry in the logs-values.yaml
file looks as follows:
includeAnnotations: true
retryLimit
This configuration places a limit on the number of times the agent will retry sending data if an error occurs that is considered to be retryable.
The default is False
.
For more information, see the Fluentbit documentation about retries to understand the implications of setting this value.
In some situations this setting could lead to log data being discarded by the agent due to the inability to send.
The entry in the logs-values.yaml
file looks as follows:
retryLimit: 8
additionalMetadata
This is a list of key/value pairs that will be added under the meta
object to permit additional tags.
The entry in the logs-values.yaml
file looks as follows:
additionalMetadata:
region: ca-tor
env: production
The previous example will result in the following additional fields added to each log line in IBM Cloud Logs:
{
"meta": {
"region": "ca-tor",
"env": "production"
}
}
keepParsedLogs
This is a boolean flag that determines whether to retain the original log field after it has been successfully processed by the Kubernetes plug-in.
The default is false
.
Enabling this will result in duplicate log data, which may increase storage usage.
Example configuration:
keepParsedLogs: true
outputWorkers
This setting defines the number of worker threads used by the output plug-in to enable parallel processing of log data.
The default is 4
.
In most environments, increasing the number of threads beyond 4 does not significantly impact performance. If your log volume is high and you’ve allocated more than 1 CPU, increasing this value to 8 can help improve output throughput.
For low-volume enviroments, reducing this value to 1 or 2 will limit the maximum log volume that can be sent to IBM Cloud Logs, which may be suitable for smaller workloads.
outputWorkers: 2
severityFieldName
This is an optional setting that allows you to override the default severity field sent to IBM Cloud Logs. Use this option if your log messages use a non-standard field name (for example, Log_Level
, logSeverity
, and
so on) to indicate severity.
When configured:
- A new filter is added to the pipeline.
- This filter injects a severity field into each log record.
- The value of severity is populated from the custom field you specify.
severityFieldName: Log_Level
tolerations
In some Kubernetes environments, nodes may have taints that prevent the Fluent Bit agent from being scheduled. To ensure the agent can run on these nodes, you must define appropriate tolerations in your Helm chart configuration. Refer to the Kubernetes documentation about taints and tolerations for more information.
For example, if you have a taint on a node:
kubectl taint nodes 10.1.2.3 myNodeType=ingress:NoSchedule
You can allow the agent to be scheduled on that node by adding this configuration to your values.yaml
file:
tolerations:
- effect: NoSchedule
key: myNodeType
value: ingress
operator: Equal
- These fields are directly added to the DaemonSet's tolerations section.
- This ensures the agent respects the taint rules and can be scheduled accordingly.
enableKubernetesFilter
By default the Helm chart enables the Kubernetes filter for processing the container logs. This provides capabilities such as:
- Enriching the log lines with metadata about the running container.
- Invoking another parser after the CRI parser to further process the log data.
- Using annotations to choose a secondary parser.
If you do not wish to use these features, then they can be disabled with this option.
enableKubernetesFilter: false
systemFiles
If you want to process files from a path other than /var/log/containers
(for example, /var/log/syslog
or /var/log/kubelet.log
), then use the systemFiles
setting to enable the processing for
these files.
You can use the systemLogsParser
option in order to consider a different parser - by default the kube_syslog
parser is used which is appropriate for newer VPC-based systems. Some of the classic Kubernetes clusters may
require the systemLogsParser
to be set to kube_syslog_classic
in order to match the timestamp format on those systems.
systemLogs:
- /var/log/kube-proxy.log
- /var/log/kubelet.log
additionalServiceOptions
This option can be used to add configuration options to the service
section of the Fluent Bit configuration. This will add entries to the service section of the Fluent Bit yaml configuration.
additionalServiceOptions:
storage.backlog.mem_limit: 5G
additionalKubeLogInputProcessors
This option allows the user to introduce additional processors for their container logs after the normal processing has completed. This may be useful for example, to introduce an additional parser within the processor pipeline. This will add entries to the pipeline.inputs.processors section of the Fluent Bit yaml configuration.
additionalKubeLogInputProcessors:
- name: parser
parser: json
key_name: log
reserve_data: true
additionalInputs
There might be some filters that should be applied to both containers and host logs - rather than including in the additionalKubeLogInputProcessors
and additionalSystemLogsInputProcessors
. This will add entries to the
pipeline.filters section of the Fluent Bit yaml configuration.
additionalFilters:
- name: modify
match: '*'
set:
- deployment_env pre-production
additionalOutputs
In the event that the logs should be sent to another output location, the user can introduce additional output sections in order to send to a second IBM Cloud Logs instance. This will add entries to the pipeline.outputs section of the Fluent Bit yaml configuration.
additionalOutputs:
- name: logger-icl-output-plugin
id: logs-router-icl-output-plugin
match: '*'
# Connection
target_host: "replace with host"
target_port: 443
target_path: /logs/v1/singles
...
additionalParsers
If you need to introduce a new parser, this option allows you to introduce your own parsers. If you need to introduce a new parser, this option allows you to introduce your own parsers. This will add entries to the [parsers](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/yaml/parsers-section] section of the Fluent Bit yaml configuration.
additionalParsers:
- name: json_raw
format: json
additionalMultilineParsers
If you need to introduce a new multiline parser, this option allows you to introduce your own multiline parsers. This will add entries to the multiline_parsers section of the Fluent Bit yaml configuration.
additionalMultilineParsers:
- name: multiline_sample
type: regex
flush_timeout: 1000
rules:
- state: start_state
regex: '/^\[\d+\/\d+\/\d+,.*$/'
next_state: cont
- state: cont
regex: '/^[^\[].*$/'
next_state: cont
- state: cont
regex: '/^$/'
next_state: cont