在使用lttng命令行工具之前,需要先有一个session daemon。
每一个user,都可以有一个自己的session daemon。但是对内核进行trace,必须要root的session daemon。
大多数情况,因为创建record session的指令lttng create
会隐式创建一个session daemon。所以本指令不需要执行。也就是说第一步都去执行lttng create
了。
指令:
lttng-sessiond --daemonize
--daemonize
是指在后台守护进程运行,不加就是在终端内运行。
recording session是处在用户和session daemon中间的中介。
默认指令:
lttng create
The name of the created recording session is auto followed by the creation date.
trace数据在$LTTNG_HOME/lttng-traces/NAME-DATE-TIME 下。
指定名称和路径:
lttng create my-session --output=/tmp/some-directory
建立之后,会把新建的record session当做当前record session。运用lttng命令行不指定record session会默认和当前record session交互。
To list all the existing recording sessions for your Unix user, or for all users if your Unix user is root:
lttng list
关闭record session,写入trace数据:
lttng destroy
lttng destory 隐式包含lttng stop。
可以列出正在运行的可观测用户程序和内核可用观测点。
lttng list
加上各种参数:
lttng list --kernel
--kernel --syscall
--userspace
---------------------
java python的先不写了
ER说的很玄乎,但是实际上看起来,就是使能哪些观测点,加上一些类似正则表达式的过滤规则(如果要搞得这么复杂的话)。
Event rule(ER)是 attach到channel上的是。channel是包含在record session里的。
第一次使用lttng enable event
,如果没有channel,会自动新建一个default channel
。就是channel0
。然后操作都是针对这个默认channel来的。
A recording event rule is always enabled at creation time.
使用举例:
lttng enable-event --kernel sched_switch
lttng enable-event --kernel --syscall open,write,read,close
lttng enable-event --kernel sched_switch --filter='prev_comm == "bash"'
lttng enable-event --kernel --all \
--filter='$ctx.tid == 1988 || $ctx.tid == 1534'
lttng enable-event --jul my_logger \
--filter='$app.retriever:cur_msg_id > 3'
lttng enable-event --userspace my_app:'*' --loglevel=INFO
lttng enable-event --userspace my_app:'*' \
--exclude=my_app:set_user,my_app:handle_sig
lttng enable-event --userspace my_app:my_tracepoint \
--channel=my-channel
lttng enable-event --kernel \
--userspace-probe=/usr/lib/libc.so.6:malloc \
libc_malloc
lttng enable-event --kernel \
--userspace-probe=sdt:serv:server:accept_request \
server_accept_request
所有ER最后形成一份事件白名单,如果多条ER形容的是同一个结果,这个event也只产生一次。
Disable a recording event rule:
lttng-disable-event(1) can only find recording event rules to disable by their instrumentation point type and event name conditions.
lttng disable-event --kernel --channel=my-chan --all-events
lttng disable-event --python my-logger
当前session状态:
lttng status
别的session状态:
lttng list SESSION名
Once you create a recording session and create one or more recording event rules, you can start and stop the tracers for this recording session.
针对当前record session:
lttng start
lttng stop
如果有event丢失或者sub buffer丢失,stop的时候会打印warnning。
stop会写trace数据让数据可读。
lttng destory隐式包含stop。
clear 就是在不中断lttng记录活动的同时删除记录数据。
当前 record session:
lttng clear
全部:
lttng clear --all
Note that LTTng can automatically create a default channel when you create a recording event rule. Therefore, you only need to create a channel when you need non-default attributes.
只在有必要使用非默认channel属性的时候有必要设置:
--------------------------------------------------------------------
lttng enable-channel --userspace --num-subbuf=4 --subbuf-size=1M \
--buffers-pid my-channel
--------------------------------------------------------------------
lttng create
lttng enable-channel --userspace --blocking-timeout=inf blocking-chan
lttng enable-event --userspace --channel=blocking-chan --all
lttng start
LTTNG_UST_ALLOW_BLOCKING=1 my-app
--------------------------------------------------------------------
lttng enable-channel --kernel --tracefile-count=8 \
--tracefile-size=4194304 my-channel
--------------------------------------------------------------------
lttng enable-channel --userspace --overwrite my-channel
--------------------------------------------------------------------
一个ER附在多个channel上 可以被记录多次
lttng enable-event --userspace --channel=my-channel app:tp
lttng enable-event --userspace --channel=other-channel app:tp
--------------------------------------------------------------------
禁用通道
lttng disable-channel --kernel my-channel