diff --git a/.woodpecker/build-linux.yml b/.woodpecker/build-linux.yml
index 46eb367..22eba83 100644
--- a/.woodpecker/build-linux.yml
+++ b/.woodpecker/build-linux.yml
@@ -14,16 +14,22 @@ steps:
   - export VERSION=$([ -z $CI_COMMIT_TAG ] && echo latest || echo $CI_COMMIT_TAG)-$(sed 's#/#-#g' <<< $CI_SYSTEM_PLATFORM)
   - echo $CONTAINER_PASSWORD | podman login $DRYCC_REGISTRY --username $CONTAINER_USERNAME --password-stdin > /dev/null 2>&1
   - make podman-build podman-immutable-push
-  secrets:
-  - codename
-  - dev_registry
-  - drycc_registry
-  - container_username
-  - container_password
+  environment:
+    CODENAME:
+      from_secret: codename
+    DEV_REGISTRY:
+      from_secret: dev_registry
+    DRYCC_REGISTRY:
+      from_secret: drycc_registry
+    CONTAINER_USERNAME:
+      from_secret: container_username
+    CONTAINER_PASSWORD:
+      from_secret: container_password
   when:
     event:
     - push
     - tag
+    - cron
 
 depends_on:
 - test-linux
diff --git a/.woodpecker/chart.yaml b/.woodpecker/chart.yaml
index 5aa7eb3..cfcd3ec 100644
--- a/.woodpecker/chart.yaml
+++ b/.woodpecker/chart.yaml
@@ -14,15 +14,20 @@ steps:
   - helm package -u charts/$${CI_REPO_NAME} --version $CHART_VERSION --app-version $APP_VERSION
   - echo $CONTAINER_PASSWORD | helm registry login $DRYCC_REGISTRY -u $CONTAINER_USERNAME --password-stdin
   - helm push $${CI_REPO_NAME}-$CHART_VERSION.tgz oci://$DRYCC_REGISTRY/$([ -z $CI_COMMIT_TAG ] && echo charts-testing || echo charts)
-  secrets:
-  - dev_registry
-  - drycc_registry
-  - container_username
-  - container_password
+  environment:
+    DEV_REGISTRY:
+      from_secret: dev_registry
+    DRYCC_REGISTRY:
+      from_secret: drycc_registry
+    CONTAINER_USERNAME:
+      from_secret: container_username
+    CONTAINER_PASSWORD:
+      from_secret: container_password
   when:
     event:
     - push
     - tag
+    - cron
 
 depends_on:
 - manifest
diff --git a/.woodpecker/manifest.yml b/.woodpecker/manifest.yml
index 052f5d8..88ded66 100644
--- a/.woodpecker/manifest.yml
+++ b/.woodpecker/manifest.yml
@@ -8,12 +8,14 @@ steps:
   commands:
   - sed -i "s/{{project}}/$${CI_REPO_NAME}/g" .woodpecker/manifest.tmpl
   - sed -i "s/registry.drycc.cc/$${DRYCC_REGISTRY}/g" .woodpecker/manifest.tmpl
-  secrets:
-  - drycc_registry
+  environment:
+    DRYCC_REGISTRY:
+      from_secret: drycc_registry
   when:
     event:
     - tag
     - push
+    - cron
 
 - name: publish-manifest
   image: bash
@@ -26,13 +28,16 @@ steps:
     -v $(pwd):$(pwd)
     -w $(pwd)
     plugins/manifest
-  secrets:
-  - container_username
-  - container_password
+  environment:
+    CONTAINER_USERNAME:
+      from_secret: container_username
+    CONTAINER_PASSWORD:
+      from_secret: container_password
   when:
     event:
     - tag
     - push
+    - cron
 
 depends_on:
 - build-linux
diff --git a/.woodpecker/test-linux.yml b/.woodpecker/test-linux.yml
index d47ccc5..194832f 100644
--- a/.woodpecker/test-linux.yml
+++ b/.woodpecker/test-linux.yml
@@ -12,10 +12,13 @@ steps:
   image: bash
   commands:
   - make test
-  secrets:
-  - codename
-  - dev_registry
+  environment:
+    CODENAME:
+      from_secret: codename
+    DEV_REGISTRY:
+      from_secret: dev_registry
   when:
     event:
     - push
     - tag
+    - cron
diff --git a/Dockerfile b/Dockerfile
index e69e366..045e8b5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,28 +10,22 @@ RUN export GO111MODULE=on \
   && init-stack go mod vendor \
   && init-stack go build \
     -ldflags "-X main.Revision=${BUILD_TAG} -X main.BuildDate=${BUILD_DATE}" \
-    -buildmode=c-shared -o /var/lib/fluent-bit/out_drycc.so plugin/out_drycc.go
+    -buildmode=c-shared -o /var/lib/fluent-bit/out_quickwit.so plugin/out_quickwit.go
 
 
 FROM registry.drycc.cc/drycc/base:${CODENAME}
 
-ENV DRYCC_UID=1001 \
+ARG DRYCC_UID=1001 \
   DRYCC_GID=1001 \
