Skip to content

Node logs#124

Open
brucetony wants to merge 8 commits intomasterfrom
node-logs
Open

Node logs#124
brucetony wants to merge 8 commits intomasterfrom
node-logs

Conversation

@brucetony
Copy link
Copy Markdown
Contributor

@brucetony brucetony commented Apr 14, 2026

Add victorialogs as a dependency for the flame-node chart and incorporate customer parsing and routing

Summary by CodeRabbit

  • New Features

    • Integrated centralized logging with configurable level filtering, parsing pipeline, sinks, and optional ingress for log access.
  • Chores

    • Updated ignore patterns.
    • Added Helm dependency for the logging component.
    • Bumped message broker image tag.
    • Renamed the main deployment container.
    • Added conditional startupProbe support and adjusted health probe timings for UI and adapter.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 14, 2026

📝 Walkthrough

Walkthrough

Adds Victoria Logs as a Helm dependency and Vector-based logging config to the Flame Node chart, renames the hub-adapter container in its Deployment, adds conditional startupProbes for UI and hub-adapter, and updates .gitignore to ignore docs/.

Changes

Cohort / File(s) Summary
Repository config
\.gitignore
Added docs/ to ignored paths.
Helm chart metadata
charts/flame-node/Chart.yaml
Added Helm dependency victoria-logs-single v0.11.30 (alias victoria-logs) from https://victoriametrics.github.io/helm-charts, gated by eventLogging.enabled.
Helm values (logging & probes)
charts/flame-node/values.yaml
Added extensive victoria-logs/Vector logging subtree (retention, PV, ingress, Kubernetes source, remap parsing/level normalization, filters, Prometheus & Elasticsearch sinks). Added startupProbe blocks for hubAdapter and ui; adjusted livenessProbe/readinessProbe timing. Bumped messageBroker.image.tag to 0.6.2.
Deployment templates
charts/flame-node/templates/hub-adapter/deployment.yaml, charts/flame-node/templates/ui/deployment.yaml
Renamed container from api-gatewayhub-adapter. Added conditional rendering of startupProbe for hub-adapter and ui containers when respective .Values.*.startupProbe is set.

Sequence Diagram

sequenceDiagram
    participant K8s as Kubernetes Pods
    participant Vector as Vector Agent
    participant Parse as Remap / Parse Transform
    participant Filter as Level Filter
    participant Prom as Prometheus Exporter
    participant ES as Elasticsearch Sink

    K8s->>Vector: Stream container logs (namespace-scoped)
    Vector->>Parse: Parse `.message` JSON & normalize `.level`
    Parse->>Filter: Emit structured logs
    Filter->>Prom: Export metrics (Prometheus)
    Filter->>ES: Send bulk documents (Elasticsearch v8, gzip)
    Prom-->>Vector: Metrics recorded
    ES-->>Vector: Bulk ingest ack
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Node updated for Hub v0.8.31+ #117 — Modifies the same charts/flame-node/templates/hub-adapter/deployment.yaml (env/secret changes); likely to conflict with the container rename and probe additions.

Poem

🐰 I hopped through charts and values bright,
Wired logs to Vector through the night,
Prom and ES dance in a stream,
Probes wake pods from sleepy dream,
The hub-adapter hums with delight!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Node logs' is partially related to the changeset. While log-related infrastructure (VictoriaLogs) is added, the PR also includes significant changes to probes and helm dependencies that are not captured by the title.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch node-logs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@charts/flame-node/Chart.yaml`:
- Around line 55-58: The Chart.yaml's chart "version" field still reflects
0.0.11 while you added/changed packaged contents (dependency alias victoria-logs
/ name victoria-logs-single); update the Chart.yaml version field to a new
semantic version (e.g., 0.0.12 or next appropriate patch/minor) in this same PR
so consumers can pick up the change, then commit the bump alongside the
dependency addition.
- Around line 55-58: The dependency entry for the VictoriaLogs chart (name:
victoria-logs-single, alias: victoria-logs) is unconditional and ignores the
chart value eventLogging.enabled; update the Chart.yaml dependency block for
victoria-logs-single to include a condition that binds installation to the
existing toggle (e.g. add condition: eventLogging.enabled or condition:
<appropriate values path>.eventLogging.enabled) so the dependency (and its PVCs)
are only installed when eventLogging.enabled is true.

