Requirements
Collector mode requires Ruby 3.1 or newer. On older Ruby versions thecollector_endpoint option is ignored.
Collector mode does not support JRuby. It depends on how Ruby handles forking, which JRuby does something different with.
Installing the OpenTelemetry gems
Collector mode sends data using OpenTelemetry. Theappsignal gem does not install the OpenTelemetry gems, so add appsignal-opentelemetry next to the gem "appsignal" line already in your Gemfile:
bundle install.
The appsignal-opentelemetry gem does nothing on its own. It only installs the OpenTelemetry gem versions that collector mode supports, so you do not have to track them yourself. Its version matches the appsignal gem, so appsignal-opentelemetry 5.0.0 pairs with appsignal 5.0.0.
If those gems are missing or their versions are unsupported, AppSignal logs a warning at startup and does not enter collector mode.
Deploying a collector
You can have AppSignal host a collector for you using the “Hosted Collector” page in your organization’s settings.Configuring the collector
Set thecollector_endpoint configuration option to the address of your collector. When using a hosted collector, this address can be found under “Collector URL” in the “Hosted Collector” settings page.
Set the service_name option as well. The service name option should be set to different values for each of your services and applications (for example, “web-server”, “background-worker”) in order to tell each of them apart in distributed traces.
Migrating to collector mode
Most configuration options have the same behavior in agent mode and collector mode. In collector mode, some data that was sent in agent mode as a single kind of data is split between multiple data types. Some configuration options that controlled whether that data was sent and how it was filtered have changed:
When the collector mode options are not set, the agent mode option is used to derive a value for it, so an application that configured these config options for agent mode will still report the same data in collector mode.
You can set the collector mode options to report each kind of data differently, such as filtering a background job’s arguments but not a request’s payload. AppSignal logs which values to set to keep reporting the same data, and
appsignal diagnose shows them as loaded from derived:
Diagnose output
Request headers
request_headers lists Rack environment keys, and only some of those keys hold a request header. Collector mode reports the two separately, each under the names its own kind of value goes by:
keep_request_headerslists request headers, lowercase and dash-separated, as OpenTelemetry names them.HTTP_ACCEPTbecomesaccept.keep_request_environmentlists the rest, as Rack names them.QUERY_STRINGstaysQUERY_STRING.
Parameters
Collector mode reports three kinds of parameters, each with its own filter and send option:- The request payload: an incoming HTTP request’s parameters, such as a form body.
- The function parameters: the arguments a background job was given.
- The request query parameters: an incoming HTTP request’s parsed query string.