Subtenant OpenTelemetry log exporters

Exports messages from a set of Volga topics to an OpenTelemetry collector as OTLP logs. Each message becomes one OTLP log record. Records are collected into batches before being exported, see max-batch-records and max-batch-delay.

The topics to export from are selected with topics and topic-patterns. For example, use ^system:container-logs: to export the logs of every container the tenant runs on the site.

The translation from volga message into OTLP log record is mostly automatic with two important exceptions: the severityText and body fields. These are both customizable through the body and severity-text parameters which are configurable strings that can contain variables and regular expressions that extract values from volga messages.

Variables can contain values from within Volga messages or vault secrets. These are defined in the variables list. Aside from the variables list, the entire Volga message is always available as the variable MSG, the topic name as TOPIC, and the top-level fields of the message as MSG_HOST, MSG_MTIME, MSG_ORIGIN, MSG_PAYLOAD, MSG_PRODUCER_NAME, MSG_REMAIN, MSG_SEQNO, and MSG_TIME.

The following system-defined variables are also available:

  • SYS_DNS_ZONES Available if the tenant has configured DNS zones. This is an array of the DNS zones defined for the tenant. The domain of a specific named zone is accessed with the syntax ${SYS_DNS_ZONES[name]}. A zone named default is always available, and contains the default domain for this tenant. It is accessed using ${SYS_DNS_ZONES[default]}.
  • SYS_GLOBAL_DOMAIN Contains the name of the top level domain used by all sites in the environment.
  • SYS_SITE Contains the name of the site where the exporter is running.
  • SYS_SITE_LABELS This is an array of all labels defined on the site. The value of a specific label is accessed with the syntax ${SYS_SITE_LABELS[label]}. If the label has multiple values, it expands to a comma-separated string of these values. It is an error if no label is given, or if the label doesn't exist.
  • SYS_TENANT Contains the name of the tenant.

Create a new otel log exporter

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

query Parameters
validate
string <enumeration>

Validate the request but do not actually perform the requested operation

Value: "true"
Request Body schema:
name
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$
required
all-sites (object) or sites (object) or application-deployments (object) or match-site-labels (object)

Defines which sites the configuration should be applied to.

topics
Array of strings <topic-name>

A list of Volga topics to export from.

topic-patterns
Array of strings <regexp>

PCRE2 regular expression.

Regular expressions used to find topics to export from. Can be combined with topics. Only one consumer is created per topic, even if multiple patterns match the same topic name, or if a pattern matches a topic name already listed in topics.

resume
boolean
Default: true

Acknowledge exporter messages and resume from the last position when reconnecting to a topic. If there are no acknowledged messages, start-position will be used instead.

start-position
string <enumeration>
Default: "end"
  • beginning: Start at the beginning of the topic
  • end: Start at the end of the topic, exporting only new messages as they come in.
match-re
Array of strings <regexp>

PCRE2 regular expression.

Only include messages matching all the provided regular expressions

match-string
Array of strings

Only include messages matching all the provided strings

no-match-re
Array of strings <regexp>

PCRE2 regular expression.

Only include messages not matching any of the provided regular expressions

no-match-string
Array of strings

Only include messages not matching any of the provided strings

body
string <variable-expression>
Default: "${MSG_PAYLOAD}"

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

The log record body. Can contain variables, e.g. ${MSG_PAYLOAD}.

trim-payload-newline
boolean
Default: false

Trim a single line terminator (\n or \r\n) from the payload of each incoming message. Useful for topics like container logs which typically include line terminators that will not be useful for the receiver. This setting is ignored for json topics.

severity-text
string <variable-expression>

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

The severityText value of the log record. Can contain variables.

protocol
string <enumeration>
Default: "grpc"
  • http-json: OTLP/HTTP with a JSON-encoded body, posted to base-url with path appended.
  • http-protobuf: OTLP/HTTP with a Protobuf-encoded body, posted to base-url with path appended.
  • grpc: OTLP/gRPC with a Protobuf-encoded body sent over an HTTP/2 connection that is kept open between messages. With this protocol, path is not used and headers are sent as gRPC metadata.

OTLP protocol used by the exporter. Note that unless base-url includes a port, the destination port is determined by the protocol as 4317 for grpc and 4318 for http-json and http-protobuf.

base-url
required
string <variable-expression>

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