In `@charts/flame-node/templates/hub-adapter/deployment.yaml`:
- Around line 155-161: The readinessProbe block currently hardcodes httpGet,
initialDelaySeconds, periodSeconds and failureThreshold and then appends the
full defaults via "{{- toYaml . | nindent 12 }}", causing duplicate keys where
the rendered defaults override the hardcoded values; fix this in the deployment
template by using the omit function to remove those specific keys from the
defaults object before rendering (e.g., call toYaml on (omit . "httpGet"
"initialDelaySeconds" "periodSeconds" "failureThreshold") and keep the existing
nindent 12) so the explicit readinessProbe fields in the template take
precedence.

In `@charts/flame-node/values.yaml`:
- Around line 1147-1166: The VRL uses the non-existent string() function in the
parser and level_filter condition; replace those calls with to_string() where
they coerce values to strings (specifically in the parse_json block where .level
is set using upcase(string(parsed."log.level") ?? string(parsed.level) ??
"UNKNOWN") and inside the level_filter condition where event_level =
upcase(string(.level) ?? "UNKNOWN"); and min_level = upcase("{{
.Values.logLevelFilter | default "" }}"); update those string(...) occurrences
to to_string(...) so Vector config validation succeeds and the
parser/level_filter logic continues to work as intended.
- Around line 1113-1115: The ingress enabled flag is being templated as a quoted
string which makes it true even when false; update the values entry so
server.ingress.enabled is rendered as a boolean by removing the surrounding
quotes on the template expression (change the line that sets enabled: '{{
.Values.global.node.ingress.enabled | default false }}' to use enabled: {{
.Values.global.node.ingress.enabled | default false }}), targeting the
server.ingress.enabled key and the .Values.global.node.ingress.enabled template.
- Around line 1113-1120: The current ingress host path uses a regex
(/events(/|$)(.*)) but the chart/subchart defaults server.ingress.pathType to
Prefix, which breaks regex matching; update the ingress resource to set pathType
to ImplementationSpecific for the ingress entry that contains hosts[].path (or
adjust server.ingress.pathType in the victoria-logs-single subchart values) so
NGINX will treat the path as a regex; locate the ingress block (ingress -> hosts
-> path) and ensure pathType is explicitly set to ImplementationSpecific
alongside the regex path.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 254a2877-f1a6-41c3-9368-4d5e983660b2

📥 Commits

Reviewing files that changed from the base of the PR and between 68309a5 and 1473dd7.

📒 Files selected for processing (6)
  • .gitignore
  • charts/flame-node/Chart.yaml
  • charts/flame-node/templates/hub-adapter/deployment.yaml
  • charts/flame-node/templates/keycloak/flame-keycloak-realm-configmap.yaml
  • charts/flame-node/templates/keycloak/keycloak-secret-sync-job.yaml
  • charts/flame-node/values.yaml

Comment thread charts/flame-node/Chart.yaml Outdated
Comment thread charts/flame-node/templates/hub-adapter/deployment.yaml Outdated
Comment thread charts/flame-node/values.yaml
Comment thread charts/flame-node/values.yaml
Comment thread charts/flame-node/values.yaml
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (3)
charts/flame-node/values.yaml (2)

1113-1115: ⚠️ Potential issue | 🟠 Major

Render ingress.enabled as a boolean, not a quoted string.

Line [1114] is quoted, so this value is a string. Please render it unquoted to preserve boolean behavior in Helm conditionals.

Suggested patch
-      enabled: '{{ .Values.global.node.ingress.enabled | default false }}'
+      enabled: {{ .Values.global.node.ingress.enabled | default false }}
#!/bin/bash
# Verify the ingress.enabled line is not quoted (boolean template output).
sed -n '1112,1116p' charts/flame-node/values.yaml
# Expected after fix:
# enabled: {{ .Values.global.node.ingress.enabled | default false }}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/values.yaml` around lines 1113 - 1115, The ingress.enabled
value is being rendered as a quoted string; remove the surrounding single quotes
so the template emits a boolean literal. Edit the ingress block containing
"enabled: '{{ .Values.global.node.ingress.enabled | default false }}'" and
change it to enabled: {{ .Values.global.node.ingress.enabled | default false }}
so Helm conditionals treat it as a boolean (verify the line with the
ingress.enabled key).