-  FLUENT_BIT_VERSION=2.1.8 \
-  DRYCC_HOME_DIR=/opt/drycc \
-  FLUENT_BIT_PLUGINS_PATH=${DRYCC_HOME_DIR}/fluent-bit/plugins
-  
+  FLUENT_BIT_VERSION=4.0.9 \
+  DRYCC_HOME_DIR=/opt/drycc
+
 RUN groupadd drycc --gid ${DRYCC_GID} \
   && useradd drycc -u ${DRYCC_UID} -g ${DRYCC_GID} -s /bin/bash -m -d ${DRYCC_HOME_DIR}
 
 RUN install-stack fluent-bit ${FLUENT_BIT_VERSION} \
-  && mkdir -p ${FLUENT_BIT_PLUGINS_PATH} \
   && chown -R ${DRYCC_UID}:${DRYCC_GID} ${DRYCC_HOME_DIR}/fluent-bit
 
-COPY --chown=${DRYCC_UID}:${DRYCC_GID} --from=build /var/lib/fluent-bit/out_drycc.so ${FLUENT_BIT_PLUGINS_PATH}
-
-ADD rootfs /
+COPY --chown=${DRYCC_UID}:${DRYCC_GID} --from=build /var/lib/fluent-bit/out_quickwit.so /opt/drycc/fluent-bit/lib
 
 USER ${DRYCC_UID}
-
-CMD ["/usr/local/bin/boot"]
diff --git a/Makefile b/Makefile
index 36af89d..3ccbdc4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,6 @@
 SHORT_NAME ?= fluentbit
 BUILD_TAG ?= git-$(shell git rev-parse --short HEAD)
 BUILD_DATE := $(shell date --rfc-3339=ns | tr " " T)
-SHELL_SCRIPTS = $(wildcard rootfs/usr/local/bin/*)
 DRYCC_REGISTRY ?= ${DEV_REGISTRY}
 IMAGE_PREFIX ?= drycc
 PLATFORM ?= linux/amd64,linux/arm64
@@ -42,7 +41,6 @@ style-check:
 	gofmt -l -w -s plugin
 	go vet plugin
 	lint
-	shellcheck $(SHELL_SCRIPTS)
 
 clean:
 	rm -rf _dist
diff --git a/README.md b/README.md
index db5cff2..c7f0aff 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ a lightweight, [Heroku-inspired](http://heroku.com) workflow.
 ## About
 This is an debian based image for running [fluentbit](http://fluentbit.io). It is built for the purpose of running on a kubernetes cluster.
 
-This image is in with [workflow](https://github.com/drycc/workflow) v2 to send all log data to the [logger](https://github.com/drycc/logger) component.
+This image is in with [workflow](https://github.com/drycc/workflow) v2 to send all log data to the [quickwit](https://github.com/drycc/quickwit) component.
 
 
 ## Helm Chart
@@ -23,12 +23,3 @@ Once you have installed the Helm client, you can deploy a Fluentbit Chart into a
 ```sh
 helm show values oci://registry.drycc.cc/charts-testing/fluentbit
 ```
-
-## Plugins
-
-Fluent Bit currently supports integration of Golang plugins built as shared objects for output plugins only. The interface for the Golang plugins is currently under development but is functional.
-
-### Drycc Output
-Drycc output is a custom fluentbit plugin that was written to forward data directly to drycc components while filtering out data that we did not care about. We have 2 pieces of information we care about currently.
-
-Logs from applications that are written to stdout within the container and the controller logs that represent actions against those applications. These logs are sent to an internal messaging system ([REIDS](https://redis.io/topics/streams-intro)) on a configurable topic. The logger component then reads those messages and stores the data in an ring buffer.
diff --git a/charts/fluentbit/Chart.yaml b/charts/fluentbit/Chart.yaml
index 3f634f5..148e464 100644
--- a/charts/fluentbit/Chart.yaml
+++ b/charts/fluentbit/Chart.yaml
@@ -3,6 +3,10 @@ home: https://github.com/drycc/fluentbit
 apiVersion: v2
 appVersion: 1.0.0
 version: v1.0.0
+dependencies:
+  - name: common
+    repository: oci://registry.drycc.cc/charts
+    version: ~1.1.2
 description: Log shipping mechanism for Drycc Workflow.
 maintainers:
   - name: Drycc Team
diff --git a/charts/fluentbit/templates/_helpers.tpl b/charts/fluentbit/templates/_helpers.tpl
new file mode 100644
index 0000000..250674d
--- /dev/null
+++ b/charts/fluentbit/templates/_helpers.tpl
@@ -0,0 +1,8 @@
+{{/* Generate fluentbit envs */}}
+{{- define "fluentbit.envs" }}
+env:
+- name: NAMESPACE
+  valueFrom:
+    fieldRef:
+      fieldPath: metadata.namespace
+{{- end }}
\ No newline at end of file
diff --git a/charts/fluentbit/templates/logger-fluentbit-configmap.yaml b/charts/fluentbit/templates/fluentbit-configmap.yaml
similarity index 94%
rename from charts/fluentbit/templates/logger-fluentbit-configmap.yaml
rename to charts/fluentbit/templates/fluentbit-configmap.yaml
index 3de9e14..5915f70 100644
--- a/charts/fluentbit/templates/logger-fluentbit-configmap.yaml
+++ b/charts/fluentbit/templates/fluentbit-configmap.yaml
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: logger-fluentbit-config
+  name: fluentbit-config
   namespace: {{ .Release.Namespace }}
   labels:
     heritage: drycc
diff --git a/charts/fluentbit/templates/logger-fluentbit-daemon.yaml b/charts/fluentbit/templates/fluentbit-daemon.yaml
similarity index 50%
rename from charts/fluentbit/templates/logger-fluentbit-daemon.yaml
rename to charts/fluentbit/templates/fluentbit-daemon.yaml
index cbe41a5..ddb77ce 100644
--- a/charts/fluentbit/templates/logger-fluentbit-daemon.yaml
+++ b/charts/fluentbit/templates/fluentbit-daemon.yaml
@@ -1,84 +1,65 @@
 apiVersion: apps/v1
 kind: DaemonSet
 metadata:
-  name: drycc-logger-fluentbit
+  name: drycc-fluentbit
   labels:
     heritage: drycc
   annotations:
     component.drycc.cc/version: {{ .Values.imageTag }}
 spec:
-  {{- if ge .Capabilities.KubeVersion.Minor "6" }}
   updateStrategy:
     type: RollingUpdate
-  {{- end }}
   selector:
     matchLabels:
-      app: drycc-logger-fluentbit
+      app: drycc-fluentbit
       heritage: drycc
   template:
     metadata:
-      name: drycc-logger-fluentbit
+      name: drycc-fluentbit
       labels: {{- include "common.labels.standard" . | nindent 8 }}
         heritage: drycc
-        app: drycc-logger-fluentbit
+        app: drycc-fluentbit
     spec:
-      serviceAccount: drycc-logger-fluentbit
+      serviceAccount: drycc-fluentbit
       initContainers:
-      - name: drycc-logger-fluentbit-init
+      - name: drycc-fluentbit-init
         image: {{.Values.imageRegistry}}/{{.Values.imageOrg}}/python-dev:latest
         imagePullPolicy: {{.Values.imagePullPolicy}}
         args:
         - netcat
         - -v
-        - -a
-        - $(DRYCC_REDIS_ADDRS)
-        env:
-        - name: DRYCC_REDIS_ADDRS
-          valueFrom:
-            secretKeyRef:
-              name: redis-creds
-              key: addrs
+        - -u
+        - http://drycc-quickwit-indexer:7280
+        {{- include "fluentbit.envs" . | indent 8 }}
       containers:
-      - name: drycc-logger-fluentbit
+      - name: drycc-fluentbit
         image: {{.Values.imageRegistry}}/{{.Values.imageOrg}}/fluentbit:{{.Values.imageTag}}
         imagePullPolicy: {{.Values.imagePullPolicy}}
         {{- if .Values.diagnosticMode.enabled }}
         command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 10 }}
         args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 10 }}
+        {{- else }}
+        args:
+        - fluent-bit
+        - --config=/opt/drycc/fluent-bit/etc/fluent-bit/fluent-bit.conf
         {{- end }}
-        {{- if or (.Values.limitsCpu) (.Values.limitsMemory)}}
+        {{- with index .Values "resources" }}
         resources:
-          limits:
-            {{- if (.Values.limitsCpu) }}
-            cpu: {{.Values.limitsCpu}}
-            {{- end}}
-            {{- if (.Values.limitsMemory) }}
-            memory: {{.Values.limitsMemory}}
-            {{- end}}
-        {{- end}}
-        env:
-        - name: DRYCC_REDIS_ADDRS
-          valueFrom:
-            secretKeyRef:
-              name: redis-creds
-              key: addrs
-        - name: DRYCC_REDIS_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: redis-creds
-              key: password
+          {{- toYaml . | nindent 10 }}
+        {{- end }}
+        {{- include "fluentbit.envs" . | indent 8 }}
         volumeMounts:
         - name: varlog
           mountPath: /var/log
-        - name: logger-fluentbit-config
-          mountPath: /opt/drycc/fluent-bit/templates
+        - name: fluentbit-config
+          mountPath: /opt/drycc/fluent-bit/etc/fluent-bit
       volumes:
       - name: varlog
         hostPath:
           path: /var/log
-      - name: logger-fluentbit-config
+      - name: fluentbit-config
         configMap:
-          name: logger-fluentbit-config
+          name: fluentbit-config
       securityContext:
         fsGroup: 0
         runAsGroup: 0
diff --git a/charts/fluentbit/templates/logger-fluentbit-service-account.yaml b/charts/fluentbit/templates/fluentbit-service-account.yaml
similarity index 71%
rename from charts/fluentbit/templates/logger-fluentbit-service-account.yaml
rename to charts/fluentbit/templates/fluentbit-service-account.yaml
index 2f87155..5d03f02 100644
--- a/charts/fluentbit/templates/logger-fluentbit-service-account.yaml
+++ b/charts/fluentbit/templates/fluentbit-service-account.yaml
@@ -1,6 +1,6 @@
 apiVersion: v1
 kind: ServiceAccount
 metadata:
-  name: drycc-logger-fluentbit
+  name: drycc-fluentbit
   labels:
     heritage: drycc
diff --git a/charts/fluentbit/templates/logger-fluentbit-clusterrole.yaml b/charts/fluentbit/templates/logger-fluentbit-clusterrole.yaml
deleted file mode 100644
index fd41c88..0000000
--- a/charts/fluentbit/templates/logger-fluentbit-clusterrole.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-{{- if (.Values.global.rbac) -}}
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: {{ printf "%s:drycc-logger-fluentbit" .Release.Namespace | quote }}
-  labels:
-    app: drycc-logger-fluentbit
-    heritage: drycc
-rules:
-- apiGroups: [""]
-  resources: ["pods", "namespaces"]
-  verbs: ["list", "get", "watch"]
-{{- end -}}
diff --git a/charts/fluentbit/templates/logger-fluentbit-clusterrolebinding.yaml b/charts/fluentbit/templates/logger-fluentbit-clusterrolebinding.yaml
deleted file mode 100644
index 19e2740..0000000
--- a/charts/fluentbit/templates/logger-fluentbit-clusterrolebinding.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-{{- if (.Values.global.rbac) -}}
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: {{ printf "%s:drycc-logger-fluentbit" .Release.Namespace | quote }}
-  labels:
-    app: drycc-logger-fluentbit
-    heritage: drycc
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: {{ printf "%s:drycc-logger-fluentbit" .Release.Namespace | quote }}
-subjects:
-- kind: ServiceAccount
-  name: drycc-logger-fluentbit
-  namespace: {{ .Release.Namespace }}
-{{- end -}}
diff --git a/charts/fluentbit/values.yaml b/charts/fluentbit/values.yaml
index fac411b..b815578 100644
--- a/charts/fluentbit/values.yaml
+++ b/charts/fluentbit/values.yaml
@@ -2,8 +2,6 @@ imageOrg: "drycc"
 imagePullPolicy: "Always"
 imageTag: "canary"
 imageRegistry: "registry.drycc.cc"
-# limitsCpu: "100m"
-# limitsMemory: "50Mi"
 
 ## Enable diagnostic mode
 ##
@@ -20,11 +18,20 @@ diagnosticMode:
   args:
     - infinity
 
-redis:
-  replicas: 1
+resources: {}
+  # limits:
+  #   cpu: 200m
+  #   memory: 50Mi
+  # requests:
+  #   cpu: 100m
+  #   memory: 30Mi
 
 # Interval to flush output (seconds)
-flush: 1
+flush: 10
+
+# The log index prefix in Quickwit, which is prepended to the index name.
+quickwit:
+  logIndexPrefix: "logs-"
 
 ## https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/classic-mode/configuration-file
 config:
@@ -33,8 +40,8 @@ config:
         Flush               {{ .Values.flush }}
         Daemon              Off
         Log_Level           info
-        Plugins_File        /opt/drycc/fluent-bit/etc/fluent-bit/plugins.conf
         Parsers_File        /opt/drycc/fluent-bit/etc/fluent-bit/parsers.conf
+        Plugins_File        /opt/drycc/fluent-bit/etc/fluent-bit/plugins.conf
 
   ## https://docs.fluentbit.io/manual/pipeline/inputs
   inputs: |
@@ -53,25 +60,23 @@ config:
     [FILTER]
         Name                kubernetes
         Match               kubernetes.*
-        Kube_URL            https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}
-        Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-        Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
-        Kube_Tag_Prefix     kubernetes.var.log.containers.
-        tls.verify          false
+        Keep_Log            Off
+        Merge_Log           On
         Buffer_Size         0
+        Regex_Parser        kubernetes
+        Use_Tag_For_Meta    true
 
   ## https://docs.fluentbit.io/manual/pipeline/outputs
   outputs: |
     [OUTPUT]
-        Name                drycc
+        Name                quickwit
         Match               kubernetes.*
-        Addrs               ${DRYCC_REDIS_ADDRS}
-        Stream              logs
-        Max_Len             3000
-        Password            ${DRYCC_REDIS_PASSWORD}
-        Controller_Name     drycc-controller
-        Controller_Regex    ^(INFO|WARN|DEBUG|ERROR)\s+(\[(\S+)\])+:(.*)
-        Exclude_Namespaces  drycc,drycc-manager,drycc-helmbroker,kube-system,metallb
+        Base_URL            http://drycc-quickwit-indexer:7280
+        Compress            true
+        Index_Name          {{printf "%s{{ %s | default \"%s\" }}" .Values.quickwit.logIndexPrefix ".kubernetes.namespace_name" .Release.Namespace }}
+        Buffer_Size         65536
+        Json_Date_Key       timestamp
+        Json_Date_Format    rfc3399
   ## https://docs.fluentbit.io/manual/pipeline/parsers
   parsers: |
     [PARSER]