Base URL of the OpenTelemetry collector. Can contain variables (system variables and vault secrets only). For the http-json and http-protobuf protocols, path (/v1/logs by default) is appended automatically. Use an https URL to export over TLS. If no port is given here one is selected based on the chosen protocol.

path
string <uri-path-absolute>
Default: "/v1/logs"

Path appended to base-url when posting logs. Not used when protocol is grpc.

tls-verify
boolean
Default: true

This field can be used to disable server certificate validation when connecting to the remote endpoint. It should only be set to false in test setups and never in production.

ca-cert
string <ca-cert>

One or more root certificates in PEM format.

CA certificates, in PEM format, to use when validating the TLS connection to the remote endpoint. Multiple certificates may be added as one string.

use-root-ca-certs
boolean
Default: true

Use root CA certificate bundle when validating the certificate of the remote endpoint.

server-name-indication
string

If the URL is HTTPS, this field can be used to configure which name must be present in the certificate presented by the server. By default, the host name from the URL is used.

max-batch-records
integer <uint32>
Default: 500

Maximum number of log records to put in one export. A batch is also exported as soon as the exporter has caught up with the topics it reads, or when max-batch-delay expires, whichever comes first. A batch is exported early if the records in it add up to more than 3 MiB.

max-batch-delay
integer <uint32>
Default: 2000

Maximum number of milliseconds to hold a log record batch before exporting it, when max-batch-records has not been reached.

tries
integer <uint32>
Default: 0

If an export fails, this is the number of attempts to make before dropping the whole batch and moving on. 0 means infinite attempts (with one caveat, see below). A dropped batch is acknowledged, so its messages are not processed again after a restart.

Note: If the collector outright rejects a batch, for example with 400 Bad Request, the batch is dropped regardless of what tries is set to since there is no point in retrying it.

Array of objects

HTTP headers added to every POST request, e.g. for an Authorization bearer token. Header values can contain variables, e.g. Bearer ${TOKEN}. For log exporters, only vault secrets and system variables can be used.

Array of value-from-vault-secret (object) or value-from-message (object)

Variable definitions for use in fields that support variables. A variable can either be a vault secret or a field within a Volga message. Note that not all fields support all types of variables.

Responses
201

Created

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

409

Conflict (instance exists)

503

Service Unavailable (strongbox sealed)

post/v1/config/tenants/{tenant-name}/volga/otel-log-exporters
Request samples
name: my-logs-exporter
site-placement:
  all-sites: true
topics:
  - system:logs
topic-patterns:
  - system:container-logs:myapp.*
resume: true
start-position: end
match-re: []
match-string: []
no-match-re: []
no-match-string: []
body: ${MSG_PAYLOAD}
trim-payload-newline: false
severity-text: INFO
protocol: http-protobuf
base-url: https://otel-collector.example.com
path: /v1/logs
tls-verify: true
ca-cert: |
  -----BEGIN CERTIFICATE-----
  MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
  MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
  U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
  MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
  dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
  VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
  AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
  LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
  Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
  HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
  hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
  gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
  BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
  aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
  dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
  dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
  BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
  iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
  -----END CERTIFICATE-----
use-root-ca-certs: true
server-name-indication: otel-collector
max-batch-records: 500
max-batch-delay: 2000
tries: 1
headers:
  - name: Authorization
    value: Bearer ${token}
variables:
  - name: token
    value-from-vault-secret:
      from-tenant: telco
      vault: myvault
      secret: mysecret
      key: mykey

Retrieve the configuration of all otel log exporters

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

query Parameters
fields
string

Retrieve only requested fields from the resource

See section fields

where
string

Retrieve only items matching the given expression.

See section where

validate
string <enumeration>

Validate the request but do not actually perform the requested operation

Value: "true"
keys
string <enumeration>

Retrieve only the keys for the list

Value: "true"
count
string <enumeration>

Retrieve only the number of elements in the list

Value: "true"
Responses
200

OK

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

412

Precondition Failed

503

Service Unavailable (strongbox sealed)

