8 lttng-event-rule - Common LTTng event rule specification
13 Specify an event rule to match Linux kernel tracepoint or system call
17 option:--type=(**kernel:tracepoint** | **kernel:syscall**[**:entry**|**:exit**|**pass:[:entry+exit]**])]
18 pass:[[]option:--name='NAME'] [option:--filter='EXPR']
20 Specify an event rule to match Linux kernel kprobe or user space
24 option:--type=(**kernel:kprobe** | **kernel:uprobe**) option:--location='LOC'
25 pass:[[]option:--event-name='EVENTNAME']
27 Specify an event rule to match user space tracepoint events:
30 option:--type=**user:tracepoint** [option:--name='NAME'] [option:--exclude-name='XNAME']...
31 pass:[[]option:--log-level=('LOGLEVEL' | 'LOGLEVEL'.. | ..)] [option:--filter='EXPR']
33 Specify an event rule to match Java/Python logging events:
36 option:--type=(**jul** | **log4j** | **log4j2** | **python**)**:logging** [option:--name='NAME']
37 pass:[[]option:--log-level=('LOGLEVEL' | 'LOGLEVEL'.. | ..)] [option:--filter='EXPR']
42 This manual page shows how to specify an LTTng event rule on the command
45 As of LTTng{nbsp}{lttng_version}, the command-line options documented
46 here only apply to the `event-rule-matches` trigger condition specifier
47 (see man:lttng-add-trigger(1)).
49 See man:lttng-concepts(7) to learn more about instrumentation points,
50 events, and event rules.
54 This manual page only describes the common event rule options. The
55 man:lttng(1) commands which require an event rule specification may
56 accept or require other options and arguments, depending on the context.
58 For example, the man:lttng-add-trigger(1) command also accepts
59 nloption:--capture options with the `event-rule-matches` trigger
64 Overview of event rule condtions
65 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66 For LTTng to emit an event{nbsp}__E__,{nbsp}__E__ must satisfy *all* the
67 conditions of an event rule, that is:
69 * The instrumentation point from which LTTng creates{nbsp}__E__ has a
72 See the ``<<inst-point-type-cond,Instrumentation point type
73 condition>>'' section below.
75 * A pattern matches the name of{nbsp}__E__ while another pattern
78 See the ``<<event-name-cond,Event name condition>>'' section below.
80 * The log level of the instrumentation point from which LTTng
81 creates{nbsp}__E__ is at least as severe as some value, or is exactly
84 See the ``<<inst-point-log-level-cond,Instrumentation point log level
85 condition>>'' section below.
87 * The fields of the payload of{nbsp}__E__ and the current context fields
88 satisfy a filter expression.
90 See the ``<<filter-cond,Event payload and context filter condition>>''
93 The dedicated command-line options of most conditions are optional: if
94 you don't specify the option, the associated condition is always
98 [[inst-point-type-cond]]
99 Instrumentation point type condition
100 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101 An event{nbsp}__E__ satisfies the instrumentation point type condition
102 of an event rule if the instrumentation point from which LTTng
103 creates{nbsp}__E__ is, depending on the argument of the option:--type
106 `kernel:tracepoint`::
107 An LTTng kernel tracepoint, that is, a statically defined point
108 in the source code of the kernel image or of a kernel module
109 with LTTng kernel tracer macros.
111 List the available Linux kernel tracepoints with `lttng list --kernel`.
112 See man:lttng-list(1) to learn more.
114 `kernel:syscall:entry`::
115 `kernel:syscall:exit`::
116 `kernel:syscall:entry+exit`::
117 The entry, exit, or entry and exit of a Linux kernel system
120 List the available Linux kernel system call instrumentation points with
121 `lttng list --kernel --syscall`. See man:lttng-list(1) to learn more.
124 A Linux kprobe, that is, a single probe dynamically placed in
125 the compiled kernel code.
127 You must specify the kprobe location with the option:--location option.
129 The payload of a Linux kprobe event is empty.
132 A Linux user space probe, that is, a single probe dynamically
133 placed at the entry of a compiled user space application/library
134 function through the kernel.
136 LTTng{nbsp}{lttng_version} supports the ELF and SystemTap User-level
137 Statically Defined Tracing (USDT; a DTrace-style marker) probing
138 methods. LTTng only supports USDT probes which are :not:
141 You must specify the user space probe location with the
142 option:--location option.
144 The payload of a Linux user space probe event is empty.
147 An LTTng user space tracepoint, that is, a statically defined point
148 in the source code of a C/$$C++$$ application/library with LTTng
149 user space tracer macros.
151 List the available user space tracepoints with `lttng list --userspace`.
152 See man:lttng-list(1) to learn more.
155 A `java.util.logging` logging statement.
157 List the available `java.util.logging` loggers with `lttng list --jul`
158 See man:lttng-list(1) to learn more.
161 An Apache Log4j 1.x logging statement.
163 List the available Apache Log4j 1.x loggers with `lttng list --log4j`
164 See man:lttng-list(1) to learn more.
167 An Apache Log4j 2 logging statement.
169 List the available Apache Log4j 2 loggers with `lttng list --log4j2`
170 See man:lttng-list(1) to learn more.
173 A Python logging statement.
175 List the available Python loggers with `lttng list --python` See
176 man:lttng-list(1) to learn more.
182 An event{nbsp}__E__ satisfies the event name condition of an event
183 rule{nbsp}__ER__ if the two following statements are true:
185 * You don't specify the option:--name='NAME' option or, depending on the
186 instrumentation type condition (see the
187 ``<<inst-point-type-cond,Instrumentation point type condition>>''
188 section above) of{nbsp}__ER__, 'NAME' matches:
191 `kernel:tracepoint`::
193 The full name of the tracepoint from which LTTng creates{nbsp}__E__.
195 Note that the full name of a user space tracepoint is
196 __PROVIDER__++:++__NAME__, where __PROVIDER__ is the tracepoint provider
197 name and __NAME__ is the tracepoint name.
203 The name of the Java or Python logger from which LTTng
206 `kernel:syscall:entry`::
207 `kernel:syscall:exit`::
208 `kernel:syscall:entry+exit`::
209 The name of the system call, without any `sys_` prefix, from which
210 LTTng creates{nbsp}__E__.
213 * You don't specify any option:--exclude-name='XNAME' option or
214 none of the 'XNAME' arguments matches the full name of the user space
215 tracepoint from which LTTng creates{nbsp}__E__.
217 The option:--exclude-name option is only available with the
218 option:--type=++user:tracepoint++ option.
220 This condition is only meaningful for the LTTng tracepoint, logging
221 statement, and Linux system call instrumentation point types: it's
222 always satisfied for the other types.
224 In all cases, 'NAME' and 'XNAME' are globbing patterns: the `*`
225 character means ``match anything''. To match a literal `*` character,
228 IMPORTANT: Make sure to **single-quote** 'NAME' and 'XNAME' when they
229 contain the `*` character and when you run an man:lttng(1) command from
232 As of LTTng{nbsp}{lttng_version}, not specifying the option:--name
233 option is equivalent to specifying option:--name=++\'*\'++, but this
234 default may change in the future.
237 [[inst-point-log-level-cond]]
238 Instrumentation point log level condition
239 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
240 An event{nbsp}__E__ satisfies the instrumentation point log level
241 condition of an event rule if either:
243 * You specify the option:--log-level=++..++ option or you don't specify
244 the option:--log-level option.
246 Defaulting to option:--log-level=++..++ when you don't specify the
247 option:--log-level option is specific to LTTng{nbsp}{lttng_version} and
248 may change in the future.
250 * The log level of the LTTng user space tracepoint or logging statement
251 from which LTTng creates{nbsp}__E__ is:
252 With the option:--log-level=__LOGLEVEL__++..++ option::
253 At least as severe as 'LOGLEVEL'.
255 With the option:--log-level=__LOGLEVEL__ option::
258 As of LTTng{nbsp}{lttng_version}, the ++..++__LOGLEVEL__ and
259 __LOGLEVEL__++..++__LOGLEVEL__ formats are :not: supported.
261 This condition is only meaningful for the LTTng user space tracepoint
262 and logging statement instrumentation point types: it's always satisfied
265 The available values of 'LOGLEVEL' are, depending on the argument of
266 the option:--type option, from the most to the least severe:
278 * `DEBUG_PROGRAM` (8)
279 * `DEBUG_PROCESS` (9)
280 * `DEBUG_MODULE` (10)
282 * `DEBUG_FUNCTION` (12)
288 * `OFF` (`INT32_MAX`)
296 * `ALL` (`INT32_MIN`)
300 * `OFF` (`INT32_MAX`)
307 * `ALL` (`INT32_MIN`)
318 * `ALL` (`INT32_MAX`)
331 Event payload and context filter condition
332 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
333 An event{nbsp}__E__ satisfies the event payload and context filter
334 condition of an event rule if the option:--filter='EXPR' option is
335 missing or if 'EXPR' is _true_.
337 This condition is only meaningful for the LTTng tracepoint and Linux
338 system call instrumentation point types: it's always satisfied for other
341 'EXPR' can contain references to the payload fields of{nbsp}__E__ and
342 to the current context fields.
344 IMPORTANT: Make sure to **single-quote** 'EXPR' when you run an
345 man:lttng(1) command from a shell, as filter expressions typically
346 include characters having a special meaning for most shells.
348 The expected syntax of 'EXPR' is similar to the syntax of a
349 C{nbsp}language conditional expression (an expression which an `if`
350 statement can evaluate), but there are a few differences:
352 * A _NAME_ expression identifies an event payload field named
353 _NAME_ (a C{nbsp}identifier).
355 Use the C{nbsp}language dot and square bracket notations to access
356 nested structure and array/sequence fields. You can only use a constant,
357 positive integer number within square brackets. If the index is out of
358 bounds, 'EXPR' is _false_.
360 The value of an enumeration field is an integer.
362 When a field expression doesn't exist, 'EXPR' is _false_.
364 Examples: `my_field`, `target_cpu`, `seq[7]`, `msg.user[1].data[2][17]`.
366 * A ++$ctx.++__TYPE__ expression identifies the statically-known context
367 field having the type _TYPE_ (a C{nbsp}identifier).
369 List the available statically-known context field names with the
370 man:lttng-add-context(1) command.
372 When a field expression doesn't exist, 'EXPR' is _false_.
374 Examples: `$ctx.prio`, `$ctx.preemptible`,
375 `$ctx.perf:cpu:stalled-cycles-frontend`.
377 * A ++$app.++__PROVIDER__++:++__TYPE__ expression identifies the
378 application-specific context field having the type _TYPE_ (a
379 C{nbsp}identifier) from the provider _PROVIDER_ (a C{nbsp}identifier).
381 When a field expression doesn't exist, 'EXPR' is _false_.
383 Example: `$app.server:cur_user`.
385 * Compare strings, either string fields or string literals
386 (double-quoted), with the `==` and `!=` operators.
388 When comparing to a string literal, the `*` character means ``match
389 anything''. To match a literal `*` character, use :escwc:.
391 Examples: `my_field == "user34"`, `my_field == my_other_field`,
392 `my_field == "192.168.*"`.
394 * The precedence table of the operators which are supported in 'EXPR'
395 is as follows. In this table, the highest precedence is{nbsp}1:
399 |Precedence |Operator |Description |Associativity
400 |1 |`-` |Unary minus |Right-to-left
401 |1 |`+` |Unary plus |Right-to-left
402 |1 |`!` |Logical NOT |Right-to-left
403 |1 |`~` |Bitwise NOT |Right-to-left
404 |2 |`<<` |Bitwise left shift |Left-to-right
405 |2 |`>>` |Bitwise right shift |Left-to-right
406 |3 |`&` |Bitwise AND |Left-to-right
407 |4 |`^` |Bitwise XOR |Left-to-right
408 |5 |`\|` |Bitwise OR |Left-to-right
409 |6 |`<` |Less than |Left-to-right
410 |6 |`<=` |Less than or equal to |Left-to-right
411 |6 |`>` |Greater than |Left-to-right
412 |6 |`>=` |Greater than or equal to |Left-to-right
413 |7 |`==` |Equal to |Left-to-right
414 |7 |`!=` |Not equal to |Left-to-right
415 |8 |`&&` |Logical AND |Left-to-right
416 |9 |`\|\|` |Logical OR |Left-to-right
419 Parentheses are supported to bypass the default order.
421 IMPORTANT: Unlike the C{nbsp}language, the bitwise AND and OR operators
422 (`&` and `|`) in 'EXPR' take precedence over relational operators (`<`,
423 `<=`, `>`, `>=`, `==`, and `!=`). This means the expression `2 & 2 == 2`
424 is _true_ while the equivalent C{nbsp}expression is _false_.
426 The arithmetic operators are :not: supported.
428 LTTng first casts all integer constants and fields to signed 64-bit
429 integers. The representation of negative integers is two's complement.
430 This means that, for example, the signed 8-bit integer field 0xff (-1)
431 becomes 0xffffffffffffffff (still -1) once casted.
433 Before a bitwise operator is applied, LTTng casts all its operands to
434 unsigned 64-bit integers, and then casts the result back to a signed
435 64-bit integer. For the bitwise NOT operator, it's the equivalent of
436 this C{nbsp}expression:
440 (int64_t) ~((uint64_t) val)
443 For the binary bitwise operators, it's the equivalent of those
448 (int64_t) ((uint64_t) lhs >> (uint64_t) rhs)
449 (int64_t) ((uint64_t) lhs << (uint64_t) rhs)
450 (int64_t) ((uint64_t) lhs & (uint64_t) rhs)
451 (int64_t) ((uint64_t) lhs ^ (uint64_t) rhs)
452 (int64_t) ((uint64_t) lhs | (uint64_t) rhs)
455 If the right-hand side of a bitwise shift operator (`<<` and `>>`) is
456 not in the [0,{nbsp}63] range, then 'EXPR' is _false_.
460 ----------------------------
461 msg_id == 23 && size >= 2048
462 ----------------------------
464 -------------------------------------------------
465 $ctx.procname == "lttng*" && (!flag || poel < 34)
466 -------------------------------------------------
468 ---------------------------------------------------------
469 $app.my_provider:my_context == 17.34e9 || some_enum >= 14
470 ---------------------------------------------------------
472 ---------------------------------------
473 $ctx.cpu_id == 2 && filename != "*.log"
474 ---------------------------------------
476 ------------------------------------------------
477 eax_reg & 0xff7 == 0x240 && x[4] >> 12 <= 0x1234
478 ------------------------------------------------
481 Migration from a recording event rule specification
482 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
483 Since LTTng{nbsp}2.13, what this manual page documents is the standard,
484 common way to specify an LTTng event rule.
486 With the man:lttng-enable-event(1) command, you also specify an event
487 rule, but with deprecated options and arguments.
489 The following table shows how to translate from the
490 man:lttng-enable-event(1) options and arguments to the common event
491 rule specification options:
495 |Recording event rule option(s)/argument(s) |Common event rule option(s)
497 |nloption:--kernel and nloption:--tracepoint
498 |option:--type=++kernel:tracepoint++
500 |nloption:--kernel and nloption:--syscall
501 |option:--type=++kernel:syscall:entry+exit++
503 |nloption:--probe='LOC' and 'RECORDNAME' (non-option)
504 |option:--type=++kernel:kprobe++, option:--location='LOC', and
505 option:--event-name='RECORDNAME'
507 |nloption:--userspace-probe='LOC' and 'RECORDNAME' (non-option)
508 |option:--type=++kernel:uprobe++, option:--location='LOC', and
509 option:--event-name='RECORDNAME'
511 |nloption:--function='LOC' and 'RECORDNAME' (non-option)
512 |Not available as of LTTng{nbsp}{lttng_version}
514 |nloption:--userspace and nloption:--tracepoint
515 |option:--type=++user:tracepoint++
517 |nloption:--jul and nloption:--tracepoint
518 |option:--type=++jul:logging++
520 |nloption:--log4j and nloption:--tracepoint
521 |option:--type=++log4j:logging++
523 |nloption:--log4j2 and nloption:--tracepoint
524 |option:--type=++log4j2:logging++
526 |nloption:--python and nloption:--tracepoint
527 |option:--type=++python:logging++
530 |option:--name='NAME'
533 |option:--name=++\'*\'++ or no option:--name option
535 |nloption:--exclude=__XNAME__[++,++__XNAME__]...
536 |option:--exclude-name='XNAME' for each 'XNAME'
538 |nloption:--loglevel='LOGLEVEL'
539 |option:--log-level=__LOGLEVEL__++..++
541 |nloption:--loglevel-only='LOGLEVEL'
542 |option:--log-level=__LOGLEVEL__
544 |nloption:--filter='EXPR'
545 |option:--filter='EXPR'
551 Instrumentation point type condition
552 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
553 See the ``<<inst-point-type-cond,Instrumentation point type
554 condition>>'' section above.
556 option:-E 'NAME', option:--event-name='NAME'::
557 With the option:--type=++kernel:kprobe++ or
558 option:--type=++kernel:uprobe++ option, set the name of the emitted
559 events to 'NAME' instead of the 'LOC' argument of the
560 option:--location='LOC' option.
562 Defaulting to 'LOC' is specific to LTTng{nbsp}{lttng_version} and may
563 change in the future.
565 option:-L 'LOC', option:--location='LOC'::
566 With the option:--type=++kernel:kprobe++ option:::
567 Set the location of the Linux kprobe to insert to 'LOC'.
571 * An address (`0x` hexadecimal prefix supported).
573 * A symbol name and an offset (__SYMBOL__++pass:[+]++__OFFSET__ format).
575 With the option:--type=++kernel:uprobe++ option:::
576 Set the location of the user space probe to insert to 'LOC'.
580 \[++elf:++]__PATH__++:++__SYMBOL__::::
581 An available symbol within a user space application or library.
585 Application or library path.
591 * The name of an application as found in the directories listed in the
592 `PATH` environment variable.
595 Symbol name of the function of which to instrument the entry.
597 'SYMBOL' can be any defined code symbol in the output of the man:nm(1)
598 command, including with its nloption:--dynamic option, which lists
602 As of LTTng{nbsp}{lttng_version}, not specifying `elf:` is equivalent to
603 specifying it, but this default may change in the future.
607 * `/usr/lib/libc.so.6:malloc`
608 * `./myapp:createUser`
609 * `elf:httpd:ap_run_open_htaccess`
611 ++sdt:++__PATH__++:++__PROVIDER__++:++__NAME__::::
612 A SystemTap User-level Statically Defined Tracing (USDT) probe
613 within a user space application or library.
617 Application or library path.
623 * The name of an application as found in the directories listed in the
624 `PATH` environment variable.
628 USDT provider and probe names.
630 For example, with the following USDT probe:
634 DTRACE_PROBE2("server", "accept_request",
635 request_id, ip_addr);
638 The provider/probe name pair is `server:accept_request`.
641 Example: `sdt:./build/server:server:accept_request`
643 option:-t 'TYPE', option:--type='TYPE'::
644 Only match events which LTTng creates from an instrumentation point
645 having the type 'TYPE'.
649 `kernel:tracepoint`:::
650 LTTng kernel tracepoint.
652 As of LTTng{nbsp}{lttng_version}, `kernel` is an alias, but this may
653 change in the future.
656 LTTng user space tracepoint.
658 As of LTTng{nbsp}{lttng_version}, `user` is an alias, but this may
659 change in the future.
661 `kernel:syscall:entry`:::
662 Linux system call entry.
664 As of LTTng{nbsp}{lttng_version}, `syscall:entry` is an alias, but this
665 may change in the future.
667 `kernel:syscall:exit`:::
668 Linux system call exit.
670 As of LTTng{nbsp}{lttng_version}, `syscall:exit` is an alias, but this
671 may change in the future.
673 `kernel:syscall:entry+exit`:::
674 Linux system call entry and exit (two distinct instrumentation
677 As of LTTng{nbsp}{lttng_version}, the following are aliases, but this
678 may change in the future:
680 * `syscall:entry+exit`
687 As of LTTng{nbsp}{lttng_version}, `kprobe` is an alias, but this may
688 change in the future.
690 You must specify the location of the kprobe to insert with the
691 option:--location option.
693 You may specify the name of the emitted events with the
694 option:--event-name option.
697 Linux user space probe.
699 You must specify the location of the user space probe to insert with the
700 option:--location option.
702 You may specify the name of the emitted events with the
703 option:--event-name option.
706 `java.util.logging` logging statement.
708 As of LTTng{nbsp}{lttng_version}, `jul` is an alias, but this may change
712 Apache Log4j 1.x logging statement.
714 As of LTTng{nbsp}{lttng_version}, `log4j` is an alias, but this may
715 change in the future.
718 Apache Log4j 2 logging statement.
720 As of LTTng{nbsp}{lttng_version}, `log4j2` is an alias, but this may
721 change in the future.
724 Python logging statement.
726 As of LTTng{nbsp}{lttng_version}, `python` is an alias, but this may
727 change in the future.
732 See the ``<<event-name-cond,Event name condition>>'' section above.
734 option:-n 'NAME', option:--name='NAME'::
735 Only match events of which 'NAME' matches, depending on the
736 argument of the option:--type option:
739 `kernel:tracepoint`::
741 The full name of the LTTng tracepoint.
747 The Java or Python logger name.
749 `kernel:syscall:entry`::
750 `kernel:syscall:exit`::
751 `kernel:syscall:entry+exit`::
752 The name of the system call, without any `sys_` prefix.
755 This option is :not: available with other instrumentation point types.
757 As of LTTng{nbsp}{lttng_version}, not specifying this option is
758 equivalent to specifying option:--name=++\'*\'++ (when it applies), but
759 this default may change in the future.
761 option:-x 'XNAME', option:--exclude-name='XNAME'::
762 Only match events of which 'XNAME' does :not: match the full name of
763 the LTTng user space tracepoint.
765 Only available with the option:--type=++user:tracepoint++ option.
767 'NAME' and 'XNAME' are globbing patterns: the `*` character means
768 ``match anything''. To match a literal `*` character, use :escwc:.
771 Instrumentation point log level condition
772 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
773 See the ``<<inst-point-log-level-cond,Instrumentation point log level
774 condition>>'' section above.
776 option:-l 'LOGLEVELSPEC', option:--log-level='LOGLEVELSPEC'::
777 Only match events of which the log level of the LTTng tracepoint or
778 logging statement is, depending on the format of 'LOGLEVELSPEC':
782 At least as severe as 'LOGLEVEL'.
791 This option is :not: available with the following options:
793 * option:--type=++kernel:tracepoint++
794 * option:--type=++kernel:syscall:entry++
795 * option:--type=++kernel:syscall:exit++
796 * option:--type=++kernel:syscall:entry+exit++
797 * option:--type=++kernel:kprobe++
798 * option:--type=++kernel:uprobe++
800 As of LTTng{nbsp}{lttng_version}, not specifying this option is
801 equivalent to specifying option:--log-level=++..++ (when it applies),
802 but this default may change in the future.
805 Event payload and context filter condition
806 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
807 See the ``<<filter-cond,Event payload and context filter condition>>''
810 option:-f 'EXPR', option:--filter='EXPR'::
811 Only match events of which 'EXPR', which can contain references to
812 event payload and current context fields, is _true_.
814 This option is only available with the following options:
816 * option:--type=++kernel:tracepoint++
817 * option:--type=++kernel:syscall:entry++
818 * option:--type=++kernel:syscall:exit++
819 * option:--type=++kernel:syscall:entry+exit++
822 include::common-footer.txt[]
828 man:lttng-add-trigger(1),
830 man:lttng-concepts(7)