1152-1169: ⚠️ Potential issue | 🔴 Critical

Replace unsupported VRL string() calls with to_string().

Lines [1155] and [1167] use string(...); Vector VRL expects to_string(...) for coercion here.

Suggested patch
-              .level = upcase(string(parsed."log.level") ?? string(parsed.level) ?? "UNKNOWN")
+              .level = upcase(to_string(parsed."log.level") ?? to_string(parsed.level) ?? "UNKNOWN")
...
-            event_level = upcase(string(.level) ?? "UNKNOWN");
+            event_level = upcase(to_string(.level) ?? "UNKNOWN");
#!/bin/bash
# Verify remaining invalid VRL coercion calls in this chart values file.
rg -n 'string\(' charts/flame-node/values.yaml -C2
# Expected after fix: no matches in the victoria-logs vector transform/condition block.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/values.yaml` around lines 1152 - 1169, Replace the
unsupported VRL coercion calls `string(...)` with `to_string(...)` inside the
Vector transform parser/level_filter condition: update the parser block where
`.level = upcase(string(parsed."log.level") ?? string(parsed.level) ??
"UNKNOWN")` to use `to_string(...)`, and likewise change the condition's
`upcase(string(.level) ?? "UNKNOWN")` and `upcase("{{ .Values.logLevelFilter |
default "" }}")` usages to `to_string(...)` so the `parser` assignment and
`level_filter` `condition` use `to_string()` for all type coercions.
charts/flame-node/Chart.yaml (1)

55-59: ⚠️ Potential issue | 🟠 Major

Bump chart version in the same PR.

This PR changes packaged chart contents, but Line [18] is still 0.0.11. Please increment chart version so consumers can pull this dependency update.

Suggested patch
-version: 0.0.11
+version: 0.0.12
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/Chart.yaml` around lines 55 - 59, The Chart.yaml's chart
version was not incremented after updating packaged chart contents; open
Chart.yaml and update the top-level version field (the "version" value for this
chart, currently "0.0.11") to a new semantically-bumped value (e.g., patch/minor
as appropriate) so the modified dependency (victoria-logs-single / alias
victoria-logs) can be published and consumed; ensure the Chart.yaml "version"
field and any dependent index/packaging metadata are updated consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@charts/flame-node/Chart.yaml`:
- Around line 55-59: The Chart.yaml's chart version was not incremented after
updating packaged chart contents; open Chart.yaml and update the top-level
version field (the "version" value for this chart, currently "0.0.11") to a new
semantically-bumped value (e.g., patch/minor as appropriate) so the modified
dependency (victoria-logs-single / alias victoria-logs) can be published and
consumed; ensure the Chart.yaml "version" field and any dependent
index/packaging metadata are updated consistently.

In `@charts/flame-node/values.yaml`:
- Around line 1113-1115: The ingress.enabled value is being rendered as a quoted
string; remove the surrounding single quotes so the template emits a boolean
literal. Edit the ingress block containing "enabled: '{{
.Values.global.node.ingress.enabled | default false }}'" and change it to
enabled: {{ .Values.global.node.ingress.enabled | default false }} so Helm
conditionals treat it as a boolean (verify the line with the ingress.enabled
key).
- Around line 1152-1169: Replace the unsupported VRL coercion calls
`string(...)` with `to_string(...)` inside the Vector transform
parser/level_filter condition: update the parser block where `.level =
upcase(string(parsed."log.level") ?? string(parsed.level) ?? "UNKNOWN")` to use
`to_string(...)`, and likewise change the condition's `upcase(string(.level) ??
"UNKNOWN")` and `upcase("{{ .Values.logLevelFilter | default "" }}")` usages to
`to_string(...)` so the `parser` assignment and `level_filter` `condition` use
`to_string()` for all type coercions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: eb3ccb35-e911-403b-8de0-fdf2b63dc688

📥 Commits

Reviewing files that changed from the base of the PR and between 1473dd7 and 2916202.

📒 Files selected for processing (3)
  • charts/flame-node/Chart.yaml
  • charts/flame-node/templates/hub-adapter/deployment.yaml
  • charts/flame-node/values.yaml
✅ Files skipped from review due to trivial changes (1)
  • charts/flame-node/templates/hub-adapter/deployment.yaml

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (2)
charts/flame-node/values.yaml (2)

1177-1197: ⚠️ Potential issue | 🔴 Critical

Invalid VRL function string() will prevent Vector from starting.

VRL does not provide a string() function. The correct function for string coercion is to_string(). Lines 1181 and 1193 use the non-existent string() function, which will fail Vector config validation.

Suggested fix
           parsed, err = parse_json(.message)
           if err == null {
             .log = parsed
-            .level = upcase(string(parsed."log.level") ?? string(parsed.level) ?? "UNKNOWN")
+            .level = upcase(to_string(parsed."log.level") ?? to_string(parsed.level) ?? "UNKNOWN")
           } else {
             .log = .message
             .level = "UNKNOWN"
         condition: '
-          event_level = upcase(string(.level) ?? "UNKNOWN");
+          event_level = upcase(to_string(.level) ?? "UNKNOWN");
           min_level = upcase("{{ .Values.logLevelFilter | default "" }}");
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/values.yaml` around lines 1177 - 1197, The VRL uses a
non-existent string() function which will break Vector; replace all uses of
string() with the proper VRL to_string() function—specifically update the parser
block where .level is set (the expression upcase(string(parsed."log.level") ??
string(parsed.level) ?? "UNKNOWN")) and the condition in the level_filter that
coerces .level and the Helm value (upcase(string(.level) ?? "UNKNOWN");
min_level = upcase("{{ .Values.logLevelFilter | default "" }}");) so both
coercions use to_string() instead of string(), preserving the existing
null-coalescing and upcase logic.