get/v1/config/tenants/{tenant-name}/volga/otel-log-exporters
Response samples
- name: my-logs-exporter
  site-placement:
    all-sites: true
  topics:
    - system:logs
  topic-patterns:
    - system:container-logs:myapp.*
  resume: true
  start-position: end
  match-re: []
  match-string: []
  no-match-re: []
  no-match-string: []
  body: ${MSG_PAYLOAD}
  trim-payload-newline: false
  severity-text: INFO
  protocol: http-protobuf
  base-url: https://otel-collector.example.com
  path: /v1/logs
  tls-verify: true
  ca-cert: |
    -----BEGIN CERTIFICATE-----
    MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
    MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
    U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
    MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
    dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
    VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
    AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
    LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
    Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
    HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
    hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
    gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
    BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
    aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
    dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
    dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
    BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
    iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
    -----END CERTIFICATE-----
  use-root-ca-certs: true
  server-name-indication: otel-collector
  max-batch-records: 500
  max-batch-delay: 2000
  tries: 1
  headers:
    - name: Authorization
      value: Bearer ${token}
  variables:
    - name: token
      value-from-vault-secret:
        from-tenant: telco
        vault: myvault
        secret: mysecret
        key: mykey
  

Update an otel log exporter

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

otel-log-exporter-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of otel-log-exporter

query Parameters
validate
string <enumeration>

Validate the request but do not actually perform the requested operation

Value: "true"
Request Body schema:
name
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$
required
all-sites (object) or sites (object) or application-deployments (object) or match-site-labels (object)

Defines which sites the configuration should be applied to.

topics
Array of strings <topic-name>

A list of Volga topics to export from.

topic-patterns
Array of strings <regexp>

PCRE2 regular expression.

Regular expressions used to find topics to export from. Can be combined with topics. Only one consumer is created per topic, even if multiple patterns match the same topic name, or if a pattern matches a topic name already listed in topics.

resume
boolean
Default: true

Acknowledge exporter messages and resume from the last position when reconnecting to a topic. If there are no acknowledged messages, start-position will be used instead.

start-position
string <enumeration>
Default: "end"
  • beginning: Start at the beginning of the topic
  • end: Start at the end of the topic, exporting only new messages as they come in.
match-re
Array of strings <regexp>

PCRE2 regular expression.

Only include messages matching all the provided regular expressions

match-string
Array of strings

Only include messages matching all the provided strings

no-match-re
Array of strings <regexp>

PCRE2 regular expression.

Only include messages not matching any of the provided regular expressions

no-match-string
Array of strings

Only include messages not matching any of the provided strings

body
string <variable-expression>
Default: "${MSG_PAYLOAD}"

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

The log record body. Can contain variables, e.g. ${MSG_PAYLOAD}.

trim-payload-newline
boolean
Default: false

Trim a single line terminator (\n or \r\n) from the payload of each incoming message. Useful for topics like container logs which typically include line terminators that will not be useful for the receiver. This setting is ignored for json topics.

severity-text
string <variable-expression>

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

The severityText value of the log record. Can contain variables.

protocol
string <enumeration>
Default: "grpc"
  • http-json: OTLP/HTTP with a JSON-encoded body, posted to base-url with path appended.
  • http-protobuf: OTLP/HTTP with a Protobuf-encoded body, posted to base-url with path appended.
  • grpc: OTLP/gRPC with a Protobuf-encoded body sent over an HTTP/2 connection that is kept open between messages. With this protocol, path is not used and headers are sent as gRPC metadata.

OTLP protocol used by the exporter. Note that unless base-url includes a port, the destination port is determined by the protocol as 4317 for grpc and 4318 for http-json and http-protobuf.

base-url
required
string <variable-expression>

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

Base URL of the OpenTelemetry collector. Can contain variables (system variables and vault secrets only). For the http-json and http-protobuf protocols, path (/v1/logs by default) is appended automatically. Use an https URL to export over TLS. If no port is given here one is selected based on the chosen protocol.

path
string <uri-path-absolute>
Default: "/v1/logs"

Path appended to base-url when posting logs. Not used when protocol is grpc.

tls-verify
boolean
Default: true

This field can be used to disable server certificate validation when connecting to the remote endpoint. It should only be set to false in test setups and never in production.

ca-cert
string <ca-cert>

One or more root certificates in PEM format.

CA certificates, in PEM format, to use when validating the TLS connection to the remote endpoint. Multiple certificates may be added as one string.

use-root-ca-certs
boolean
Default: true

Use root CA certificate bundle when validating the certificate of the remote endpoint.

