skills/ci-cd/fluentbit/generator/SKILL.md
Generates, validates, and optimizes Fluent Bit configurations for production use. Use when creating new Fluent Bit configs, implementing log collection pipelines (INPUT, FILTER, OUTPUT sections), configuring Kubernetes log collection with metadata enrichment, forwarding logs to destinations (Elasticsearch, Loki, S3, Kafka, CloudWatch, OpenTelemetry), building multi-line log parsing, or converting existing logging configurations to Fluent Bit.
npx skillsauth add pantheon-org/tekhne fluentbit-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Identify the following before generating:
Use AskUserQuestion if key information is missing.
python3 scripts/generate_config.py --help
Supported use cases: kubernetes-elasticsearch, kubernetes-loki, kubernetes-cloudwatch, kubernetes-opentelemetry, application-multiline, syslog-forward, file-tail-s3, http-kafka, multi-destination, prometheus-metrics, lua-filtering, stream-processor, custom
python3 scripts/generate_config.py --use-case kubernetes-elasticsearch --output fluent-bit.conf
python3 scripts/generate_config.py --use-case kubernetes-opentelemetry --cluster-name my-cluster --output fluent-bit.conf
State explicitly why the script was not used (e.g., "Manual generation chosen because grep filter for log levels is not supported by the script").
Before writing any manual config:
examples/ — production-ready reference configs are available for all 13 use cases (e.g. kubernetes-elasticsearch.conf, kubernetes-loki.conf, application-multiline.conf, multi-destination.conf, full-production.conf, and others).examples/parsers.conf — reuse existing parsers (docker, cri, json, nginx, apache, syslog-rfc3164/5424, multiline-java/python/go/ruby) before creating custom ones.Manual configuration structure (fluent-bit.conf + optional parsers.conf):
# ── SERVICE ─────────────────────────────────────────────────────────────────
[SERVICE]
Flush 1 # seconds; lower=lower latency, higher CPU
Daemon Off # Off in containers
Log_Level info # info for prod, debug for troubleshooting
Parsers_File parsers.conf
HTTP_Server On # enables /api/v1/health for K8s probes
HTTP_Listen 0.0.0.0
HTTP_Port 2020
storage.metrics on
# ── INPUT ────────────────────────────────────────────────────────────────────
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/*.log
Exclude_Path /var/log/containers/*fluent-bit*.log
Parser docker
DB /var/log/flb_kube.db # position tracking across restarts
Mem_Buf_Limit 50MB # always set to prevent OOM
Skip_Long_Lines On
Refresh_Interval 10
# ── FILTER ───────────────────────────────────────────────────────────────────
[FILTER]
Name kubernetes
Match kube.*
Kube_URL https://kubernetes.default.svc:443
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
Kube_Tag_Prefix kube.var.log.containers.
Merge_Log On
Keep_Log Off
K8S-Logging.Parser On
K8S-Logging.Exclude On
Labels On
Annotations Off
[FILTER]
Name modify
Match *
Add cluster_name my-cluster
Add environment production
# ── OUTPUT ───────────────────────────────────────────────────────────────────
[OUTPUT]
Name es
Match *
Host elasticsearch.logging.svc
Port 9200
Logstash_Format On
Logstash_Prefix k8s
Retry_Limit 3
storage.total_limit_size 5M
tls On
tls.verify On
Common FILTER patterns (use as needed, order matters — parsers before modifiers):
# Parse structured fields from a log key
[FILTER]
Name parser
Match *
Key_Name log
Parser json
Reserve_Data On
# Include/exclude by field value
[FILTER]
Name grep
Match *
Regex level (error|fatal|critical)
Exclude path /health
# Multi-line (stack traces)
[FILTER]
Name multiline
Match *
multiline.key_content log
multiline.parser java, python, go
# Lua custom scripting
[FILTER]
Name lua
Match *
script /fluent-bit/scripts/filter.lua
call process_record
# Throttle (rate limiting)
[FILTER]
Name throttle
Match *
Rate 1000
Window 5
Interval 1m
Common OUTPUT patterns:
# Grafana Loki
[OUTPUT]
Name loki
Match *
Host loki.default.svc
Port 3100
labels job=fluent-bit, namespace=$kubernetes['namespace_name'], pod=$kubernetes['pod_name']
label_keys $stream
remove_keys kubernetes,stream
auto_kubernetes_labels on
line_format json
Retry_Limit 3
# AWS S3
[OUTPUT]
Name s3
Match *
bucket my-logs-bucket
region us-east-1
total_file_size 100M
upload_timeout 10m
compression gzip
s3_key_format /fluent-bit-logs/%Y/%m/%d/$TAG[0]/%H-%M-%S-$UUID.gz
Retry_Limit 3
# Kafka
[OUTPUT]
Name kafka
Match *
Brokers kafka-broker-1:9092,kafka-broker-2:9092
Topics logs
Format json
Timestamp_Key @timestamp
Retry_Limit 3
# AWS CloudWatch Logs
[OUTPUT]
Name cloudwatch_logs
Match *
region us-east-1
log_group_name /aws/fluent-bit/logs
log_stream_prefix from-fluent-bit-
auto_create_group On
Retry_Limit 3
# OpenTelemetry (OTLP/HTTP)
[OUTPUT]
Name opentelemetry
Match *
Host opentelemetry-collector.observability.svc
Port 4318
logs_uri /v1/logs
add_label cluster my-cluster
add_label environment production
tls On
tls.verify On
Retry_Limit 3
# HTTP endpoint
[OUTPUT]
Name http
Match *
Host logs.example.com
Port 443
URI /api/logs
Format json
tls On
tls.verify On
Header Authorization Bearer ${API_TOKEN}
Compress gzip
Retry_Limit 3
# stdout (debug only)
[OUTPUT]
Name stdout
Match *
Format json_lines
Plugin documentation lookup (when needed for unfamiliar plugins):
mcp__context7__resolve-library-id with "fluent-bit", then mcp__context7__get-library-docs with the plugin topic."fluent-bit" "<plugin-type>" "<plugin-name>" "configuration" site:docs.fluentbit.ioSyntax check before finalizing:
[SECTION] formatMatch tags are consistent with Tag values on inputsparsers.conf or Parsers_FileInvoke devops-skills:fluentbit-validator on the generated config to run:
fluent-bit binary is availableFix any reported issues and re-validate until all checks pass.
When delivering a configuration:
${ENV_VAR} syntax, never hardcode secretstls.verify On in production; if Off is needed add an inline comment explaining why (e.g., # Internal cluster with self-signed certs)| Concern | Recommendation |
|---|---|
| OOM prevention | Mem_Buf_Limit 50MB on every tail input |
| Crash recovery | DB /var/log/flb_kube.db on tail inputs |
| Log loops | Exclude_Path *fluent-bit*.log |
| Credentials | ${ENV_VAR} only, never hardcode |
| TLS | tls On + tls.verify On in production |
| Retries | Retry_Limit 3-5 on all outputs |
| Disk buffer | storage.total_limit_size to prevent exhaustion |
| Health checks | HTTP_Server On, probe GET :2020/api/v1/health |
| Bandwidth | Enable compression gzip on network outputs |
| Structured logs | Prefer JSON app logs; use Merge_Log On in K8s filter |
Match * on all output plugins simultaneouslyMatch *.kube.*, app.*, system.*) and route each namespace to its intended destination with a specific Match pattern.Mem_Buf_Limit on INPUT plugins[INPUT] Name tail Tag app.* with no Mem_Buf_Limit setting.Mem_Buf_Limit 50MB to every tail input (adjust the value based on measured log volume).Retry_Limit False in outputs without monitoringRetry_Limit False in an output plugin with no alerting on delivery failure metrics.Retry_Limit 5 and monitor for delivery failures using Fluent Bit's built-in Prometheus metrics (/api/v1/metrics).json or logfmt parsers applyParser regex_json configured to extract fields from JSON-formatted log lines.Parser json — simpler, faster, and guaranteed to handle all valid JSON log output correctly.fluent-bit.confHTTP_Passwd secretpassword written directly in the config file.HTTP_Passwd ${LOKI_PASSWORD} — and inject the value at runtime via Kubernetes secrets or a secrets manager.| Resource | Purpose |
|---|---|
| scripts/generate_config.py | Template-based config generation (13 use cases) |
| examples/*.conf | Production-ready reference configurations |
| examples/parsers.conf | Reusable parser library |
| docs.fluentbit.io | Official plugin reference |
| context7 /fluent/fluent-bit-docs | MCP-accessible documentation |
tools
Generates Jenkinsfiles with stages, agents, parallel builds, post-build actions, and security scanning for Declarative and Scripted pipeline syntaxes. Use when creating a Jenkins pipeline script, Groovy pipeline, or build configuration; implementing CI/CD workflows, continuous integration, or build automation; adding Docker/Kubernetes deployments, matrix builds, parameterized pipelines, or DevSecOps security scanning to a Jenkins setup.
tools
Comprehensive toolkit for validating, linting, testing, and analyzing Helm charts and their rendered Kubernetes resources. Use this skill when working with Helm charts, validating templates, debugging chart issues, working with Custom Resource Definitions (CRDs) that require documentation lookup, or checking Helm best practices.
tools
Comprehensive toolkit for generating best practice Helm charts and resources following current standards and conventions. Use this skill when creating new Helm charts, implementing Helm templates, scaffolding Chart.yaml and values.yaml, defining deployment templates, service definitions, ingress configurations, .tpl helpers, or building Helm projects from scratch. Trigger phrases include "create", "generate", "build", "scaffold" alongside terms like "kubernetes helm", "k8s charts", "helm package", "chart dependencies", "values.yaml", or "helm install".
development
Validates .gitlab-ci.yml syntax, detects security misconfigurations in job definitions, checks for deprecated keywords, ensures proper stage ordering, and audits pipeline configurations for best practices. Use when working with .gitlab-ci.yml files, validating GitLab CI/CD pipeline syntax, debugging configuration errors, checking for hardcoded secrets or credentials in pipeline jobs, optimizing pipeline performance with DAG or cache, or performing security audits on GitLab CI/CD configurations.