This is a source which follows the OTLP Protocol. This source supports OTLP/grpc and OTLP/HTTP. Support for OTLP/HTTP+JSON is not complete due as the traceId and spanId will be base64 and not HexString.
Example .yaml configuration for Data Prepper 2.0:
source:
otel_trace_source:Example .yaml configuration for Data Prepper 1.4 and above:
source:
otel_trace_source:
record_type: eventFor more information on migrating from Data Prepper 1.x to Data Prepper 2.x, see Migrating to Data Prepper 2.0 in the Trace Analytics documentation.
- port(Optional) => An
intrepresents the port Otel trace source is running on. Default is21890. - path(Optional) => A
Stringwhich represents the path for sending unframed HTTP requests. This can be used for supporting unframed gRPC with HTTP idiomatic path to a configurable path. It should start with/and length should be at least 1./opentelemetry.proto.collector.trace.v1.TraceService/Exportendpoint will be disabled for both gRPC and HTTP requests if path is configured. Path can contain${pipelineName}placeholder which will be replaced with pipeline name. - request_timeout(Optional) => An
intrepresents request timeout in millis. Default is10_000. - health_check_service(Optional) => A boolean enables health check service. When
trueenables a gRPC health check service undergrpc.health.v1.Health/Check. Default isfalse. In order to use the health check service, you must also enableproto_reflection_service. - unauthenticated_health_check (Optional) => A
booleanthat determines if the health endpoint will require authentication. This option is ignored if no authentication is defined. Default isfalse - proto_reflection_service(Optional) => A boolean enables a reflection service for Protobuf services (see ProtoReflectionService and gRPC reflection docs). Default is
false. - unframed_requests(Optional) => A boolean to enable requests not framed using the gRPC wire protocol. When
health_check_serviceis true andunframed_requestsis true, enables HTTP health check service under/health. - thread_count(Optional) => the number of threads to keep in the ScheduledThreadPool. Default is
200. - max_connection_count(Optional) => the maximum allowed number of open connections. Default is
500. - authentication(Optional) => An authentication configuration. By default, this runs an unauthenticated server. See below for more information.
- record_type(Optional) => A string represents the supported record data type that is written into the buffer plugin. Value options are
otlporevent. Default isotlp. - compression (Optional) : The compression type applied on the client request payload. Defaults to
none. Supported values are:none: no compressiongzip: apply GZip de-compression on the incoming request.
Data Prepper replies with a RetryInfo specifying how long to wait for the next request in case backpressure builds up. The retry information is implemented as exponential backoff, with a max delay of retry_info.max_delay.
source:
otel_trace_source:
retry_info:
min_delay: 1000ms # defaults to 100ms
max_delay: 5s # defaults to 2sBy default, the otel-trace-source input is unauthenticated.
The following is an example of how to run the server with HTTP Basic authentication:
source:
otel_trace_source:
record_type: event
authentication:
http_basic:
username: my-user
password: my_s3cr3tYou can also explicitly disable authentication with:
source:
otel_trace_source:
record_type: event
authentication:
unauthenticated:This plugin uses pluggable authentication for GRPC servers. To provide custom authentication,
create a plugin which implements GrpcAuthenticationProvider
- ssl(Optional) => A boolean enables TLS/SSL. Default is
true. - sslKeyCertChainFile(Optional) => A
Stringrepresents the SSL certificate chain file path or AWS S3 path. S3 path examples3://<bucketName>/<path>. Required ifsslis set totrue. - sslKeyFile(Optional) => A
Stringrepresents the SSL key file path or AWS S3 path. S3 path examples3://<bucketName>/<path>. Required ifsslis set totrue. - useAcmCertForSSL(Optional) => A boolean enables TLS/SSL using certificate and private key from AWS Certificate Manager (ACM). Default is
false. - acmCertificateArn(Optional) => A
Stringrepresents the ACM certificate ARN. ACM certificate take preference over S3 or local file system certificate. Required ifuseAcmCertForSSLis set totrue. - awsRegion(Optional) => A
Stringrepresents the AWS region to use ACM or S3. Required ifuseAcmCertForSSLis set totrueorsslKeyCertChainFileandsslKeyFileisAWS S3 path.
Create the following otel-trace-source configuration in your pipeline.yaml.
source:
otel_trace_source:
record_type: event
ssl: true
sslKeyCertChainFile: "/full/path/to/certfile.crt"
sslKeyFile: "/full/path/to/keyfile.key"
unframed_requests: trueGenerate a private key named keyfile.key, along with a self-signed certificate named certfile.crt.
openssl req -nodes -new -x509 -keyout keyfile.key -out certfile.crt -subj "/L=test/O=Example Com Inc./OU=Example Com Inc. Root CA/CN=Example Com Inc. Root CA"
Make sure to replace the paths for the sslKeyCertChainFile and sslKeyFile for the otel-trace-source configuration with the actual paths of the files.
Send a sample span with the following https curl command:
curl -k -H 'Content-Type: application/json; charset=utf-8' -d '{"resourceSpans":[{"scopeSpans":[{"spans":[{"spanId":"AAAAAAAAAAM=","name":"test-span"}]}]}]}' https://localhost:21890/opentelemetry.proto.collector.trace.v1.TraceService/Export
If path option is configured, you can send a sample span to the custom path with the following https curl command:
curl -k -H 'Content-Type: application/json; charset=utf-8' -d '{"resourceSpans":[{"scopeSpans":[{"spans":[{"spanId":"AAAAAAAAAAM=","name":"test-span"}]}]}]}' https://localhost:21890/<path>
requestTimeouts: measures total number of requests that time out.requestsReceived: measures total number of requests received by otel trace source.successRequests: measures total number of requests successfully processed by otel trace source plugin.badRequests: measures total number of requests with invalid format processed by otel trace source plugin.requestsTooLarge: measures total number of requests of which the number of spans in the content is larger than the buffer capacity.internalServerError: measures total number of requests processed by otel trace source with custom exception type.
requestProcessDuration: measures latency of requests processed by otel trace source plugin in seconds.
payloadSize: measures the distribution of incoming requests payload sizes in bytes.
This plugin is compatible with Java 8. See