Use db.stored_operation.name as one of the attributes to determine if two spans are the same. When it is present, ignore db.statement and db.query.text for the same purpose.
Changed
Improve recognition of HTTP client spans. This will help our 'slow requests' feature recognize grouped HTTP client spans and improve our N+1 detection.
Allow the use of app-level push API keys. When an app-level push API key is used, the resource attributes for the name and environment should not be specified. These resource attributes are now optional, although the use of one requires the other.
Make most resource attributes optional. Allow for the resource attributes pertaining the revision, the hostname, the language integration and the application path to not be present. This allows the AppSignal collector to more easily ingest data from arbitrary OpenTelemetry sources.
Note that usage of these resource attributes is still recommended. Traces sent without these attributes may be tagged with the wrong hostname or revision, or have their error backtraces parsed incorrectly.
Change the enable_host_metrics configuration option default from true to false. Host metrics are now disabled by default and must be explicitly enabled in the configuration.
Improve histogram support. When processing OpenTelemetry histograms, allow for histograms that do not have min, max or sum values. Use the exemplars provided alongside the histogram to improve the accuracy of the histogram.
Return CORS headers from the export endpoints to make it possible to export OpenTelemetry data to these endpoints without the need of a proxy server.
The Access-Control-Allow-Origin header value can be configured in the collector with the cors_origin config option or APPSIGNAL_CORS_ORIGIN environment variable.
Support key-value list attributes in log lines. When an attribute sent in a log line is a key-value list, it will be converted into multiple attributes, one for each key-value pair in the list, prefixed with the key of the list attribute.
Changed
Disable the default AppSignal request and response headers filter. By default, the OpenTelemetry SDK in the applications do not send any request and response headers and require configuration of to record these headers. This required double configuration in applications for AppSignal and OpenTelemetry. The appsignal.config.request_headers and appsignal.config.response_headers configuration options can still be used for additional header filtering if needed. Consult your application's language OpenTelemetry SDK for the configuration option to record request and response headers.
Log a warning when making a GET request to a POST endpoint.
The error page when making a GET request will also explain to make a POST request instead.
Read the app language from the OpenTelemetry telemetry.sdk.language resource attribute if set. This attribute is set by the OpenTelemetry SDK for some languages, like Go, Java and PHP.
If your application's OpenTelemetry SDK sets the telemetry.sdk.language resource attribute, you will not need to set the appsignal.config.language_integration attribute.
If the appsignal.config.language_integration attribute is set, it will take precedence over the telemetry.sdk.language resource attribute.
Report log lines with unspecified severity. When a log line does not have a severity, report it as a log line with info level severity.
Fixed
Fix child spans not always being reported. This was due to the collector not properly traversing all the levels the trace span hierarchy.
Add an ignore_logs config option, which can be set using the appsignal.config.ignore_logs resource attribute. When this resource attribute is set, logs whose message matches any of the values in the ignore_logs list of values will be discarded.
The values on the ignore_logs configuration option support the ^, $ and .* meta-characters, with their expected meanings in regular expressions. When neither ^ or $ are specified at the beginning or ending of the value respectively, ignore_logs will match a log message if its value is present at any point in the message.
For example, to ignore logs starting with "success" or containing the word "OK", when setting the resource attributes in a Go application:
Go
res := resource.NewWithAttributes( attribute.StringSlice("appsignal.config.ignore_logs", []string{"^success", "OK"}), // And other resource attributes)
The list of patterns can also be provided as a comma-separated string -- this is useful when using the OTEL_RESOURCE_ATTRIBUTES environment variable, such as in a PHP application:
Shell
function encode() { echo -n "$@" | sed 's/,/%2C/g'}export OTEL_RESOURCE_ATTRIBUTES="\ appsignal.config.ignore_errors=$(encode "^success,OK"),\ ..."
Changed
Improve AppSignal compatibility with traces across multiple services.
When reporting a boolean resource attribute configuration option, such as send_function_parameters, send_request_payload, send_request_query_parameters and send_request_session_data, allow it to be provided as a string containing the case-insensitive values "true" or "false".
This makes it possible to set these configuration options using the OTEL_RESOURCE_ATTRIBUTES environment variable.
Changed
Allow overriding automatically set namespaces. When a namespace is automatically by AppSignal, set it only if a different namespace has not been set in the trace using the appsignal.namespace attribute.
Improve communication from the collector's exporter server to the client by returning the expected OpenTelemetry export response messages from the collector's HTTP server. This includes updating the tracing, metrics and logs endpoints by returning their respective response messages.
Fixed
Truncate the keys of attributes and the overall size of the attribute list for spans, events, scopes, resources and links.
Allow log records with non-string values as bodies.
When a log record does not have a string as its body, but it has attributes, serialise those attributes as JSON and use that as the log message instead of the body.
When a log record has a key-value list as its body, use those key-value pairs as attributes.
Extract attributes in Laravel logs, encoded into the context attribute, into separate attributes that can be explored individually in AppSignal.
Fixed
Support Express instrumentation version 0.200.0, by ensuring that exception events from Express request handler spans are always reported.
Add support for OpenTelemetry logs. Logs sent to the collector's /v1/logs endpoint in OTLP/HTTP format will be delivered to AppSignal's logging feature.
Enrich Sidekiq events by setting the action name. Now Sidekiq jobs are reported as <WorkerClass>#perform, e.g. MyWorker#perform.
Changed
BREAKING CHANGE: Use a better optimized protocol to send data to our API.
This change is backwards incompatible and we recommend you upgrade to the latest version of the collector.
Older versions of the collector will not be able to send data to our API.
Please refer to the documentation for more information on how to upgrade your collector.
Configure AppSignal via HTTP request headers on export requests. If it's not possible to configure resource attributes in OpenTelemetry export data, configure AppSignal via request headers set on the export requests made to the collector's HTTP endpoints.
Supported headers are:
AppSignal-Config-Name: app name (required)
AppSignal-Config-Environment: app environment (required)
AppSignal-Config-PushApiKey: push API key (required)
AppSignal-Config-Revision: app revision (required)
AppSignal-Config-LanguageIntegration: language integration like ruby, elixir, php, etc. (required)
OpenTelemetry-ServiceName: service name of the app
OpenTelemetry-HostName: name of the app's host (required)
Close HTTP connections from OpenTelemetry exports when we have successfully received the request. This fixes an issue with the server not shutting down when the connection is kept open.
Add the appsignal.config.otp_app resource attribute config option. When set for Elixir applications, we will use the OTP app name to detect which stacktrace lines originate from the app, and which lines are from dependencies.
Changed
Consider empty environment variables as unset. From now on, an environment variable that's set to an empty string is considered unset when reading the collector configuration from system environment variables.
In the example below, the environment variable will be considered unset.
It will not fail on parsing an empty string as a number and set the default HTTP port instead.
Shell
APPSIGNAL_HTTP_PORT=""
This behavior is changed for the following config options:
APPSIGNAL_CPU_COUNT
APPSIGNAL_ENABLE_HOST_METRICS
APPSIGNAL_FILES_WORLD_ACCESSIBLE
APPSIGNAL_HOSTNAME
APPSIGNAL_HTTP_PORT
APPSIGNAL_LOG_LEVEL
APPSIGNAL_PUSH_API_ENDPOINT
APPSIGNAL_PUSH_API_KEY
APPSIGNAL_RUNNING_IN_CONTAINER
In the appsignal/collector Docker image we will now listen to the PORT environment variable if it's set, and use it to configure the HTTP server's port.
If the APPSIGNAL_HTTP_PORT environment variable is also set in addition to the PORT environment variable, it will read from the APPSIGNAL_HTTP_PORT environment variable.
Log debug messages and warnings from the config initialization. Previously, any debug messages or warnings that should have been logged upon config initialization where not logged. Now, all config log messages are logged, including debug messages even if the log level is configured as info. This may be improved in the future.
Shut down the collector in case of an internal error. We've seen problems where internal channels close and it causes the collector to stop reporting data. In this case, log what happens and shut down.
Fixed
Disable the host metrics only on the collector container, by default. When the collector is installed on a container alongside the app, it will collect container host metrics.
Filter query parameters in the url.query span attribute. When an url.query attribute contains an URL encoded query parameter we will filter out the keys configured in the appsignal.config.filter_request_query_parameters resource attribute.
In the situation that a url.query span attribute has the value password=secret&some_param=some_value, and the appsignal.config.filter_request_query_parameters resource attribute is configured with ["password"], the url.query span attribute will be stored as password=[FILTERED]&some_param=some_value.
If no appsignal.request.query_parameters span attribute is set, we will store the query parameters as a JSON map on this attribute. For example:
Rename the working_dir_path config option to working_directory_path. This names matches with the naming in our other tools and integrations.
This is a breaking change: With this change the working_dir_path config option will no longer work.
When the appsignal.config.send_request_query_parameters resource attribute config option value is set to false, we will remove the url.query span attribute from spans.
Sanitize database query attributes following the OpenTelemetry Semantic Conventions 1.30 database specification. We now sanitize SQL queries in the db.query.text attribute and Redis queries in the db.operation.name attribute.
Add support for cumulative histograms. The previous known state of a cumulative histogram will be stored and its delta will be calculated, in order to send it to AppSignal as a delta histogram.
Don’t let the bad bugs bite. Try AppSignal for free.
AppSignal offers a 30-day free trial, no credit card is required. All features are available in all plans. Start monitoring your application in just a few clicks!