Configuration (legacy agent)
The following content pertains to
AppOptics agents are no long receiving updates. The new SolarWinds Observability libraries are regularly updated with new features and improvements. If you are still relying on the AppOptics agents and your components are supported by the new libraries, consider migrating to SolarWinds Observability.
If you have already transitioned to the new SolarWinds Observability PHP Library, see the SolarWinds PHP Library documentation for configuration information.
SolarWinds Observability libraries are not compatible with AppOptics agents. Do not use a mix of SolarWinds Observability libraries and AppOptics agents to instrument applications that are part of a distributed trace.
The configuration files used by php can be listed by running
php --ini
. Note that this will give the command-line-specific files
on some distributions, denoted by /cli/; web systems on the other hand
use the /cgi/ configs. For most platforms, you’ll find an
appoptics.ini
configuration file after installing the
instrumentation module.
How to set configuration
All configuration options can be set in the INI file(s) used by your PHP installation, in most cases there will be an appoptics.ini
file under your PHP configuration load path added during agent install.
You must restart the web server or PHP process in order for any changes to take effect.
Certain configurations can also be overridden via a system environment variable. If the same configuration is set in both places (for example, service key in both system environment variable APPOPTICS_SERVICE_KEY
and appoptics.ini appoptics.service_key
), then the setting is applied with this precedence:
System Environment Variable > Configuration in INI File
Report backtraces
Many public API methods have a backtrace parameter, which is set to ‘true’ by default.
Suppress reporting for sensitive data
PHP instrumentation has the ability to sanitize sql database queries in case you don't want query parameters displayed in your account. By default this functionality is enabled, but you can use the enable_sanitize_sql option to configure the instrumentation to start collecting and reporting query parameters.
appoptics.enable_sanitize_sql = 0
Complete configuration options
The following is the complete list of instrumentation configuration options.
Service Key
config option: appoptics.service_key
system environment variable: APPOPTICS_SERVICE_KEY
description: The service key is required. It identifies the service being instrumented within your Organization. It should be in the form of <api token>:<service name>
.
Since version 3.1.0 the <service name>
part of this option can be changed at a per-directory or virtualhost level. Example on how to change the service name for different vhosts in httpd.conf:
Listen *:3080
<VirtualHost *:3080>
php_value appoptics.service_key 0123456789abcde0123456789abcde0123456789abcde0123456789abcde1234:vhost-3080
</VirtualHost>
Listen *:3081
<VirtualHost *:3081>
php_value appoptics.service_key 0123456789abcde0123456789abcde0123456789abcde0123456789abcde1234:vhost-3081
</VirtualHost>
Nginx example:
server {
listen 80;
server_name host.domain.com
location ~\.(php|html)
fastcgi_param PHP_VALUE "appoptics.service_key={API_TOKEN}:{SERVICE_NAME}";
}
history: Introduced in version 3.0.0
example: appoptics.service_key = 0123456789abcde0123456789abcde0123456789abcde0123456789abcde1234:my-service
Tracing
config option: appoptics.tracing
description: Specify whether tracing and metrics should be initiated for incoming requests to the service. See Transaction Settings File on how to set this at a transaction level.
possible values:
enabled: (Default) Continue or start a trace, and report metrics.
disabled: Never continue or start traces, nor report metrics.
history: Introduced with the original instrumentation.
example: appoptics.tracing = enabled
Debug Level
config option: appoptics.debug_level
description: Logging level to adjust the logging verbosity. Increase the logging verbosity to one of the debug levels to get more detailed information added to the agent logs.
possible values:
-1: disable
0: fatal
1: error
2: warning (the default)
3: info
4: debug low
5: debug medium
6: debug high
history: Introduced in version 3.0.2
example: appoptics.debug_level = 6
Hostname Alias
config option: appoptics.hostname_alias
description: An optional logical/readable hostname that can be used to easily identify the host.
history: Introduced in version 3.0.2
example: appoptics.hostname_alias = apm-host-east
Max Transactions
config option: appoptics.max_transactions
description: The maximum number of transaction names to track when aggregating metric and histogram data by individual service transaction within the metrics flush interval. Changing this value will have a noticable impact on the used memory and can help reduce the memory footprint of the agent. Default is 50.
history: Introduced in version 3.0.11
example: appoptics.max_transactions = 100
Max Ready Wait Time
config option: appoptics.max_ready_wait_time
description: The maximum wait time (in milli seconds) for AppOptics to become ready for receiving traces. A value of 0 will turn off waiting which ensures AppOptics won't block the app on startup. Default is:
- 0 ms (off), for non-CLI usage, e.g. Apache, Nginx (PHP-FPM)
- 2000 ms, for CLI usage (see Enable CLI)
history: Introduced in version 3.2.0
example: appoptics.max_ready_wait_time = 500
Max Flush Wait Time
config option: appoptics.max_flush_wait_time
description: The maximum wait time (in milli seconds) for flushing data before terminating the app. A value of 0 will turn off flushing which ensures AppOptics won't block the app on termination. Default is 5000 ms.
history: Introduced in version 3.2.0
example: appoptics.max_flush_wait_time = 2000
Sanitize SQL Mode
config option: appoptics.enable_sanitize_sql
description: Instrumentation has the ability to sanitize query literals from sql statements. By default this is enabled and the agent removes literals by automatically trying to determine the quoting character used. Set to one of the other options to change the sanitization mode, or to disable.
possible values:
0: Disable SQL sanitizing.
1: (Default) Enable SQL sanitizing and attempt to automatically determine which quoting form is used.
2: Enable SQL sanitizing and drop double quoted characters.
4: Enable SQL sanitizing and retain double quoted characters.
history: Introduced in version 0.4.7.
example: appoptics.enable_sanitize_sql = 0
Enable Error Callback
config option: appoptics.enable_error_callback
description: By default the extension reports all errors to AppOptics, obeys the ‘@' suppression operator, and uses the instrumentation default error reporting level. To direct the instrumentation not to send any error data at all to AppOptics set this INI directive to 0.
possible values:
0: Disable error reporting.
1: (Default) Report all errors to AppOptics.
history: Introduced in version 1.3.2.
example: appoptics.enable_error_callback = 0
Report Suppressed Errors
config option: appoptics.report_suppressed_errors
description: PHP features the @ operator which overrides the global error reporting settings and suppresses errors for any expression it precedes. By default the instrumentation also ignores these suppressed errors. To report them—as long as they occur at the current error reporting level—set the following INI directive to 1.
possible values:
0: (Default) Honor the @ operator, which suppresses errors.
1: Report suppressed errors.
history: Introduced in version 1.3.2.
example: appoptics.report_suppressed_errors = 1
Use Error Reporting
config option: appoptics.use_error_reporting
description: PHP error reporting levels are controlled in two ways, by altering the error_reporting directive in php INI files, or at run time via the error_reporting function. By default these have no effect on how the instrumentation reports errors to AppOptics. By default the instrumentation reports all errors except E_STRICT and E_DEPRECATED, regardless of the aforementioned settings that your application honors. To make the instrumentation follow the same error reporting settings as your app set the following INI directive to 1.
possible values:
0: (Default) Report all errors except E_STRICT and E_DEPRECATED.
1: Follow the same error reporting settings as your app.
history: Introduced in version 1.3.2.
example: appoptics.use_error_reporting = 1
Enable Wrap Error Log
config option: appoptics.enable_wrap_error_log
description: Completely aside from the level of error reporting in php or the instrumentation, php also offers a logging function called error_log(), which can be used to write arbitrary log data to a file. By default the instrumentation reports these lines of log text to AppOptics. To disable this set the following INI directive to 0.
possible values:
0: Do not report logging text generated by error_log().
1: (Default) Report logging text generated by error_log().
history: Introduced in version 1.3.2.
example: appoptics.enable_wrap_error_log = 0
Enable CLI
config option: appoptics.enable_cli
description: Enable or disable Command Line Interface (CLI) tracing. Default is 0.
PHP command line option -d --define
or -c --php-ini
can be used to set this configuration for a particular CLI invocation, rather than globally, to limit the impact of tracing. An example crontab entry to enable tracing:
*/5 * * * * /usr/bin/php -d appoptics.enable_cli=1 /opt/job/script.php
And an example to disable tracing for a particular invocation when CLI tracing is enabled globally:
*/5 * * * * /usr/bin/php -d appoptics.enable_cli=0 /opt/job/script.php
Also see the option Max Ready Wait Time to block execution until AppOptics becomes ready.
possible values: 0 (disable), 1 (enable). Default: 0.
history: Introduced in version 3.0.0.
example: appoptics.enable_cli = 0
Disable Backtraces
config option: appoptics.enable_backtrace
description: Enable/disable backtraces to be reported with spans. This option is useful when debugging issues related to memory usage or broken (incomplete) traces. Backtrace information can increase data size significantly which leads to increased memory usage on the host and can even cause broken traces if the size is too big. This option allows to temporarily disable backtraces to test whether or not a particular issue could be related to backtrace data.
possible values: 0 (disable), 1 (enable). Default: 1.
history: Introduced in version 2.0.0.
example: appoptics.enable_backtrace = 1
Disable the Agent
config option: appoptics.enable
description: The agent can be effectively disabled at the vhost level with this option, which is helpful for environments with multiple vhosts. Setting this option in the INI file will affect the global scope of PHP. It can also be set on vhosts individually (e.g. .htaccess or httpd.conf).
Note that this option will not fully disable the agent and therefore will still
establish a connection to AppOptics. If you wish to fully disable the agent please
comment out the line extension=appoptics.so
in your INI file or uninstall the agent. See also Tracing on how to disable tracing and metrics at the service level, and Transaction Settings File on how to disable tracing and metrics at a transaction level.
Example on how to enable/disable the agent for different vhosts in httpd.conf:
Listen *:3080
<VirtualHost *:3080>
php_value appoptics.enable 0
</VirtualHost>
Listen *:3081
<VirtualHost *:3081>
php_value appoptics.enable 1
</VirtualHost>
possible values: 0 (disable), 1 (enable). Default: 1.
history: Introduced in version 3.3.1.
example: appoptics.enable = 1
Enable Code Profiling
config option: appoptics.enable_profiling
description: Enable or disable code profiling. For more information see Code Profiling.
possible values: 0 (disable), 1 (enable). Default: 0.
history: Introduced in version 3.4.0.
example: appoptics.enable_profiling = 1
Change Code Profiling Interval
config option: appoptics.profiling_interval
description: The interval in milliseconds at which code profiling takes snapshots. Only valid if appoptics.enable_profiling is set to 1. For more information see Code Profiling.
possible values: 20 - 2,147,483,647. Default: 20.
history: Introduced in version 3.4.0.
example: appoptics.profiling_interval = 20
Transaction Settings File
config option: appoptics.transaction_settings_file
description: Path to the INI file that contains the transaction settings for filtering specific transactions, which can be used to exclude transactions from being traced. The path should be absolute (e.g. /etc/php/conf.d/ao-transaction-settings.ini) or relative to the execution directory of your app. Each setting must be nested under a new [index]. Example content of an INI file:
[0]
type = url
regexp = ".*/abc/.*"
tracing = "disabled"
[1]
type = url
extensions = "css html"
tracing = "disabled"
In the example above all transactions that have "/abc/" in the request URL or end in the file extension .css/.html will be disabled for tracing. The first setting that matches a transaction will be used. This option works well in combination with appoptics.tracing which could be used to enable/disable tracing globablly and then use transaction specific settings to enable/disable certain transactions only. Ensure that the regular expression conforms to the Boost/C++11 standard. If a regular expression is invalid an error will be logged and the setting will be ignored. Different settings files can be configured on a vhost level. See transaction filtering for more information.
history: Introduced in version 3.5.0.
example: appoptics.transaction_settings_file = /etc/php/conf.d/ao-transaction-settings.ini
Automatic Insertion of Trace ID into Logs
config option: appoptics.log_trace_id
description: Enable or disable appending the Trace ID of the currently running request to internal errors/warnings and PHP logs generated with error_log. The sample flag (whether or not request is being sampled) is added to the end of the Trace ID and will be of the form "-0" for non-sampled and "-1" for sampled requests. If you want to add the Trace ID to log messages generated by logging frameworks such as Monolog or log4PHP, see Trace Context in Logs.
possible values:
disabled: do not append (Default)
enabled: append for all requests
sampled_only: append only for sampled requests
history: Introduced in version 3.6.0.
example: appoptics.log_trace_id = enabled
Enable Laravel Tracing
config option: appoptics.enable_laravel_tracing
description: Enable/disable tracing for laravel.
possible values: 0 (disable), 1 (enable). Default: 1.
history: Introduced in version 3.7.0.
example: appoptics.enable_laravel_tracing = 1
Enable Laravel Backtraces
config option: appoptics.laravel_enable_backtrace
description: Enable or disable collecting backtraces for laravel traces. Enabling this option will increase usage of memory and network bandwidth since laravel backtraces are quite large.
possible values: 0 (disable), 1 (enable). Default: 0.
history: Introduced in version 3.7.0.
example: appoptics.laravel_enable_backtrace = 0
Change EC2 Metadata Timeout
config option: appoptics.ec2_metadata_timeout
description: Timeout for retrieving EC2 metadata (in milli seconds). This option is useful for apps running on AWS EC2 or OpenStack instances, to increase the retrieval timeout. It is safe to set this value to 0 for apps that don't run on EC2/OpenStack.
possible values: 0 - 3000. Default: 1000
history: Introduced in version 3.8.0.
example: appoptics.ec2_metadata_timeout = 1000
Enable Trigger Tracing
config option: appoptics.trigger_tracing
description: Enable or disable trigger tracing. A triggered trace is a special trace that bypasses sampling decisions. See Trigger Trace for more information.
possible values:
enabled: (Default) Allow special handling of HTTP requests that are flagged as trigger trace.
disabled: No special handling of HTTP requests that are flagged as trigger trace.
history: Introduced in version 3.8.0.
example: appoptics.trigger_tracing = enabled
Use HTTP Proxy
config option: appoptics.proxy
system environment variable: APPOPTICS_PROXY
description: The agent can connect to the AppOptics backend through a proxy. The config value should either be http://<proxyHost>:<proxyPort>
for a proxy server that does
not require authentication, or http://<username>:<password>@<proxyHost>:<proxyPort>
for a proxy server that
requires Basic authentication. Note that while HTTP is the only type of connection supported between the agent
and proxy (hence only http://
is allowed in the schema of the config value), the agent traffic to AppOptics is
still encrypted using SSL/TLS. Provide the config value inside double quotes.
It is recommended to use the agent-specific configuration. However, the agent's underlying network library will use a system-wide proxy defined in the environment variables grpc_proxy, https_proxy or http_proxy if agent-specific configuration is not set. Refer to gRPC environment variables for more information.
history: Introduced in version 4.0.0.
examples:
appoptics.proxy = "http://my-proxy:3306"
appoptics.proxy = "http://user:password@my-proxy:3306"
Hide URL Parameters
config option: appoptics.hide_url_parameters
description: This config controls whether URL query parameters are reported or not. If enabled, AppOptics will stop collecting and reporting URL parameters (e.g. http://example.com/site?param=123 will be reported as http://example.com/site).
possible values: 0 (disable), 1 (enable). Default: 0.
history: Introduced in version 4.0.0.
example: appoptics.hide_url_parameters = 1
The scripts are not supported under any SolarWinds support program or service. The scripts are provided AS IS without warranty of any kind. SolarWinds further disclaims all warranties including, without limitation, any implied warranties of merchantability or of fitness for a particular purpose. The risk arising out of the use or performance of the scripts and documentation stays with you. In no event shall SolarWinds or anyone else involved in the creation, production, or delivery of the scripts be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the scripts or documentation.