server-name-indication
string

If the URL is HTTPS, this field can be used to configure which name must be present in the certificate presented by the server. By default, the host name from the URL is used.

max-batch-records
integer <uint32>
Default: 500

Maximum number of log records to put in one export. A batch is also exported as soon as the exporter has caught up with the topics it reads, or when max-batch-delay expires, whichever comes first. A batch is exported early if the records in it add up to more than 3 MiB.

max-batch-delay
integer <uint32>
Default: 2000

Maximum number of milliseconds to hold a log record batch before exporting it, when max-batch-records has not been reached.

tries
integer <uint32>
Default: 0

If an export fails, this is the number of attempts to make before dropping the whole batch and moving on. 0 means infinite attempts (with one caveat, see below). A dropped batch is acknowledged, so its messages are not processed again after a restart.

Note: If the collector outright rejects a batch, for example with 400 Bad Request, the batch is dropped regardless of what tries is set to since there is no point in retrying it.

Array of objects

HTTP headers added to every POST request, e.g. for an Authorization bearer token. Header values can contain variables, e.g. Bearer ${TOKEN}. For log exporters, only vault secrets and system variables can be used.

Array of value-from-vault-secret (object) or value-from-message (object)

Variable definitions for use in fields that support variables. A variable can either be a vault secret or a field within a Volga message. Note that not all fields support all types of variables.

Responses
204

No Content

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

412

Precondition Failed

503

Service Unavailable (strongbox sealed)

patch/v1/config/tenants/{tenant-name}/volga/otel-log-exporters/{otel-log-exporter-name}
Request samples
name: my-logs-exporter
site-placement:
  all-sites: true
topics:
  - system:logs
topic-patterns:
  - system:container-logs:myapp.*
resume: true
start-position: end
match-re: []
match-string: []
no-match-re: []
no-match-string: []
body: ${MSG_PAYLOAD}
trim-payload-newline: false
severity-text: INFO
protocol: http-protobuf
base-url: https://otel-collector.example.com
path: /v1/logs
tls-verify: true
ca-cert: |
  -----BEGIN CERTIFICATE-----
  MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
  MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
  U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
  MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
  dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
  VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
  AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
  LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
  Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
  HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
  hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
  gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
  BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
  aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
  dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
  dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
  BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
  iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
  -----END CERTIFICATE-----
use-root-ca-certs: true
server-name-indication: otel-collector
max-batch-records: 500
max-batch-delay: 2000
tries: 1
headers:
  - name: Authorization
    value: Bearer ${token}
variables:
  - name: token
    value-from-vault-secret:
      from-tenant: telco
      vault: myvault
      secret: mysecret
      key: mykey

Delete an otel log exporter

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

otel-log-exporter-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of otel-log-exporter

query Parameters
validate
string <enumeration>

Validate the request but do not actually perform the requested operation

Value: "true"
Responses
204

No Content

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

412

Precondition Failed

503

Service Unavailable (strongbox sealed)

delete/v1/config/tenants/{tenant-name}/volga/otel-log-exporters/{otel-log-exporter-name}

Replace or create a new otel log exporter

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

otel-log-exporter-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of otel-log-exporter

query Parameters
validate
string <enumeration>

Validate the request but do not actually perform the requested operation

Value: "true"
Request Body schema:
name
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$
required
all-sites (object) or sites (object) or application-deployments (object) or match-site-labels (object)

Defines which sites the configuration should be applied to.

topics
Array of strings <topic-name>

A list of Volga topics to export from.

topic-patterns
Array of strings <regexp>

PCRE2 regular expression.

Regular expressions used to find topics to export from. Can be combined with topics. Only one consumer is created per topic, even if multiple patterns match the same topic name, or if a pattern matches a topic name already listed in topics.

resume
boolean
Default: true

Acknowledge exporter messages and resume from the last position when reconnecting to a topic. If there are no acknowledged messages, start-position will be used instead.

start-position
string <enumeration>
Default: "end"
  • beginning: Start at the beginning of the topic
  • end: Start at the end of the topic, exporting only new messages as they come in.
match-re
Array of strings <regexp>

PCRE2 regular expression.

Only include messages matching all the provided regular expressions

match-string
Array of strings

Only include messages matching all the provided strings

no-match-re
Array of strings <regexp>

PCRE2 regular expression.

Only include messages not matching any of the provided regular expressions

no-match-string
Array of strings

Only include messages not matching any of the provided strings

body
string <variable-expression>
Default: "${MSG_PAYLOAD}"

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

The log record body. Can contain variables, e.g. ${MSG_PAYLOAD}.

trim-payload-newline
boolean
Default: false

Trim a single line terminator (\n or \r\n) from the payload of each incoming message. Useful for topics like container logs which typically include line terminators that will not be useful for the receiver. This setting is ignored for json topics.

severity-text
string <variable-expression>

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

The severityText value of the log record. Can contain variables.

protocol
string <enumeration>
Default: "grpc"
  • http-json: OTLP/HTTP with a JSON-encoded body, posted to base-url with path appended.
  • http-protobuf: OTLP/HTTP with a Protobuf-encoded body, posted to base-url with path appended.
  • grpc: OTLP/gRPC with a Protobuf-encoded body sent over an HTTP/2 connection that is kept open between messages. With this protocol, path is not used and headers are sent as gRPC metadata.

OTLP protocol used by the exporter. Note that unless base-url includes a port, the destination port is determined by the protocol as 4317 for grpc and 4318 for http-json and http-protobuf.

base-url
required
string <variable-expression>

A string that may contain references to variables. See Variable Expansion for details on how variables are expanded.

Base URL of the OpenTelemetry collector. Can contain variables (system variables and vault secrets only). For the http-json and http-protobuf protocols, path (/v1/logs by default) is appended automatically. Use an https URL to export over TLS. If no port is given here one is selected based on the chosen protocol.

path
string <uri-path-absolute>
Default: "/v1/logs"

Path appended to base-url when posting logs. Not used when protocol is grpc.

tls-verify
boolean
Default: true

This field can be used to disable server certificate validation when connecting to the remote endpoint. It should only be set to false in test setups and never in production.

ca-cert
string <ca-cert>

One or more root certificates in PEM format.

CA certificates, in PEM format, to use when validating the TLS connection to the remote endpoint. Multiple certificates may be added as one string.

use-root-ca-certs
boolean
Default: true

Use root CA certificate bundle when validating the certificate of the remote endpoint.

server-name-indication
string

If the URL is HTTPS, this field can be used to configure which name must be present in the certificate presented by the server. By default, the host name from the URL is used.

max-batch-records
integer <uint32>
Default: 500

Maximum number of log records to put in one export. A batch is also exported as soon as the exporter has caught up with the topics it reads, or when max-batch-delay expires, whichever comes first. A batch is exported early if the records in it add up to more than 3 MiB.

max-batch-delay
integer <uint32>
Default: 2000

Maximum number of milliseconds to hold a log record batch before exporting it, when max-batch-records has not been reached.

tries
integer <uint32>
Default: 0

If an export fails, this is the number of attempts to make before dropping the whole batch and moving on. 0 means infinite attempts (with one caveat, see below). A dropped batch is acknowledged, so its messages are not processed again after a restart.

Note: If the collector outright rejects a batch, for example with 400 Bad Request, the batch is dropped regardless of what tries is set to since there is no point in retrying it.

Array of objects

HTTP headers added to every POST request, e.g. for an Authorization bearer token. Header values can contain variables, e.g. Bearer ${TOKEN}. For log exporters, only vault secrets and system variables can be used.

Array of value-from-vault-secret (object) or value-from-message (object)

Variable definitions for use in fields that support variables. A variable can either be a vault secret or a field within a Volga message. Note that not all fields support all types of variables.

Responses
201

Created

204

No Content

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

412

Precondition Failed

503

Service Unavailable (strongbox sealed)

put/v1/config/tenants/{tenant-name}/volga/otel-log-exporters/{otel-log-exporter-name}
Request samples
name: my-logs-exporter
site-placement:
  all-sites: true
topics:
  - system:logs
topic-patterns:
  - system:container-logs:myapp.*
resume: true
start-position: end
match-re: []
match-string: []
no-match-re: []
no-match-string: []
body: ${MSG_PAYLOAD}
trim-payload-newline: false
severity-text: INFO
protocol: http-protobuf
base-url: https://otel-collector.example.com
path: /v1/logs
tls-verify: true
ca-cert: |
  -----BEGIN CERTIFICATE-----
  MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
  MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
  U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
  MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
  dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
  VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
  AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
  LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
  Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
  HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
  hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
  gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
  BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
  aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
  dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
  dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
  BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
  iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
  -----END CERTIFICATE-----
use-root-ca-certs: true
server-name-indication: otel-collector
max-batch-records: 500
max-batch-delay: 2000
tries: 1
headers:
  - name: Authorization
    value: Bearer ${token}
variables:
  - name: token
    value-from-vault-secret:
      from-tenant: telco
      vault: myvault
      secret: mysecret
      key: mykey

Retrieve the configuration of an otel log exporter

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

otel-log-exporter-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of otel-log-exporter

query Parameters
fields
string

Retrieve only requested fields from the resource

See section fields

where
string

Retrieve only items matching the given expression.

See section where

validate
string <enumeration>

Validate the request but do not actually perform the requested operation

Value: "true"
Responses
200

OK

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

412

Precondition Failed

503

Service Unavailable (strongbox sealed)

get/v1/config/tenants/{tenant-name}/volga/otel-log-exporters/{otel-log-exporter-name}
Response samples
name: my-logs-exporter
site-placement:
  all-sites: true
topics:
  - system:logs
topic-patterns:
  - system:container-logs:myapp.*
resume: true
start-position: end
match-re: []
match-string: []
no-match-re: []
no-match-string: []
body: ${MSG_PAYLOAD}
trim-payload-newline: false
severity-text: INFO
protocol: http-protobuf
base-url: https://otel-collector.example.com
path: /v1/logs
tls-verify: true
ca-cert: |
  -----BEGIN CERTIFICATE-----
  MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
  MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
  U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
  MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
  dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
  VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
  AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
  LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
  Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
  HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
  hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
  gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
  BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
  aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
  dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
  dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
  BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
  iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
  -----END CERTIFICATE-----
use-root-ca-certs: true
server-name-indication: otel-collector
max-batch-records: 500
max-batch-delay: 2000
tries: 1
headers:
  - name: Authorization
    value: Bearer ${token}
variables:
  - name: token
    value-from-vault-secret:
      from-tenant: telco
      vault: myvault
      secret: mysecret
      key: mykey

Retrieve the state of all otel log exporters

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

query Parameters
fields
string

Retrieve only requested fields from the resource

See section fields

where
string

Retrieve only items matching the given expression.

See section where

site
string

Send the request to the specfifed site

content
string <enumeration>

Filter descendant nodes in the response

Enum: "config" "nonconfig"
keys
string <enumeration>

Retrieve only the keys for the list

Value: "true"
count
string <enumeration>

Retrieve only the number of elements in the list

Value: "true"
Responses
200

OK

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

503

Service Unavailable (strongbox sealed)

get/v1/state/tenants/{tenant-name}/volga/otel-log-exporters
Response samples
- name: my-logs-exporter
  site-placement:
    all-sites: true
  topics:
    - system:logs
  topic-patterns:
    - system:container-logs:myapp.*
  resume: true
  start-position: end
  match-re: []
  match-string: []
  no-match-re: []
  no-match-string: []
  body: ${MSG_PAYLOAD}
  trim-payload-newline: false
  severity-text: INFO
  protocol: http-protobuf
  base-url: https://otel-collector.example.com
  path: /v1/logs
  tls-verify: true
  ca-cert: |
    -----BEGIN CERTIFICATE-----
    MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
    MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
    U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
    MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
    dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
    VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
    AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
    LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
    Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
    HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
    hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
    gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
    BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
    aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
    dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
    dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
    BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
    iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
    -----END CERTIFICATE-----
  use-root-ca-certs: true
  server-name-indication: otel-collector
  max-batch-records: 500
  max-batch-delay: 2000
  tries: 1
  headers:
    - name: Authorization
      value: Bearer ${token}
  variables:
    - name: token
      value-from-vault-secret:
        from-tenant: telco
        vault: myvault
        secret: mysecret
        key: mykey
  status: ready
  start-time: 2026-05-26T10:35:11.123Z
  consumed-topics:
    - system:logs
    - system:container-logs:myapp.myservice-0.mycontainer
  last-error-time: 2026-05-27T10:12:09.123Z
  last-error: "Bad POST response: 500"
  

Retrieve the state of an otel log exporter