1139-1142: ⚠️ Potential issue | 🟠 Major

Quoted template string causes ingress to always be enabled.

The enabled value is a quoted string containing template syntax. Since values.yaml doesn't process Go templates, this literal string '{{ .Values.global.node.ingress.enabled | default false }}' is passed to the subchart. In the subchart's ingress template conditional, any non-empty string is truthy, so the ingress will always be created regardless of global.node.ingress.enabled.

Remove the quotes and template syntax. Use a concrete boolean or leverage Helm's global values mechanism:

Suggested fix
     ingress:
-      enabled: '{{ .Values.global.node.ingress.enabled | default false }}'
+      enabled: false
       pathType: ImplementationSpecific

Then enable it via --set victoria-logs.server.ingress.enabled=true at install time, or use a wrapper template in the parent chart to conditionally configure this.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/values.yaml` around lines 1139 - 1142, The ingress.enabled
entry uses a quoted template string ('{{ .Values.global.node.ingress.enabled |
default false }}') which is treated as a non-empty string and always truthy;
edit the ingress.enabled key in values.yaml (ingress.enabled) to remove the
quoted template and set a concrete boolean or reference the global value
correctly (e.g., use a boolean false or ensure the parent chart injects
.Values.global.node.ingress.enabled into the subchart via Helm globals), and
then toggle it at install time with --set global.node.ingress.enabled=true (or
set victoria-logs.server.ingress.enabled=true when appropriate).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@charts/flame-node/values.yaml`:
- Line 625: The image tag specified under the chart values (tag: 0.6.2) for
ghcr.io/privateaim/node-message-broker may not be published; verify whether
ghcr.io/privateaim/node-message-broker:0.6.2 exists in the registry or is
internal, and if not update the values.yaml tag to a known published version
(e.g., 0.5.1 or another validated release) or change the image reference to the
correct registry/credentials, and if this is intentional add a comment or README
note indicating it requires an internal/private registry so reviewers know it’s
not public.
- Around line 1204-1217: The elasticsearch sink under the vlogs block is missing
the required endpoints configuration so Vector has no destination; add an
endpoints field (pointing to the VictoriaLogs Elasticsearch-compatible bulk API
service name and port used by the subchart) under vlogs (type: elasticsearch) so
the sink can reach VictoriaLogs, e.g. set endpoints to the subchart's service
DNS (matching the deployed VictoriaLogs service) and ensure the port/path
matches the bulk API; update any templating or values references so the service
name matches the actual VictoriaLogs service created by the subchart.

---

