Skip to content

code_tracer

code_tracer plugin

Note: This plugin traces processes on the managed node, so it is advisable to turn it off if you want to start tracing yourself. Refer to the Erlang/OTP documentation on the trace function.

Applications it depends on

kernel

Modules

wombat_plugin_code_tracer

Reports

The following notifications are always enabled:

  • Code loaded
  • Code purged
  • Shell command

The following notifications are disabled by default:

  • Busy port
  • Busy dist port
  • Long GC
  • Long schedule
  • Large heap

Triggering limits for these notifications are configurable (see example section below).

The notifications are documented in the Notifications page.

Metrics

  • Busy port Tags: dev, op

  • Busy dist port Tags: dev, op

  • Long GC Tags: dev

  • Long schedule Tags: dev

  • Large heap Tags: dev

The metrics are documented in the Metrics page.

Configuration options

  • report_system_monitor_notifs (true or false, default: false): Whether the plugin should generate "Busy port", "Busy dist port", "Long GC", "Long schedule" and "Large heap" notifications (based on erlang:system_monitor). If disabled, none of these notifications are generated.

  • report_system_monitor_metrics (true or false, default: true): Whether the plugin should collect "Process notifications" metrics (i.e. "Busy port", "Busy dist port", "Long GC", "Long schedule" and "Large heap").

  • code_clash_ignore_paths ([string()], default : ["patches", "consolidated"]): Only a notification (and no module_clash alarm) will be raised for clash paths that match any of the values. Each value can be the entire path of the module directory or part of it. For example the value "/db_client/patches" would match any directories that have this inside of them e.g. /opt/my_app/db_client/patches, /usr/local/opt/my_app/db_client/patches, /db_client/patches/ebin/ etc.

  • old_code_ignore_pattern (string): No old_code alarm will be raised for module names which match the given regular expression. By default WombatOAM ignores

  • Elixir's built-in protocol modules (i.e. the default pattern is: "Collectable|Enumerable|IEx.Info|Inspect|List.Chars|String.Chars");

  • MongooseIM specific modules that are compiled and reloaded at runtime (i.e. the default pattern is: "^mod.*_backend|^mod_bosh_dynamic|^mod_mam_odbc_arch_params").

See more configuration options in the example section below.

Example wombat.config entries

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{set, wo_plugins, plugins, code_tracer, trace_modules, true}.
{set, wo_plugins, plugins, code_tracer, long_gc_limit, 500}.
{set, wo_plugins, plugins, code_tracer, long_schedule_limit, 100}.
{set, wo_plugins, plugins, code_tracer, large_heap_limit, 80000}.
{set, wo_plugins, plugins, code_tracer, long_gc_scheduler_limit, 4}.
{set, wo_plugins, plugins, code_tracer, report_system_monitor_notifs, false}.
{set, wo_plugins, plugins, code_tracer, report_system_monitor_metrics, true}.
{set, wo_plugins, plugins, code_tracer, code_clash_ignore_paths,
     ["/the/entire/path", "/start/of/path", "end/of/path", "single_dir"]}.
{set, wo_plugins, plugins, code_tracer, old_code_ignore_pattern,
     "^Elixir\..*"}.