Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(opentelemetry): support variable resource attributes #13839

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

SuzyWangIBMer
Copy link

@SuzyWangIBMer SuzyWangIBMer commented Nov 6, 2024

Summary

This change allows render resource attributes as lua code.
For example,

  config:
    traces_endpoint: "https://otlp-red-saas.instana.io:4318/v1/traces"
    resource_attributes:
      host.id: "$(headers.host)"

host.id is 0.0.0.0:9000 or depends on headers.host value.

Checklist

  • The Pull Request has tests
  • A changelog file has been created under changelog/unreleased/kong or skip-changelog label added on PR if changelog is unnecessary. README.md
  • There is a user-facing docs PR against https://github.com/Kong/docs.konghq.com - PUT DOCS PR HERE

Issue reference

Fix #12538

@github-actions github-actions bot added plugins/opentelemetry schema-change-noteworthy cherry-pick kong-ee schedule this PR for cherry-picking to kong/kong-ee labels Nov 6, 2024
@team-eng-enablement team-eng-enablement added the author/community PRs from the open-source community (not Kong Inc) label Nov 6, 2024
@samugi samugi self-assigned this Nov 15, 2024
@samugi
Copy link
Member

samugi commented Nov 15, 2024

failing test is expected, let's rebase after #13877 is merged

@samugi samugi force-pushed the feat/otel_variable_resource_attributes branch from 6dc12b9 to eaf8f25 Compare November 15, 2024 13:31
@samugi samugi self-requested a review November 15, 2024 17:07
Copy link
Member

@samugi samugi left a comment

Choose a reason for hiding this comment

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

Thank you so much for your contribution, this is great! I left a few comments for things that I feel could be improved a bit. There's some code duplication with request-transformer that we may want to take care of, but that refactor can be done later.

@@ -13,6 +21,8 @@ local DEFAULT_HEADERS = {

local _log_prefix = "[otel] "

local compiled_resource_attributes = {}
Copy link
Member

Choose a reason for hiding this comment

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

keeping this variable at the module level's scope can be problematic because it will persist across different requests, which may introduce cross-request pollution. I'd recommend we just return the compiled resource attributes from the function that computes them.

Copy link
Author

Choose a reason for hiding this comment

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

@samugi Thanks for quick response. I have updated the pr as suggested.

kong/plugins/opentelemetry/utils.lua Outdated Show resolved Hide resolved
kong/plugins/opentelemetry/traces.lua Outdated Show resolved Hide resolved
kong/plugins/opentelemetry/logs.lua Outdated Show resolved Hide resolved
kong/plugins/opentelemetry/handler.lua Outdated Show resolved Hide resolved
kong/plugins/opentelemetry/utils.lua Outdated Show resolved Hide resolved
kong/plugins/opentelemetry/utils.lua Outdated Show resolved Hide resolved
@SuzyWangIBMer SuzyWangIBMer force-pushed the feat/otel_variable_resource_attributes branch from eaf8f25 to 8a185af Compare November 18, 2024 22:21
kong/plugins/opentelemetry/handler.lua Outdated Show resolved Hide resolved
kong/plugins/opentelemetry/utils.lua Outdated Show resolved Hide resolved
@SuzyWangIBMer SuzyWangIBMer force-pushed the feat/otel_variable_resource_attributes branch 2 times, most recently from 0581567 to 4cfc804 Compare November 21, 2024 19:49
Copy link
Member

@samugi samugi left a comment

Choose a reason for hiding this comment

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

thanks for the quick action! I left a couple more suggestions, then I think it's good to go.

Comment on lines 49 to 51
options = {
compiled_resource_attributes = otel_utils.read_resource_attributes(conf.resource_attributes)
}
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
options = {
compiled_resource_attributes = otel_utils.read_resource_attributes(conf.resource_attributes)
}
local compiled, err = otel_utils.read_resource_attributes(conf.resource_attributes)
if not compiled then
ngx_log(ngx_WARN, _log_prefix, "resource attributes template failed to compile: ", err)
end
options.compiled_resource_attributes = compiled

local function http_export_logs(conf, logs_batch)
local function http_export_logs(params, logs_batch)
local conf = params.conf
local resource_attributes = params.options.compiled_resource_attributes
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
local resource_attributes = params.options.compiled_resource_attributes
local resource_attributes = params.options.compiled_resource_attributes
or conf.resource_attributes

local function http_export_traces(conf, spans)
local function http_export_traces(params, spans)
local conf = params.conf
local resource_attributes = params.options.compiled_resource_attributes
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
local resource_attributes = params.options.compiled_resource_attributes
local resource_attributes = params.options.compiled_resource_attributes
or conf.resource_attributes

Comment on lines 158 to 164
if err then
return nil, err
end

if res then
compiled_resource_attributes[current_name] = res
end
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
if err then
return nil, err
end
if res then
compiled_resource_attributes[current_name] = res
end
if not res then
return nil, err
end
compiled_resource_attributes[current_name] = res

Comment on lines +4 to 7
local otel_utils = require "kong.plugins.opentelemetry.utils"
local dynamic_hook = require "kong.dynamic_hook"
local o11y_logs = require "kong.observability.logs"
local kong_meta = require "kong.meta"
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
local otel_utils = require "kong.plugins.opentelemetry.utils"
local dynamic_hook = require "kong.dynamic_hook"
local o11y_logs = require "kong.observability.logs"
local kong_meta = require "kong.meta"
local otel_utils = require "kong.plugins.opentelemetry.utils"
local dynamic_hook = require "kong.dynamic_hook"
local o11y_logs = require "kong.observability.logs"
local kong_meta = require "kong.meta"
local _log_prefix = otel_utils._log_prefix
local ngx_log = ngx.log
local ngx_WARN = ngx.WARN

@SuzyWangIBMer SuzyWangIBMer force-pushed the feat/otel_variable_resource_attributes branch from 4cfc804 to aba7105 Compare November 22, 2024 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author/community PRs from the open-source community (not Kong Inc) cherry-pick kong-ee schedule this PR for cherry-picking to kong/kong-ee plugins/opentelemetry schema-change-noteworthy size/L
Projects
None yet
Development

Successfully merging this pull request may close these issues.

OTEL plugin: No way to set variable values to resource attributes
3 participants