Duplicate comments:
In `@charts/flame-node/values.yaml`:
- Around line 1177-1197: The VRL uses a non-existent string() function which
will break Vector; replace all uses of string() with the proper VRL to_string()
function—specifically update the parser block where .level is set (the
expression upcase(string(parsed."log.level") ?? string(parsed.level) ??
"UNKNOWN")) and the condition in the level_filter that coerces .level and the
Helm value (upcase(string(.level) ?? "UNKNOWN"); min_level = upcase("{{
.Values.logLevelFilter | default "" }}");) so both coercions use to_string()
instead of string(), preserving the existing null-coalescing and upcase logic.
- Around line 1139-1142: The ingress.enabled entry uses a quoted template string
('{{ .Values.global.node.ingress.enabled | default false }}') which is treated
as a non-empty string and always truthy; edit the ingress.enabled key in
values.yaml (ingress.enabled) to remove the quoted template and set a concrete
boolean or reference the global value correctly (e.g., use a boolean false or
ensure the parent chart injects .Values.global.node.ingress.enabled into the
subchart via Helm globals), and then toggle it at install time with --set
global.node.ingress.enabled=true (or set
victoria-logs.server.ingress.enabled=true when appropriate).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f7ab5a11-ed03-4065-b0fb-4deee336c2cd

📥 Commits

Reviewing files that changed from the base of the PR and between 2916202 and c8ef560.

📒 Files selected for processing (3)
  • charts/flame-node/templates/hub-adapter/deployment.yaml
  • charts/flame-node/templates/ui/deployment.yaml
  • charts/flame-node/values.yaml

repository: ghcr.io/privateaim/node-message-broker
# Overrides the image tag whose default is the chart appVersion.
tag: 0.6.1
tag: 0.6.2
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if the image tag exists in the GitHub Container Registry
curl -s "https://ghcr.io/v2/privateaim/node-message-broker/tags/list" | jq '.tags | map(select(. == "0.6.2"))'

Repository: PrivateAIM/helm

Length of output: 116


🏁 Script executed:

#!/bin/bash
# Try alternative registry API endpoint with proper authentication scope
# First, try without authentication to list tags
echo "=== Attempt 1: Direct API call with different format ==="
curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
  "https://ghcr.io/v2/privateaim/node-message-broker/tags/list" | head -20

echo ""
echo "=== Attempt 2: Check if we can get manifest directly ==="
curl -s -I "https://ghcr.io/v2/privateaim/node-message-broker/manifests/0.6.2" 2>&1 | head -10

Repository: PrivateAIM/helm

Length of output: 535


🌐 Web query:

privateaim node-message-broker 0.6.2 release

💡 Result:

No evidence found of a 0.6.2 release for PrivateAIM/node-message-broker. The GitHub repository https://github.com/PrivateAIM/node-message-broker exists and is described as a "Message broker for communicating with the central hub service and other node instances" as part of the PrivateAIM/FLAME project (privacy-preserving analytics in medicine, based in Germany). However, searches for releases, tags, changelog, or npm package for version 0.6.2 returned no matching results. Related PrivateAIM repos like node-hub-api-adapter have releases up to v0.5.1 (March 2026), and node-event-logging-database up to v0.2.0 (Feb 2026), but none match the query. Unrelated node message broker packages exist on npm but not under PrivateAIM or version 0.6.2. As of 2026-04-16, this specific release does not appear to be publicly documented or released.

Citations:


🌐 Web query:

privateaim node-message-broker changelog breaking changes

💡 Result:

