diff --git a/packs/fluentbit-4.2.3/README.md b/packs/fluentbit-4.2.3/README.md new file mode 100644 index 00000000..ed488e88 --- /dev/null +++ b/packs/fluentbit-4.2.3/README.md @@ -0,0 +1,70 @@ +# Fluent Bit + +Fluent Bit is a lightweight and high-performance log processor and forwarder. It allows you to collect data or logs from different sources, unify them, and send them to multiple destinations including Elasticsearch, OpenSearch, Kafka, Datadog, and more. + +## Prerequisites + +- Kubernetes **1.27** and higher are supported. +- Supported cloud types: **All clouds**. + +## Parameters + +| **Parameter** | **Description** | **Type** | **Default Value** | **Required** | +|---|---|---|---|---| +| charts.fluent-bit.kind | Kubernetes controller to use (DaemonSet or Deployment) | string | DaemonSet | Yes | +| charts.fluent-bit.image.repository | Image repository for Fluent Bit | string | cr.fluentbit.io/fluent/fluent-bit | Yes | +| charts.fluent-bit.image.pullPolicy | Image pull policy | string | IfNotPresent | No | +| charts.fluent-bit.flush | Interval (in seconds) to flush the logs | integer | 1 | No | +| charts.fluent-bit.logLevel | Logging level for Fluent Bit | string | info | No | +| charts.fluent-bit.metricsPort | Port for exposing metrics | integer | 2020 | No | +| charts.fluent-bit.config.service | Main Fluent Bit service configuration | string | See values.yaml | Yes | +| charts.fluent-bit.config.inputs | Log input configuration | string | See values.yaml | Yes | +| charts.fluent-bit.config.filters | Filters applied to logs (e.g. Kubernetes metadata) | string | See values.yaml | Yes | +| charts.fluent-bit.config.outputs | Log output configuration | string | See values.yaml | Yes | +| charts.fluent-bit.config.customParsers | Custom parsers for log messages | string | See values.yaml | No | +| charts.fluent-bit.daemonSetVolumes | Volumes to mount for log access | list | /var/log, /var/lib/docker/containers, /etc/machine-id | Yes | +| charts.fluent-bit.daemonSetVolumeMounts | Mount points in Fluent Bit containers | list | See values.yaml | Yes | +| charts.fluent-bit.service.port | Port exposed by the Fluent Bit service | integer | 2020 | No | +| charts.fluent-bit.rbac.create | Whether to create RBAC resources | bool | true | No | +| charts.fluent-bit.podSecurityPolicy.create | Whether to create PodSecurityPolicy | bool | false | No | +| charts.fluent-bit.hotReload.enabled | Enable configmap hot reload with sidecar | bool | false | No | +| charts.fluent-bit.autoscaling.enabled | Enable horizontal pod autoscaler (only for Deployment) | bool | false | No | + +## Upgrade + +- Ensure compatibility with the Kubernetes version (1.27 or higher) before upgrading. +- Review any changes in the Fluent Bit Helm chart configuration that could impact existing parameters. +- If upgrading from a previous major version, verify that configuration blocks (inputs, filters, outputs) maintain their structure and names. + +> [!CAUTION] +> Upgrades from a manifest-based pack to a Helm chart-based pack might not be compatible. + +## Usage + +Fluent Bit runs as a **DaemonSet** in a Kubernetes cluster and collects logs from each node. +The logs are parsed, filtered, and enriched with Kubernetes metadata before being shipped to the specified backend. + +- The default configuration collects: + - Container logs from `/var/log/containers/*.log` + - System logs via `systemd` +- Logs are filtered using Kubernetes metadata. +- Output is sent to the defined destination, such as **Elasticsearch**. + +You can customize this configuration through `values.yaml`, adjusting sections such as `inputs`, `filters`, and `outputs`. + +> [!NOTE] +> Fluent Bit’s configuration allows flexible integrations with other monitoring tools like **Datadog**, **OpenSearch**, or **Kafka**. + +## References + +- [Fluent Bit Official Docs](https://docs.fluentbit.io/manual) +- [Fluent Bit Helm Chart](https://github.com/fluent/helm-charts/tree/main/charts/fluent-bit) +- [Spectro Cloud Docs - Fluent Bit](https://docs.spectrocloud.com/integrations/fluentbit) + +--- + +**Maintainer:** Spectro Cloud +**Version:** 4.2.3 +**Source:** Community +**Contributor:** Spectro Cloud + diff --git a/packs/fluentbit-4.2.3/charts/fluent-bit-0.56.0.tgz b/packs/fluentbit-4.2.3/charts/fluent-bit-0.56.0.tgz new file mode 100644 index 00000000..853ae64c Binary files /dev/null and b/packs/fluentbit-4.2.3/charts/fluent-bit-0.56.0.tgz differ diff --git a/packs/fluentbit-4.2.3/charts/fluent-bit/.helmignore b/packs/fluentbit-4.2.3/charts/fluent-bit/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/packs/fluentbit-4.2.3/charts/fluent-bit/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/packs/fluentbit-4.2.3/charts/fluent-bit/CHANGELOG.md b/packs/fluentbit-4.2.3/charts/fluent-bit/CHANGELOG.md new file mode 100644 index 00000000..11d2f992 --- /dev/null +++ b/packs/fluentbit-4.2.3/charts/fluent-bit/CHANGELOG.md @@ -0,0 +1,56 @@ +# Fluent Bit Helm Chart Changelog + +> [!NOTE] +> All notable changes to this project will be documented in this file; the format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [UNRELEASED] + +## [v0.56.0] - 2026-02-27 + +### Added + +- VPA recommender may be specified with `.autoscaling.vpa.recommender` + +## [v0.55.1] - 2026-02-27 + +### Changed + +- Update _Fluent Bit_ OCI image to [v4.2.3](https://github.com/fluent/fluent-bit/releases/tag/v4.2.3). ([#697](https://github.com/fluent/helm-charts/pull/697)) _@stevehipwell_ + +## [v0.55.0] - 2026-01-22 + +### Changed + +- Update Fluent Bit OCI image to [4.2.2](https://github.com/fluent/fluent-bit/releases/tag/v4.2.2). ([#684](https://github.com/fluent/helm-charts/pull/684)) _@stevehipwell_ + +## [v0.54.1] - 2026-01-06 + +### Changed + +- Update Fluent Bit OCI image to [4.1.1](https://github.com/fluent/fluent-bit/releases/tag/v4.1.1). ([#639](https://github.com/fluent/helm-charts/pull/666)) _@Xelus22_ + +## [v0.54.0] - 2025-10-09 + +### Changed + +- Update Fluent Bit OCI image to [4.1.0](https://github.com/fluent/fluent-bit/releases/tag/v4.1.0). ([#639](https://github.com/fluent/helm-charts/pull/639)) _@timonegk_ + + + +[UNRELEASED]: https://github.com/fluent/helm-charts/tree/main/charts/fluent-bit +[v0.56.0]: https://github.com/fluent/helm-charts/releases/tag/fluent-bit-0.56.0 +[v0.55.1]: https://github.com/fluent/helm-charts/releases/tag/fluent-bit-0.55.1 +[v0.55.0]: https://github.com/fluent/helm-charts/releases/tag/fluent-bit-0.55.0 +[v0.54.1]: https://github.com/fluent/helm-charts/releases/tag/fluent-bit-0.54.1 +[v0.54.0]: https://github.com/fluent/helm-charts/releases/tag/fluent-bit-0.54.0 diff --git a/packs/fluentbit-4.2.3/charts/fluent-bit/Chart.yaml b/packs/fluentbit-4.2.3/charts/fluent-bit/Chart.yaml new file mode 100644 index 00000000..f37db289 --- /dev/null +++ b/packs/fluentbit-4.2.3/charts/fluent-bit/Chart.yaml @@ -0,0 +1,27 @@ +annotations: + artifacthub.io/changes: |- + - kind: added + description: "VPA recommender may be specified with .autoscaling.vpa." +apiVersion: v1 +appVersion: 4.2.3 +description: Fast and lightweight log processor and forwarder for Linux, OSX and BSD + family operating systems. +home: https://fluentbit.io/ +icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/fluentd/fluentbit/icon/fluentbit-icon-color.svg +keywords: +- logging +- fluent-bit +- fluentd +maintainers: +- email: eduardo@calyptia.com + name: edsiper +- email: naseem@transit.app + name: naseemkullah +- email: towmeykaw@gmail.com + name: Towmeykaw +- email: steve.hipwell@gmail.com + name: stevehipwell +name: fluent-bit +sources: +- https://github.com/fluent/fluent-bit/ +version: 0.56.0 diff --git a/packs/fluentbit-4.2.3/charts/fluent-bit/README.md b/packs/fluentbit-4.2.3/charts/fluent-bit/README.md new file mode 100644 index 00000000..756a3a75 --- /dev/null +++ b/packs/fluentbit-4.2.3/charts/fluent-bit/README.md @@ -0,0 +1,247 @@ +# fluent-bit + +![Version: 0.56.0](https://img.shields.io/badge/Version-0.56.0-informational?style=flat-square) ![AppVersion: 4.2.3](https://img.shields.io/badge/AppVersion-4.2.3-informational?style=flat-square) + +Fast and lightweight log processor and forwarder for Linux, OSX and BSD family operating systems. + +**Homepage:** + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| edsiper | | | +| naseemkullah | | | +| Towmeykaw | | | +| stevehipwell | | | + +## Source Code + +* + +## Installing the Chart + +### OCI Repository + +To install the chart using the recommended OCI method you can use the following command. + +```shell +helm upgrade --install fluent-bit oci://ghcr.io/fluent/helm-charts/fluent-bit --version 0.56.0 +``` + +#### Verification + +As the OCI chart release is signed by [Cosign](https://github.com/sigstore/cosign) you can verify the chart before installing it by running the following command. + +```shell +cosign verify --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity-regexp 'https://github\.com/action-stars/helm-workflows/\.github/workflows/release\.yaml@.+' --certificate-github-workflow-repository fluent/helm-charts --certificate-github-workflow-name Release ghcr.io/fluent/helm-charts/fluent-bit:0.56.0 +``` + +### Non-OCI Repository + +Alternatively you can use the legacy non-OCI method via the following commands. + +```shell +helm repo add fluent https://fluent.github.io/helm-charts/ +helm upgrade --install fluent-bit fluent/fluent-bit --version 0.56.0 +``` + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | | +| annotations | object | `{}` | | +| args[0] | string | `"--workdir=/fluent-bit/etc"` | | +| args[1] | string | `"--config=/fluent-bit/etc/conf/fluent-bit.conf"` | | +| autoscaling.behavior | object | `{}` | | +| autoscaling.customRules | list | `[]` | | +| autoscaling.enabled | bool | `false` | | +| autoscaling.maxReplicas | int | `3` | | +| autoscaling.minReplicas | int | `1` | | +| autoscaling.targetCPUUtilizationPercentage | int | `75` | | +| autoscaling.vpa.annotations | object | `{}` | | +| autoscaling.vpa.controlledResources | list | `[]` | | +| autoscaling.vpa.controlledValues | string | `nil` | | +| autoscaling.vpa.enabled | bool | `false` | | +| autoscaling.vpa.maxAllowed | object | `{}` | | +| autoscaling.vpa.minAllowed | object | `{}` | | +| autoscaling.vpa.recommender | string | `"default"` | | +| autoscaling.vpa.updatePolicy.updateMode | string | `"Auto"` | | +| command[0] | string | `"/fluent-bit/bin/fluent-bit"` | | +| config.customParsers | string | `"[PARSER]\n Name docker_no_time\n Format json\n Time_Keep Off\n Time_Key time\n Time_Format %Y-%m-%dT%H:%M:%S.%L\n"` | | +| config.extraFiles | object | `{}` | | +| config.filters | string | `"[FILTER]\n Name kubernetes\n Match kube.*\n Merge_Log On\n Keep_Log Off\n K8S-Logging.Parser On\n K8S-Logging.Exclude On\n"` | | +| config.inputs | string | `"[INPUT]\n Name tail\n Path /var/log/containers/*.log\n multiline.parser docker, cri\n Tag kube.*\n Mem_Buf_Limit 5MB\n Skip_Long_Lines On\n\n[INPUT]\n Name systemd\n Tag host.*\n Systemd_Filter _SYSTEMD_UNIT=kubelet.service\n Read_From_Tail On\n"` | | +| config.outputs | string | `"[OUTPUT]\n Name es\n Match kube.*\n Host elasticsearch-master\n Logstash_Format On\n Retry_Limit False\n\n[OUTPUT]\n Name es\n Match host.*\n Host elasticsearch-master\n Logstash_Format On\n Logstash_Prefix node\n Retry_Limit False\n"` | | +| config.service | string | `"[SERVICE]\n Daemon Off\n Flush {{ .Values.flush }}\n Log_Level {{ .Values.logLevel }}\n Parsers_File /fluent-bit/etc/parsers.conf\n Parsers_File /fluent-bit/etc/conf/custom_parsers.conf\n HTTP_Server On\n HTTP_Listen 0.0.0.0\n HTTP_Port {{ .Values.metricsPort }}\n Health_Check On\n"` | | +| config.upstream | object | `{}` | | +| daemonSetVolumeMounts[0].mountPath | string | `"/var/log"` | | +| daemonSetVolumeMounts[0].name | string | `"varlog"` | | +| daemonSetVolumeMounts[1].mountPath | string | `"/var/lib/docker/containers"` | | +| daemonSetVolumeMounts[1].name | string | `"varlibdockercontainers"` | | +| daemonSetVolumeMounts[1].readOnly | bool | `true` | | +| daemonSetVolumeMounts[2].mountPath | string | `"/etc/machine-id"` | | +| daemonSetVolumeMounts[2].name | string | `"etcmachineid"` | | +| daemonSetVolumeMounts[2].readOnly | bool | `true` | | +| daemonSetVolumes[0].hostPath.path | string | `"/var/log"` | | +| daemonSetVolumes[0].name | string | `"varlog"` | | +| daemonSetVolumes[1].hostPath.path | string | `"/var/lib/docker/containers"` | | +| daemonSetVolumes[1].name | string | `"varlibdockercontainers"` | | +| daemonSetVolumes[2].hostPath.path | string | `"/etc/machine-id"` | | +| daemonSetVolumes[2].hostPath.type | string | `"File"` | | +| daemonSetVolumes[2].name | string | `"etcmachineid"` | | +| dashboards.annotations | object | `{}` | | +| dashboards.deterministicUid | bool | `false` | | +| dashboards.enabled | bool | `false` | | +| dashboards.labelKey | string | `"grafana_dashboard"` | | +| dashboards.labelValue | int | `1` | | +| dashboards.namespace | string | `""` | | +| dnsConfig | object | `{}` | | +| dnsPolicy | string | `"ClusterFirst"` | | +| env | list | `[]` | | +| envFrom | list | `[]` | | +| envWithTpl | list | `[]` | | +| existingConfigMap | string | `""` | | +| extraContainers | list | `[]` | | +| extraPorts | list | `[]` | | +| extraVolumeMounts | list | `[]` | | +| extraVolumes | list | `[]` | | +| flush | int | `1` | | +| fullnameOverride | string | `""` | | +| hostAliases | list | `[]` | | +| hostNetwork | bool | `false` | | +| hotReload.enabled | bool | `false` | | +| hotReload.extraWatchVolumes | list | `[]` | | +| hotReload.image.digest | string | `nil` | | +| hotReload.image.pullPolicy | string | `"IfNotPresent"` | | +| hotReload.image.repository | string | `"ghcr.io/jimmidyson/configmap-reload"` | | +| hotReload.image.tag | string | `"v0.15.0"` | | +| hotReload.resources | object | `{}` | | +| hotReload.securityContext.allowPrivilegeEscalation | bool | `false` | | +| hotReload.securityContext.capabilities.drop[0] | string | `"ALL"` | | +| hotReload.securityContext.privileged | bool | `false` | | +| hotReload.securityContext.readOnlyRootFilesystem | bool | `true` | | +| hotReload.securityContext.runAsGroup | int | `65532` | | +| hotReload.securityContext.runAsNonRoot | bool | `true` | | +| hotReload.securityContext.runAsUser | int | `65532` | | +| image.digest | string | `nil` | | +| image.pullPolicy | string | `"IfNotPresent"` | | +| image.repository | string | `"cr.fluentbit.io/fluent/fluent-bit"` | | +| image.tag | string | `nil` | | +| imagePullSecrets | list | `[]` | | +| ingress.annotations | object | `{}` | | +| ingress.enabled | bool | `false` | | +| ingress.extraHosts | list | `[]` | | +| ingress.hosts | list | `[]` | | +| ingress.ingressClassName | string | `""` | | +| ingress.tls | list | `[]` | | +| initContainers | list | `[]` | | +| kind | string | `"DaemonSet"` | DaemonSet or Deployment | +| labels | object | `{}` | | +| lifecycle | object | `{}` | | +| livenessProbe.httpGet.path | string | `"/"` | | +| livenessProbe.httpGet.port | string | `"http"` | | +| logLevel | string | `"info"` | | +| luaScripts | object | `{}` | | +| metricsPort | int | `2020` | | +| minReadySeconds | string | `nil` | | +| nameOverride | string | `""` | | +| networkPolicy.enabled | bool | `false` | | +| nodeSelector | object | `{}` | | +| openShift.enabled | bool | `false` | | +| openShift.securityContextConstraints.annotations | object | `{}` | | +| openShift.securityContextConstraints.create | bool | `true` | | +| openShift.securityContextConstraints.existingName | string | `""` | | +| openShift.securityContextConstraints.name | string | `""` | | +| openShift.securityContextConstraints.runAsUser.type | string | `"RunAsAny"` | | +| openShift.securityContextConstraints.seLinuxContext.type | string | `"MustRunAs"` | | +| podAnnotations | object | `{}` | | +| podDisruptionBudget.annotations | object | `{}` | | +| podDisruptionBudget.enabled | bool | `false` | | +| podDisruptionBudget.maxUnavailable | string | `"30%"` | | +| podLabels | object | `{}` | | +| podSecurityContext | object | `{}` | | +| podSecurityPolicy.annotations | object | `{}` | | +| podSecurityPolicy.create | bool | `false` | | +| podSecurityPolicy.runAsUser.rule | string | `"RunAsAny"` | | +| podSecurityPolicy.seLinux.rule | string | `"RunAsAny"` | | +| priorityClassName | string | `""` | | +| prometheusRule.enabled | bool | `false` | | +| rbac.create | bool | `true` | | +| rbac.eventsAccess | bool | `false` | | +| rbac.nodeAccess | bool | `false` | | +| readinessProbe.httpGet.path | string | `"/api/v1/health"` | | +| readinessProbe.httpGet.port | string | `"http"` | | +| replicaCount | int | `1` | Only applicable if kind=Deployment | +| resources | object | `{}` | | +| securityContext | object | `{}` | | +| service.annotations | object | `{}` | | +| service.externalIPs | list | `[]` | | +| service.internalTrafficPolicy | string | `nil` | | +| service.labels | object | `{}` | | +| service.loadBalancerClass | string | `nil` | | +| service.loadBalancerIP | string | `nil` | | +| service.loadBalancerSourceRanges | list | `[]` | | +| service.port | int | `2020` | | +| service.type | string | `"ClusterIP"` | | +| serviceAccount.annotations | object | `{}` | | +| serviceAccount.automountServiceAccountToken | string | `nil` | | +| serviceAccount.create | bool | `true` | | +| serviceAccount.name | string | `nil` | | +| serviceMonitor.additionalEndpoints | list | `[]` | | +| serviceMonitor.enabled | bool | `false` | | +| terminationGracePeriodSeconds | string | `nil` | | +| testFramework.enabled | bool | `true` | | +| testFramework.image.digest | string | `nil` | | +| testFramework.image.pullPolicy | string | `"Always"` | | +| testFramework.image.repository | string | `"busybox"` | | +| testFramework.image.tag | string | `"latest"` | | +| testFramework.namespace | string | `nil` | | +| tolerations | list | `[]` | | +| updateStrategy | object | `{}` | | +| volumeMounts[0].mountPath | string | `"/fluent-bit/etc/conf"` | | +| volumeMounts[0].name | string | `"config"` | | + +## Usage + +### Using Lua Scripts + +Fluent Bit allows us to provide a filter to modify the incoming records using custom [Lua scripts.](https://docs.fluentbit.io/manual/pipeline/filters/lua) + +### How to use Lua scripts with this Chart + +First, you should add your Lua scripts to `luaScripts` in values.yaml, templating is supported. + +```yaml +luaScripts: + filter_example.lua: | + function filter_name(tag, timestamp, record) + -- put your lua code here. + end +``` + +After that, the Lua scripts will be ready to be used as filters. So next step is to add your Fluent bit [filter](https://docs.fluentbit.io/manual/concepts/data-pipeline/filter) to `config.filters` in values.yaml, for example: + +```yaml +config: + filters: | + [FILTER] + Name lua + Match + script /fluent-bit/scripts/filter_example.lua + call filter_name +``` + +Under the hood, the chart will: + +- Create a configmap using `luaScripts`. +- Add a volumeMounts for each Lua scripts using the path `/fluent-bit/scripts/