Menu
tenant
The tenant stage is an action stage that sets the tenant ID for the log entry
picking it from a field in the extracted data map. If the field is missing, the
default promtail client tenant_id will
be used.
Schema
tenant:
# Either label, source or value config option is required, but not all (they
# are mutually exclusive).
# Name from labels to whose value should be set as tenant ID.
[ label: <string> ]
# Name from extracted data to whose value should be set as tenant ID.
[ source: <string> ]
# Value to use to set the tenant ID when this stage is executed. Useful
# when this stage is included within a conditional pipeline with "match".
[ value: <string> ]Example: extract the tenant ID from a structured log
For the given pipeline:
pipeline_stages:
- json:
expressions:
customer_id: customer_id
- tenant:
source: customer_idGiven the following log line:
{"customer_id":"1","log":"log message\n","stream":"stderr","time":"2019-04-30T02:12:41.8443515Z"}The first stage would extract customer_id into the extracted map with a value of
1. The tenant stage would set the X-Scope-OrgID request header (used by Loki to
identify the tenant) to the value of the customer_id extracted data, which is 1.
Example: override the tenant ID with the configured value
For the given pipeline:
pipeline_stages:
- json:
expressions:
app:
message:
- labels:
app:
- match:
selector: '{app="api"}'
stages:
- tenant:
value: "team-api"
- output:
source: messageGiven the following log line:
{"app":"api","log":"log message\n","stream":"stderr","time":"2019-04-30T02:12:41.8443515Z"}The pipeline would:
- Decode the JSON log
- Set the label
app="api" - Process the
matchstage checking if the{app="api"}selector matches and - whenever it matches - run the sub stages. Thetenantsub stage would override the tenant with the value"team-api".
Example: extract the tenant ID from kubernetes sd
scrape_configs:
- job_name: kubernetes-pods-name
kubernetes_sd_configs:
- role: pod
relabel_configs:
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: namespace
pipeline_stages:
- match:
selector: '{namespace=~".+"}'
stages:
- tenant:
label: "namespace"
- output:
source: messageThe pipeline would:
- Match any log where the
namespacelabel matched the regexp.+ - Process the
matchstage checking if the{namespace=~".+"}selector matches and - whenever it matches - run the sub stages. Thetenantsub stage would override the tenant with the value with the value of thenamespacelabel, if it was set.