Hello, i’m trying to setup to collect my logs through following stack:
javaApp → otelJavaAgent → alloy → loki.
I tried two approaches within alloy:
-
otelcol.receiver.otlp → otelcol.processor.batch → otelcol.exporter.loki → loki.write
This approach for some reason wraps my log and my metadata into json, and saves this json into loki, while i want to have just a logline + labels + loki_structured_metadata
the example of json is below:
{
“status”: “success”,
“data”: {
“resultType”: “streams”,
“result”: [
{
“stream”: {
“detected_level”: “INFO”,
“exporter”: “OTLP”,
“instance”: “01”,
“job”: “dten/dten_4”,
“level”: “INFO”,
“service_name”: “dten/dten_4”
},
“values”: [
[
“1738827312100000000”,
“{"body":"Hello, world2!","severity":"INFO","resources":{"host.arch":"aarch64","host.name":"Dmitriys-MBP","os.description":"Mac OS X 12.5.1","os.type":"darwin","process.command_args":["-junit4","otel.OtelTest"],"process.executable.path":"/opt/homebrew/Cellar/openjdk/21.0.2/libexec/openjdk.jdk/Contents/Home/bin/java","process.pid":35012,"process.runtime.description":"Homebrew OpenJDK 64-Bit Server VM 21.0.2","process.runtime.name":"OpenJDK Runtime Environment","process.runtime.version":"21.0.2","service.instance.id":"01","service.name":"dten_4","service.namespace":"dten","service.version":"1.2.3","telemetry.distro.name":"opentelemetry-java-instrumentation","telemetry.distro.version":"2.10.0","telemetry.sdk.language":"java","telemetry.sdk.name":"opentelemetry","telemetry.sdk.version":"1.44.1"},"instrumentation_scope":{"name":"otel.OtelTest"}}”
]
… -
The second approach is based on alloy graph:
otelcol.receiver.otlp → otelcol.processor.batch → otelcol.exporter.otlphttp (through otlp protocol)
the result seems to be fine, but this way i haven’t found how to specify labels, seems labels are only possible to create through approach 1 (and it does works)
the json is below:
{
“status”: “success”,
“data”: {
“resultType”: “streams”,
“result”: [
{
“stream”: {
“detected_level”: “info”,
“host_arch”: “aarch64”,
“host_name”: “Dmitriys-MBP.fritz.box”,
“observed_timestamp”: “1738841625863113000”,
“os_description”: “Mac OS X 12.5.1”,
“os_type”: “darwin”,
“process_command_args”: “["otel.OtelTest"]”,
“process_executable_path”: “/opt/homebrew/Cellar/openjdk/21.0.2/libexec/openjdk.jdk/Contents/Home/bin/java”,
“process_pid”: “64415”,
“process_runtime_description”: “Homebrew OpenJDK 64-Bit Server VM 21.0.2”,
“process_runtime_name”: “OpenJDK Runtime Environment”,
“process_runtime_version”: “21.0.2”,
“scope_name”: “otel.OtelTest”,
“service_instance_id”: “01”,
“service_name”: “dten_5”,
“service_namespace”: “dten”,
“service_version”: “1.2.3”,
“severity_number”: “9”,
“severity_text”: “INFO”,
“telemetry_distro_name”: “opentelemetry-java-instrumentation”,
“telemetry_distro_version”: “2.10.0”,
“telemetry_sdk_language”: “java”,
“telemetry_sdk_name”: “opentelemetry”,
“telemetry_sdk_version”: “1.44.1”
},
“values”: [
[
“1738841625863000000”,
“Hello, world2!”
]
So all in all, my issues are that 1 - creates only labels without structured_metadata, all the metadata placed into logline. 2 - creates only structured_metadata, without labels.
Therefore questions are:
why otelcol.exporter.loki wraps my logs to json? Is it possible to avoid that?
OR
Is it possible to specify labels using approach 2?