{{- if .Values.vector.enabled }} apiVersion: v1 kind: ConfigMap metadata: name: {{ include "supabase.vector.fullname" . }}-config labels: {{- include "supabase.labels" . | nindent 4 }} data: secret.sh: | #!/bin/sh cat << EOF { "logflare_api_key": { "value": "$LOGFLARE_API_KEY", "error": null } } EOF vector.yml: | secret: credentials: type: exec command: - /etc/vector/secret.sh api: enabled: true address: 0.0.0.0:{{ .Values.vector.service.port }} sources: kubernetes_host: type: kubernetes_logs extra_label_selector: app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/name!={{ include "supabase.vector.name" . }} transforms: project_logs: type: remap inputs: - kubernetes_host source: |- .project = "default" .event_message = del(.message) .appname = del(.kubernetes.container_name) del(.file) del(.kubernetes) del(.source_type) del(.stream) router: type: route inputs: - project_logs route: kong: '.appname == {{ include "supabase.kong.name" . | quote }}' auth: '.appname == {{ include "supabase.auth.name" . | quote }}' rest: '.appname == {{ include "supabase.rest.name" . | quote }}' realtime: '.appname == {{ include "supabase.realtime.name" . | quote }}' storage: '.appname == {{ include "supabase.storage.name" . | quote }}' functions: '.appname == {{ include "supabase.functions.name" . | quote }}' db: '.appname == {{ include "supabase.db.name" . | quote }}' # Ignores non nginx errors since they are related with kong booting up kong_logs: type: remap inputs: - router.kong source: |- req, err = parse_nginx_log(.event_message, "combined") if err == null { .timestamp = req.timestamp .metadata.request.headers.referer = req.referer .metadata.request.headers.user_agent = req.agent .metadata.request.headers.cf_connecting_ip = req.client .metadata.request.method = req.method .metadata.request.path = req.path .metadata.request.protocol = req.protocol .metadata.response.status_code = req.status } if err != null { abort } # Ignores non nginx errors since they are related with kong booting up kong_err: type: remap inputs: - router.kong source: |- .metadata.request.method = "GET" .metadata.response.status_code = 200 parsed, err = parse_nginx_log(.event_message, "error") if err == null { .timestamp = parsed.timestamp .severity = parsed.severity .metadata.request.host = parsed.host .metadata.request.headers.cf_connecting_ip = parsed.client url, err = split(parsed.request, " ") if err == null { .metadata.request.method = url[0] .metadata.request.path = url[1] .metadata.request.protocol = url[2] } } if err != null { abort } # Gotrue logs are structured json strings which frontend parses directly. But we keep metadata for consistency. auth_logs: type: remap inputs: - router.auth source: |- parsed, err = parse_json(.event_message) if err == null { .metadata.timestamp = parsed.time .metadata = merge!(.metadata, parsed) } # PostgREST logs are structured so we separate timestamp from message using regex rest_logs: type: remap inputs: - router.rest source: |- parsed, err = parse_regex(.event_message, r'^(?P