No public changelog or release notes with breaking changes found for PrivateAIM/node-message-broker. The GitHub repository exists (https://github.com/PrivateAIM/node-message-broker) and describes it as a "Message broker for communicating with the central hub service and other node instances." It appears to be generated from a python-template (based on related repos like node-hub-api-adapter), but no CHANGELOG.md, releases page, or explicit breaking changes are published. Check the repository's commit history directly for changes, or contact the maintainers for internal documentation.

Citations:


Image tag 0.6.2 does not appear to be publicly released.

The web search found no evidence of ghcr.io/privateaim/node-message-broker:0.6.2 being published. The GitHub repository exists but has no public releases page for this version, and related PrivateAIM projects have lower version numbers (0.5.1, 0.2.0). Verify whether this version exists in an internal registry, ensure it will be available before merging, or confirm with the maintainers if this version is under development.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/values.yaml` at line 625, The image tag specified under the
chart values (tag: 0.6.2) for ghcr.io/privateaim/node-message-broker may not be
published; verify whether ghcr.io/privateaim/node-message-broker:0.6.2 exists in
the registry or is internal, and if not update the values.yaml tag to a known
published version (e.g., 0.5.1 or another validated release) or change the image
reference to the correct registry/credentials, and if this is intentional add a
comment or README note indicating it requires an internal/private registry so
reviewers know it’s not public.

Comment on lines +1204 to +1217
vlogs:
type: elasticsearch
inputs: [level_filter]
mode: bulk
api_version: v8
compression: gzip
healthcheck:
enabled: false
request:
headers:
VL-Time-Field: timestamp,@timestamp
VL-Stream-Fields: level,kubernetes.pod_name,kubernetes.pod_labels.component,kubernetes.container_name
VL-Msg-Field: message,msg,_msg,log.msg,log.message,log
AccountID: "0"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the victoria-logs-single chart for the service name pattern
rg -n "name:.*server" charts/flame-node/Chart.yaml
# Look for any existing endpoint configuration patterns in the repo
rg -n "endpoints:" charts/flame-node/

Repository: PrivateAIM/helm

Length of output: 104


🏁 Script executed:

#!/bin/bash
# View the context around line 94 to see what component has endpoints
sed -n '80,110p' charts/flame-node/values.yaml

# View the full elasticsearch sink configuration and its context
sed -n '1195,1220p' charts/flame-node/values.yaml

Repository: PrivateAIM/helm

Length of output: 3020


🏁 Script executed:

#!/bin/bash
# Search for Vector elasticsearch sink examples or documentation in the repo
rg -n "elasticsearch" charts/flame-node/values.yaml | head -20

Repository: PrivateAIM/helm

Length of output: 93


🌐 Web query:

Vector elasticsearch sink endpoints required configuration

💡 Result:

For the Vector Elasticsearch sink, the required configuration fields are: - type: "elasticsearch" - inputs: array of upstream source or transform IDs (e.g., ["my-source-or-transform-id"]) The endpoints field, which specifies the list of Elasticsearch endpoint URLs (e.g., ["http://localhost:9200"]), is shown in all example configurations but listed as optional in the official documentation schema. However, it is practically required to send data to Elasticsearch, as no endpoint means no delivery. Other fields like mode, bulk.index (for bulk mode), data_stream (for data_stream mode), auth (if authentication is needed), etc., depend on the deployment but are not universally required for a minimal working sink. Minimal example: sinks: my_sink_id: type: elasticsearch inputs: - my-source-or-transform-id endpoints: - http://10.24.32.122:9000 Note: In data streams mode (requires Elasticsearch 7.9+), additional data_stream configuration is needed instead of bulk.index.

Citations:


🏁 Script executed:

#!/bin/bash
# Search for any elasticsearch configuration context (before and after vlogs sink)
sed -n '1150,1230p' charts/flame-node/values.yaml

# Search for victoria-logs service configuration
rg -n "victoria-logs" charts/flame-node/values.yaml | head -20

Repository: PrivateAIM/helm

Length of output: 3086


🏁 Script executed:

#!/bin/bash
# Check if there's a default elasticsearch endpoint or global config
rg -n -B5 -A5 "type: elasticsearch" charts/flame-node/values.yaml

Repository: PrivateAIM/helm

Length of output: 412


Missing endpoints configuration for elasticsearch sink.

The Vector elasticsearch sink requires an endpoints field to specify where to send logs. Without it, the sink will fail to initialize or have no destination for the log data. The endpoint should point to VictoriaLogs' elasticsearch-compatible bulk API.

Suggested fix
        vlogs:
          type: elasticsearch
          inputs: [level_filter]
+         endpoints:
+           - http://{{ .Release.Name }}-victoria-logs-server:9428/insert/elasticsearch/
          mode: bulk
          api_version: v8
          compression: gzip

Adjust the service name to match the actual VictoriaLogs server service created by the subchart.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/flame-node/values.yaml` around lines 1204 - 1217, The elasticsearch
sink under the vlogs block is missing the required endpoints configuration so
Vector has no destination; add an endpoints field (pointing to the VictoriaLogs
Elasticsearch-compatible bulk API service name and port used by the subchart)
under vlogs (type: elasticsearch) so the sink can reach VictoriaLogs, e.g. set
endpoints to the subchart's service DNS (matching the deployed VictoriaLogs
service) and ensure the port/path matches the bulk API; update any templating or
values references so the service name matches the actual VictoriaLogs service
created by the subchart.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant