lttng-relayd(8)
===============
:revdate: 2 April 2020


NAME
----
lttng-relayd - LTTng 2 relay daemon


SYNOPSIS
--------
[verse]
*lttng-relayd* [option:--background | option:--daemonize] [option:--config='PATH']
             [option:--control-port='URL'] [option:--data-port='URL'] [option:--fd-pool-size='COUNT']
             [option:--live-port='URL'] [option:--output='PATH']
             [option:-v | option:-vv | option:-vvv] [option:--working-directory='PATH']
             [option:--group-output-by-session] [option:--disallow-clear]


DESCRIPTION
-----------
The https://lttng.org/[_Linux Trace Toolkit: next generation_] is an open
source software package used for correlated tracing of the Linux kernel,
user applications, and user libraries.

LTTng consists of Linux kernel modules (for Linux kernel tracing) and
dynamically loaded libraries (for user application and library tracing).

The _LTTng relay daemon_ is responsible for receiving trace data from
possibly remote LTTng session/consumer daemons and for writing it to
the local file system. The relay daemon also accepts _LTTng live_
connections from compatible viewers; this is the official approach to
viewing LTTng events as they are emitted.

The relay daemon listens by default on all network interfaces to gather
trace data, but only on localhost for LTTng live connections.

The relay daemon does not require any particular permissions, as long as
it can write to the output directory and listen on the configured ports.
If a user is within a secured network and/or has proper firewall
settings, `lttng-relayd` can listen to LTTng live connections from _all_
network interfaces by specifying
+--live-port=tcp://0.0.0.0:{default_network_viewer_port}+.

Once a trace has been streamed completely, the trace can be processed by
any tool that can process an LTTng trace located on the local
file system.


[[output-directory]]
Output directory
~~~~~~~~~~~~~~~~
The relay daemon uses different output path patterns depending on:

* Its configuration.
* The connected peer's tracing session configuration.
* The connected peer's LTTng session daemon (see man:lttng-sessiond(8))
  version.

Consider the following variables:

'BASE'::
    Base output directory: `$LTTNG_HOME/lttng-traces` or the
    argument of the option:--output option.
+
NOTE: `$LTTNG_HOME` defaults to `$HOME` when not explicitly set.

'HOSTNAME'::
    Peer's hostname.

'SESSION'::
    Tracing session name.

'DATETIME'::
    Unique tracing session date/time.

'TRACEPATH'::
    Custom trace path ('TRACEPATH' part of the man:lttng-create(1)
    command's nloption:--set-url option's argument, if any).

The relay daemon output path patterns are:

Hostname grouping (without option:--group-output-by-session)::
    Without a custom trace path:::
+
--
[verse]
'BASE'/'HOSTNAME'/'SESSION'-'DATETIME'
--

With a custom trace path:::
+
--
[verse]
'BASE'/'HOSTNAME'/'TRACEPATH'
--

Tracing session grouping (with option:--group-output-by-session)::
    Without a custom trace path:::
        The peer's LTTng session daemon version is at least 2.4::::
+
--
[verse]
'BASE'/'SESSION'/'HOSTNAME'-'DATETIME'
--

Otherwise::::
    Defaults to the hostname grouping pattern:
+
--
[verse]
'BASE'/'HOSTNAME'/'SESSION'-'DATETIME'
--

With a custom trace path:::
    The peer's LTTng session daemon version is at least 2.4::::
+
--
[verse]
'BASE'/'SESSION'/'HOSTNAME'-'DATETIME'/'TRACEPATH'
--

Otherwise::::
    Defaults to the hostname grouping pattern:
+
--
[verse]
'BASE'/'HOSTNAME'/'TRACEPATH'
--


[[url-format]]
URL format
~~~~~~~~~~
The option:--control-port, option:--data-port, and option:--live-port
options specify URLs.

The format of those URLs is:

[verse]
tcp://('HOST' | 'IPADDR'):__PORT__

with:

('HOST' | 'IPADDR')::
    Binding hostname or IP address (IPv6 address *must* be enclosed in
    brackets (`[` and `]`); see
    https://www.ietf.org/rfc/rfc2732.txt[RFC 2732]).

'PORT'::
    TCP port.


OPTIONS
-------
Daemon
~~~~~~
option:-b, option:--background::
    Start as Unix daemon, but keep file descriptors (console) open.
    Use the option:--daemonize option instead to close the file
    descriptors.

option:-f 'PATH', option:--config='PATH'::
    Load relay daemon configuration from path 'PATH'.

option:-d, option:--daemonize::
    Start as Unix daemon, and close file descriptors (console). Use the
    option:--background option instead to keep the file descriptors
    open.

option:-x, option:--disallow-clear::
    Disallow clearing operations (see man:lttng-clear(1)).
+
See also the `LTTNG_RELAYD_DISALLOW_CLEAR` environment variable.

option:--fd-pool-size='SIZE'::
    Set the size of the file descriptor pool to 'SIZE'.
+
'SIZE' is the maximum number of file descriptors that may be kept opened
simultaneously by the relay daemon.
+
Default: the soft `RLIMIT_NOFILE` resource limit of the process (see
man:getrlimit(2)).

option:-g 'GROUP', option:--group='GROUP'::
    Use 'GROUP' as Unix tracing group (default: `tracing`).

option:-w 'PATH', option:--working-directory='PATH'::
    Set the working directory of the processes the relay daemon creates
    to 'PATH'.
+
See also the `LTTNG_RELAYD_WORKING_DIRECTORY` environment variable.

option:-v, option:--verbose::
    Increase verbosity.
+
Three levels of verbosity are available, which are triggered by
appending additional `v` letters to the option
(that is, `-vv` and `-vvv`).


Output
~~~~~~
See the <<output-directory,Output directory>> section above for more
information.

option:-p, option:--group-output-by-host::
    Group the written trace directories by hostname (default).

option:-s, option:--group-output-by-session::
    Group the written trace directories by tracing session name instead
    of by hostname.

option:-o 'PATH', option:--output='PATH'::
    Set the base output directory of the written trace directories to
    'PATH'.


Ports
~~~~~
See the <<url-format,URL format>> section above for more information
about the syntax of the following 'URL' argument.

option:-C 'URL', option:--control-port='URL'::
    Listen to control data on URL 'URL' (default:
    +tcp://{default_network_control_bind_address}:{default_network_control_port}+).

option:-D 'URL', option:--data-port='URL'::
    Listen to trace data on URL 'URL' (default:
    +tcp://{default_network_data_bind_address}:{default_network_data_port}+).

option:-L 'URL', option:--live-port='URL'::
    Listen to LTTng live connections on URL 'URL'
    (default:
    +tcp://{default_network_viewer_bind_address}:{default_network_viewer_port}+).


Program information
~~~~~~~~~~~~~~~~~~~
option:-h, option:--help::
    Show help.

option:-V, option:--version::
    Show version.


ENVIRONMENT VARIABLES
---------------------
`LTTNG_ABORT_ON_ERROR`::
    Set to 1 to abort the process after the first error is encountered.

`LTTNG_NETWORK_SOCKET_TIMEOUT`::
    Socket connection, receive and send timeout (milliseconds). A value
    of 0 or -1 uses the timeout of the operating system (default).

`LTTNG_RELAYD_DISALLOW_CLEAR`::
    Set to 1 to disallow clearing operations (see man:lttng-clear(1)).
+
The option:--disallow-clear option overrides this variable.

`LTTNG_RELAYD_HEALTH`::
    Path to relay daemon health's socket.

`LTTNG_RELAYD_TCP_KEEP_ALIVE`::
    Set to 1 to enable TCP keep-alive.
+
The TCP keep-alive mechanism allows the detection of dead peers
(man:lttng-sessiond(8)) in cases of unclean termination
(for example, a hard reset) of a peer.
+
Supported on Linux and Solaris only. The default behaviour of the TCP
keep-alive mechanism is OS-specific.
+
Search for `tcp_keepalive` in man:tcp(7) for more information.

`LTTNG_RELAYD_TCP_KEEP_ALIVE_ABORT_THRESHOLD`::
   The time threshold in seconds to abort a TCP connection after the keep-alive
   probing mechanism has failed.
+
Set to 0 or -1 to use the value chosen by the operating system (default).
+
Supported on Solaris 11 only.
+
Search for `tcp_keepalive_abort_threshold` in man:tcp(7) for more information.

`LTTNG_RELAYD_TCP_KEEP_ALIVE_IDLE_TIME`::
    Number of seconds a connection needs to be idle before TCP begins
    sending out keep-alive probes.
+
Set to 0 or -1 to use the value chosen by the operating system (default).
+
Supported on Linux and Solaris 11 only.
+
On Solaris{nbsp}11, the accepted values are -1, 0, and 10 to 864000.
+
Search for `tcp_keepalive_time` and `tcp_keepalive_interval`
in man:tcp(7) on Solaris 11 for more information.

`LTTNG_RELAYD_TCP_KEEP_ALIVE_MAX_PROBE_COUNT`::
    Maximum number of TCP keep-alive probes to send before giving up and
    killing the connection if no response is obtained from the other end.
+
Set to 0 or -1 to use the value chosen by the operating system (default).
+
Supported on Linux only.
+
Search for `tcp_keepalive_probes` in man:tcp(7) for more information.

`LTTNG_RELAYD_TCP_KEEP_ALIVE_PROBE_INTERVAL`::
    Number of seconds between TCP keep-alive probes.
+
Set to 0 or -1 to use the value chosen by the operating system (default).
+
Supported on Linux only.
+
Search for `tcp_keepalive_intvl` in man:tcp(7) for more information.

`LTTNG_RELAYD_WORKING_DIRECTORY`::
    Working directory of the processes the relay daemon creates.
+
The option:--working-directory option overrides this variable.


FILES
-----
`$LTTNG_HOME/.lttng`::
    User LTTng runtime and configuration directory.

`$LTTNG_HOME/lttng-traces`::
    Default base output directory of LTTng traces. This can be
    overridden with the option:--output option.

NOTE: `$LTTNG_HOME` defaults to `$HOME` when not explicitly set.


EXIT STATUS
-----------
*0*::
    Success

*1*::
    Error

*3*::
    Fatal error


LIMITATIONS
-----------
As of this version, only the TCP protocol is supported for both control
and data ports. In future versions, TCP will remain the sole available
protocol for control data since those communications are low-volume and
need absolute reliability; trace data could be carried over UDP.

For an unprivileged user running `lttng-relayd`, the maximum number of
file descriptors per process is usually 1024. This limits the number of
connections and opened trace files. This limit can be configured with
*ulimit*(3).


include::common-footer.txt[]


SEE ALSO
--------
man:lttng(1),
man:lttng-sessiond(8),
man:lttng-crash(1),
man:lttng-ust(3),
man:babeltrace2(1)