@@ -81,7 +86,7 @@ config:
         Time_Format         %Y-%m-%dT%H:%M:%S.%L
         Time_Keep           On
 
-    [PARSER]
+    [PARSER] 
         # http://rubular.com/r/tjUt3Awgg4
         Name                cri
         Format              regex
@@ -89,11 +94,13 @@ config:
         Time_Key            time
         Time_Format         %Y-%m-%dT%H:%M:%S.%L%z
         Time_Keep           On
+
+    [PARSER]
+        Name    kubernetes
+        Format  regex
+        Regex   (?<tag>[^.]+)?\.?(?<pod_name>[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log$
+
   ## https://docs.fluentbit.io/manual/development/golang-output-plugins
   plugins: |
     [PLUGINS]
-        Path                ${FLUENT_BIT_PLUGINS_PATH}/out_drycc.so
-
-# Role-Based Access Control for Kubernetes >= 1.5
-global:
-  rbac: false
+        Path                /opt/drycc/fluent-bit/lib/out_quickwit.so
diff --git a/go.mod b/go.mod
index 6fc2d88..731700a 100644
--- a/go.mod
+++ b/go.mod
@@ -1,15 +1,23 @@
 module github.com/drycc/fluentbit
 
-go 1.20
+go 1.25
 
 require (
+	github.com/Masterminds/sprig/v3 v3.3.0
 	github.com/fluent/fluent-bit-go v0.0.0-20230731091245-a7a013e2473c
-	github.com/redis/go-redis/v9 v9.0.5
-	golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb
 )
 
 require (
-	github.com/cespare/xxhash/v2 v2.2.0 // indirect
-	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
-	github.com/ugorji/go/codec v1.1.7 // indirect
+	dario.cat/mergo v1.0.1 // indirect
+	github.com/Masterminds/goutils v1.1.1 // indirect
+	github.com/Masterminds/semver/v3 v3.3.0 // indirect
+	github.com/google/go-cmp v0.7.0 // indirect
+	github.com/google/uuid v1.6.0 // indirect
+	github.com/huandu/xstrings v1.5.0 // indirect
+	github.com/mitchellh/copystructure v1.2.0 // indirect
+	github.com/mitchellh/reflectwalk v1.0.2 // indirect
+	github.com/shopspring/decimal v1.4.0 // indirect
+	github.com/spf13/cast v1.7.0 // indirect
+	github.com/ugorji/go/codec v1.2.12 // indirect
+	golang.org/x/crypto v0.26.0 // indirect
 )
diff --git a/go.sum b/go.sum
index b160a8f..3639cf0 100644
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,49 @@
-github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
-github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
+github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
+github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
+github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
+github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
+github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/fluent/fluent-bit-go v0.0.0-20230731091245-a7a013e2473c h1:yKN46XJHYC/gvgH2UsisJ31+n4K3S7QYZSfU2uAWjuI=
 github.com/fluent/fluent-bit-go v0.0.0-20230731091245-a7a013e2473c/go.mod h1:L92h+dgwElEyUuShEwjbiHjseW410WIcNz+Bjutc8YQ=
-github.com/redis/go-redis/v9 v9.0.5 h1:CuQcn5HIEeK7BgElubPP8CGtE0KakrnbBSTLjathl5o=
-github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
+github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
+github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
+github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
+github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
+github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
-github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
 github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
-golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA=
-golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
+github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
+golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/plugin/out_drycc.go b/plugin/out_drycc.go
deleted file mode 100644
index 2493711..0000000
--- a/plugin/out_drycc.go
+++ /dev/null
@@ -1,189 +0,0 @@
-package main
-
-import (
-	"C"
-	"unsafe"
-
-	"context"
-	"sort"
-	"strings"
-
-	"golang.org/x/exp/slices"
-
-	"github.com/fluent/fluent-bit-go/output"
-	redis "github.com/redis/go-redis/v9"
-)
-import (
-	"encoding/json"
-	"fmt"
-	"regexp"
-	"strconv"
-	"time"
-)
-
-var (
-	Stream            string
-	MaxLen            int64
-	Revision          string
-	BuildDate         string
-	ControllerName    string
-	ControllerRegex   *regexp.Regexp
-	ExcludeNamespaces []string
-	ClusterClient     *redis.ClusterClient
-)
-
-//export FLBPluginRegister
-func FLBPluginRegister(ctx unsafe.Pointer) int {
-	fmt.Printf("Drycc output version %s %s", Revision, BuildDate)
-	return output.FLBPluginRegister(ctx, "drycc", "Ship fluent-bit logs to redis xstream")
-}
-
-// (fluentbit will call this)
-// ctx (context) pointer to fluentbit context (state/ c code)
-//
-//export FLBPluginInit
-func FLBPluginInit(ctx unsafe.Pointer) int {
-	var err error
-	addrs := strings.Split(output.FLBPluginConfigKey(ctx, "Addrs"), ",")
-	sort.Strings(addrs)
-	Stream = output.FLBPluginConfigKey(ctx, "Stream")
-	MaxLen, err = strconv.ParseInt(output.FLBPluginConfigKey(ctx, "Max_Len"), 10, 64)
-	if err != nil {
-		MaxLen = 1000
-	}
-	username := output.FLBPluginConfigKey(ctx, "Username")
-	password := output.FLBPluginConfigKey(ctx, "Password")
-	ControllerName = output.FLBPluginConfigKey(ctx, "Controller_Name")
-	ControllerRegex = regexp.MustCompile(output.FLBPluginConfigKey(ctx, "Controller_Regex"))
-	ExcludeNamespaces = strings.Split(output.FLBPluginConfigKey(ctx, "Exclude_Namespaces"), ",")
-	ClusterClient = redis.NewClusterClient(&redis.ClusterOptions{
-		ClusterSlots: func(context.Context) ([]redis.ClusterSlot, error) {
-			const slotsSize = 16383
-			var size = len(addrs)
-			var slotsRange = slotsSize / size
-			var slots []redis.ClusterSlot
-			for index, addr := range addrs {
-				start := slotsRange * index
-				end := start + slotsRange
-				if (slotsSize - end) < slotsRange {
-					end = slotsSize
-				}
-				slots = append(slots, redis.ClusterSlot{
-					Start: start,
-					End:   end,
-					Nodes: []redis.ClusterNode{{Addr: addr}},
-				})
-			}
-			return slots, nil
-		},
-		Username:      username,
-		Password:      password, // "" == no password
-		RouteRandomly: true,
-	})
-	return output.FLB_OK
-}
-
-//export FLBPluginFlushCtx
-func FLBPluginFlushCtx(ctx, data unsafe.Pointer, length C.int, _ *C.char) int {
-	status := output.FLB_OK
-	context, cancel := context.WithTimeout(context.Background(), time.Second*30)
-	defer cancel()
-	decoder := output.NewDecoder(data, int(length))
-	pipeline := ClusterClient.Pipeline()
-	for {
-		ret, ts, rec := output.GetRecord(decoder)
-		if ret != 0 {
-			break
-		}
-		// Get timestamp
-		rec["time"] = toTimestamp(ts)
-		if !checkRecord(rec) {
-			continue
-		}
-		if values, err := toValues(rec); err == nil {
-			if err := pipeline.XAdd(context, &redis.XAddArgs{
-				Stream:     Stream,
-				NoMkStream: false,
-				MaxLen:     MaxLen,
-				Approx:     true,
-				ID:         "*",
-				Values:     values,
-			}).Err(); err != nil {
-				status = output.FLB_ERROR
-			}
-		} else {
-			status = output.FLB_ERROR
-		}
-	}
-	if _, err := pipeline.Exec(context); err != nil {
-		status = output.FLB_ERROR
-	}
-	return status
-}
-
-//export FLBPluginExit
-func FLBPluginExit() int {
-	ClusterClient.Close()
-	return output.FLB_OK
-}
-
-func toMap(values map[interface{}]interface{}) map[string]interface{} {
-	m := make(map[string]interface{})
-	for k, v := range values {
-		switch t := v.(type) {
-		case []byte:
-			// prevent encoding to base64
-			m[k.(string)] = string(t)
-		case map[interface{}]interface{}:
-			m[k.(string)] = toMap(t)
-		default:
-			m[k.(string)] = v
-		}
-	}
-	return m
-}
-
-func toValues(values map[interface{}]interface{}) (map[string]interface{}, error) {
-	data, err := json.Marshal(toMap(values))
-	if err != nil {
-		return nil, err
-	}
-	return map[string]interface{}{"data": data, "timestamp": time.Now().Unix()}, err
-}
-
-func toTimestamp(ts interface{}) string {
-	var timestamp time.Time
-	switch t := ts.(type) {
-	case output.FLBTime:
-		timestamp = ts.(output.FLBTime).Time
-	case uint64:
-		timestamp = time.Unix(int64(t), 0)
-	default:
-		timestamp = time.Now()
-	}
-	return timestamp.Format(time.RFC3339Nano)
-}
-
-func checkRecord(record map[interface{}]interface{}) bool {
-	if kubernetes, ok := record["kubernetes"].(map[interface{}]interface{}); ok {
-		if labels, ok := kubernetes["labels"].(map[interface{}]interface{}); ok {
-			// application logs deployed by drycc
-			heritage := fmt.Sprintf("%s", labels["heritage"])
-			namespace := fmt.Sprintf("%s", kubernetes["namespace_name"])
-			if !slices.Contains(ExcludeNamespaces, namespace) && heritage == "drycc" && labels["app"] != nil {
-				return true
-			}
-			// drycc controller
-			container := fmt.Sprintf("%s", kubernetes["container_name"])
-			if ok && strings.HasPrefix(container, ControllerName) {
-				log := fmt.Sprintf("%s", record["log"])
-				if ok && len(ControllerRegex.FindStringSubmatch(log)) > 0 {
-					return true
-				}
-			}
-		}
-	}
-	return false
-}
-
-func main() {}
diff --git a/plugin/out_quickwit.go b/plugin/out_quickwit.go
new file mode 100644
index 0000000..c4c6c79
--- /dev/null
+++ b/plugin/out_quickwit.go
@@ -0,0 +1,192 @@
+// drycc quickwit plugin
+package main
+
+import (
+	"C"
+)
+
+import (
+	"bytes"
+	"crypto/tls"
+	"encoding/json"
+	"fmt"
+	"io"
+	"net/http"
+	"strconv"
+	"strings"
+	"sync"
+	"text/template"
+	"time"
+	"unsafe"
+
+	"github.com/Masterminds/sprig/v3"
+	"github.com/fluent/fluent-bit-go/output"
+)
+
+var (
+	MaxLen    int64
+	Revision  string
+	BuildDate string
+
+	// plugin config
+	BaseURL        string
+	IndexName      string
+	Compress       bool
+	BufferSize     int
+	JSONDateKey    string
+	JSONDateFormat string
+	// internal variables
+	BufferPool        sync.Pool
+	IndexNameTemplate *template.Template
+)
+
+//export FLBPluginRegister
+func FLBPluginRegister(ctx unsafe.Pointer) int {
+	fmt.Printf("Quickwit output version %s %s", Revision, BuildDate)
+	return output.FLBPluginRegister(ctx, "quickwit", "Ship fluent-bit logs to quickwit")
+}
+
+// (fluentbit will call this)
+// ctx (context) pointer to fluentbit context (state/ c code)
+//
+//export FLBPluginInit
+func FLBPluginInit(ctx unsafe.Pointer) int {
+	BaseURL = output.FLBPluginConfigKey(ctx, "Base_URL")
+	IndexName = output.FLBPluginConfigKey(ctx, "Index_Name")
+	Compress, _ = strconv.ParseBool(output.FLBPluginConfigKey(ctx, "Compress"))
+
+	var err error
+	BufferSize, err = strconv.Atoi(output.FLBPluginConfigKey(ctx, "Buffer_Size"))
+	if err != nil {
+		panic(err)
+	}
+	BufferPool = sync.Pool{
+		New: func() any {
+			buffer := &bytes.Buffer{}
+			buffer.Grow(BufferSize)
+			return buffer
+		},
+	}
+	IndexNameTemplate, err = template.New("index").Funcs(sprig.FuncMap()).Parse(IndexName)
+	if err != nil {
+		panic(err)
+	}
+	JSONDateKey = output.FLBPluginConfigKey(ctx, "Json_Date_Key")
+	JSONDateFormat = output.FLBPluginConfigKey(ctx, "Json_Date_Format")
+	return output.FLB_OK
+}
+
+//export FLBPluginFlushCtx
+//revive:disable:unused-parameter
+func FLBPluginFlushCtx(ctx, data unsafe.Pointer, length C.int, _ *C.char) int {
+	decoder := output.NewDecoder(data, int(length))
+	results := make(map[string]*bytes.Buffer)
+	for {
+		ret, ts, rec := output.GetRecord(decoder)
+		if ret != 0 {
+			break
+		}
+		data := convertMap(rec)
+		data[JSONDateKey] = formatTime(ts, JSONDateFormat)
+		if jsonBytes, err := json.Marshal(data); err == nil {
+			var buffer bytes.Buffer
+			IndexNameTemplate.Execute(&buffer, data)
+			index := buffer.String()
+			if buffer, ok := results[index]; !ok {
+				buffer := BufferPool.Get().(*bytes.Buffer)
+				results[index] = buffer
+				buffer.Write(jsonBytes)
+				buffer.WriteByte('\n')
+			} else {
+				buffer.Write(jsonBytes)
+				buffer.WriteByte('\n')
+			}
+		}
+	}
+	if err := sendResults(results); err != nil {
+		return output.FLB_ERROR
+	}
+	return output.FLB_OK
+}
+
+//export FLBPluginExit
+func FLBPluginExit() int {
+	return output.FLB_OK
+}
+
+func formatTime(ts any, format string) string {
+	var timestamp time.Time
+	switch t := ts.(type) {
+	case output.FLBTime:
+		timestamp = ts.(output.FLBTime).Time
+	case uint64:
+		timestamp = time.Unix(int64(t), 0)
+	default:
+		timestamp = time.Now()
+	}
+	switch format {
+	case "rfc3399":
+		return timestamp.Format(time.RFC3339)
+	case "unix_timestamp":
+		return fmt.Sprint(timestamp.Unix())
+	default:
+		return timestamp.Format(strings.NewReplacer(
+			"%Y", "2006",
+			"%y", "06",
+			"%m", "01",
+			"%d", "02",
+			"%H", "15",
+			"%I", "03",
+			"%M", "04",
+			"%S", "05",
+			"%p", "PM",
+			"%L", "000",
+			"%f", "000000",
+			"%z", "-0700",
+			"%Z", "MST",
+		).Replace(format))
+	}
+}
+
+func convertMap(values map[any]any) map[string]any {
+	m := make(map[string]any)
+	for k, v := range values {
+		key := fmt.Sprintf("%v", k)
+		switch t := v.(type) {
+		case []byte:
+			m[key] = string(t)
+		case map[any]any:
+			m[key] = convertMap(t)
+		default:
+			m[key] = v
+		}
+	}
+	return m
+}
+
+func sendResults(results map[string]*bytes.Buffer) error {
+	client := &http.Client{
+		Transport: &http.Transport{
+			TLSClientConfig:    &tls.Config{InsecureSkipVerify: false},
+			ForceAttemptHTTP2:  true,
+			MaxIdleConns:       100,
+			IdleConnTimeout:    90 * time.Second,
+			DisableCompression: !Compress,
+		},
+		Timeout: 30 * time.Second,
+	}
+	defer client.CloseIdleConnections()
+	for index, body := range results {
+		url := fmt.Sprintf("%s/api/v1/%s/ingest", BaseURL, index)
+		if req, err := http.NewRequest("POST", url, body); err == nil {
+			if resp, err := client.Do(req); err == nil {
+				io.Copy(io.Discard, resp.Body)
+				resp.Body.Close()
+				body.Reset()
+			}
+		}
+	}
+	return nil
+}
+
+func main() {}
diff --git a/rootfs/opt/drycc/fluent-bit/templates/fluent-bit.conf b/rootfs/opt/drycc/fluent-bit/templates/fluent-bit.conf
deleted file mode 100644
index 7605f0d..0000000
--- a/rootfs/opt/drycc/fluent-bit/templates/fluent-bit.conf
+++ /dev/null
@@ -1,36 +0,0 @@
-[SERVICE]
-    Flush               1
-    Daemon              Off
-    Log_Level           info
-    Plugins_File        /opt/drycc/fluent-bit/etc/fluent-bit/plugins.conf
-    Parsers_File        /opt/drycc/fluent-bit/etc/fluent-bit/parsers.conf
-
-[INPUT]
-    Name                tail
-    Path                /var/log/containers/*.log
-    DB                  /var/log/containers.pos.db
-    DB.locking          true
-    Offset_Key          offset
-    Tag                 kubernetes.*
-    Read_from_Head      false
-    multiline.parser    docker,cri
-
-[FILTER]
-    Name                kubernetes
-    Match               kubernetes.*
-    Kube_URL            https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}
-    Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
-    Kube_Tag_Prefix     kubernetes.var.log.containers.
-    tls.verify          false
-
-[OUTPUT]
-    Name                drycc
-    Match               kubernetes.*
-    Addrs               ${DRYCC_REDIS_ADDRS}
-    Stream              logs
-    Max_Len             3000
-    Password            ${DRYCC_REDIS_PASSWORD}
-    Controller_Name     drycc-controller
-    Controller_Regex    ^(INFO|WARN|DEBUG|ERROR)\s+(\[(\S+)\])+:(.*)
-    Exclude_Namespaces  drycc,drycc-manager,drycc-helmbroker,kube-system,metallb
\ No newline at end of file
diff --git a/rootfs/opt/drycc/fluent-bit/templates/parsers.conf b/rootfs/opt/drycc/fluent-bit/templates/parsers.conf
deleted file mode 100644
index ec918ee..0000000
--- a/rootfs/opt/drycc/fluent-bit/templates/parsers.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-[PARSER]
-    Name                docker
-    Format              json
-    Time_Key            time
-    Time_Format         %Y-%m-%dT%H:%M:%S.%L
-    Time_Keep           On
-
-[PARSER]
-    # http://rubular.com/r/tjUt3Awgg4
-    Name                cri
-    Format              regex
-    Regex               ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
-    Time_Key            time
-    Time_Format         %Y-%m-%dT%H:%M:%S.%L%z
-    Time_Keep           On
\ No newline at end of file
diff --git a/rootfs/opt/drycc/fluent-bit/templates/plugins.conf b/rootfs/opt/drycc/fluent-bit/templates/plugins.conf
deleted file mode 100644
index 0f56db0..0000000
--- a/rootfs/opt/drycc/fluent-bit/templates/plugins.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[PLUGINS]
-    Path                ${FLUENT_BIT_PLUGINS_PATH}/out_drycc.so
\ No newline at end of file
diff --git a/rootfs/usr/local/bin/boot b/rootfs/usr/local/bin/boot
deleted file mode 100755
index 39d4c4b..0000000
--- a/rootfs/usr/local/bin/boot
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -eo pipefail
-shopt -s expand_aliases
-
-eval "cat <<EOF
-$(</opt/drycc/fluent-bit/templates/plugins.conf)
-EOF
-" 2> /dev/null > /opt/drycc/fluent-bit/etc/fluent-bit/plugins.conf
-
-eval "cat <<EOF
-$(</opt/drycc/fluent-bit/templates/parsers.conf)
-EOF
-" 2> /dev/null > /opt/drycc/fluent-bit/etc/fluent-bit/parsers.conf
-
-eval "cat <<EOF
-$(</opt/drycc/fluent-bit/templates/fluent-bit.conf)
-EOF
-" 2> /dev/null > /opt/drycc/fluent-bit/etc/fluent-bit/fluent-bit.conf
-
-fluent-bit -c /opt/drycc/fluent-bit/etc/fluent-bit/fluent-bit.conf