SecurityaccessToken
Request
path Parameters
tenant-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of tenant

otel-log-exporter-name
required
string <name> ^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$

name of otel-log-exporter

query Parameters
fields
string

Retrieve only requested fields from the resource

See section fields

where
string

Retrieve only items matching the given expression.

See section where

site
string

Send the request to the specfifed site

content
string <enumeration>

Filter descendant nodes in the response

Enum: "config" "nonconfig"
Responses
200

OK

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

503

Service Unavailable (strongbox sealed)

get/v1/state/tenants/{tenant-name}/volga/otel-log-exporters/{otel-log-exporter-name}
Response samples
name: my-logs-exporter
site-placement:
  all-sites: true
topics:
  - system:logs
topic-patterns:
  - system:container-logs:myapp.*
resume: true
start-position: end
match-re: []
match-string: []
no-match-re: []
no-match-string: []
body: ${MSG_PAYLOAD}
trim-payload-newline: false
severity-text: INFO
protocol: http-protobuf
base-url: https://otel-collector.example.com
path: /v1/logs
tls-verify: true
ca-cert: |
  -----BEGIN CERTIFICATE-----
  MIIDUDCCAvagAwIBAgITAKYom2ar3MFwt//DipR5NywBdjAKBggqhkjOPQQDAjBa
  MQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2NraG9sbTELMAkGA1UEBhMC
  U0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlzdHJpYnV0aW9uMCIYDzIw
  MjIwMTEyMDYyMTQ4WhgPMjAyMjAxMjcwOTU3NDhaMGIxFzAVBgNVBAMTDnRpby5h
  dmFzc2EubmV0MRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD
  VQQKEwZBdmFzc2ExFTATBgNVBAsTDGRpc3RyaWJ1dGlvbjCCASIwDQYJKoZIhvcN
  AQEBBQADggEPADCCAQoCggEBAKa7LYXK0P1IOpXkEAI52kJizdUA74z7NsAegV38
  LFvipzCggEJr9niqRNmZqR6B8cs+CWIRZub0Qm5eQIzPtZtzLzwBD+i5AyitW5Tq
  Top79tVlta4wupAtkxBCOeIAzFtFwWaiGCVA+4D9Ns6TXo7GUxC0aw/MOeRyAHt/
  HaBIPk6hIGKOAiCjP4r4fEl4tWpSNzexovCvKCl4fGs4WLvRR1YoNdx0spvROc63
  hd9gikokDEuHMsh9Q1wEIP7/V+rgbYGtRw990mHl0zWoGtS+hp/QHAngcJnJiJk3
  gOPTXnQKqCzBWUmZUdwt27LKTdK7Vsq6DtNEKchaqRzGMRkCAwEAAaOBwzCBwDB+
  BgNVHSMEdzB1oV6kXDBaMQ8wDQYDVQQDEwZBdmFzc2ExEjAQBgNVBAcTCVN0b2Nr
  aG9sbTELMAkGA1UEBhMCU0UxDzANBgNVBAoTBkF2YXNzYTEVMBMGA1UECxMMZGlz
  dHJpYnV0aW9ughMAp0MSfyaImp0XtPO3uqCnMRITMCMGA1UdEQQcMBqCDnRpby5h
  dmFzc2EubmV0ggNmb2+CA2JhcjALBgNVHQ8EBAMCA4gwDAYDVR0TAQH/BAIwADAK
  BggqhkjOPQQDAgNIADBFAiAssZp0WV7ejre85Zh4LJZQiTVWEObLXRwifAHQoiqi
  iwIhAOga9thMhWISM1FFgSTeNUtUe9jziVdPfSYQpInAcg3V
  -----END CERTIFICATE-----
use-root-ca-certs: true
server-name-indication: otel-collector
max-batch-records: 500
max-batch-delay: 2000
tries: 1
headers:
  - name: Authorization
    value: Bearer ${token}
variables:
  - name: token
    value-from-vault-secret:
      from-tenant: telco
      vault: myvault
      secret: mysecret
      key: mykey
status: ready
start-time: 2026-05-26T10:35:11.123Z
consumed-topics:
  - system:logs
  - system:container-logs:myapp.myservice-0.mycontainer
last-error-time: 2026-05-27T10:12:09.123Z
last-error: "Bad POST response: 500"