注意
本文档适用于 Ceph 的开发版本。
使用 LTTng 跟踪 Ceph
使用 LTTng 配置 Ceph
如果您编译代码,请使用 -DWITH_LTTNG 选项(默认值:ON)
./do_cmake -DWITH_LTTNG=ON
如果您的 Ceph 部署是基于软件包(YUM、DNF、APT)而不是容器化的,请根据您想要跟踪的模块安装所需的软件包,否则,可能会因为缺少 *tp.solibrary 文件而导致核心转储
librbd-devel
librgw-devel
librados-devel
必须在 ceph.conf 中将跟踪的配置选项设置为 true。目前可用的选项如下
bluestore_tracing
event_tracing (-DWITH_EVENTTRACE)
osd_function_tracing (-DWITH_OSD_INSTRUMENT_FUNCTIONS)
osd_objectstore_tracing (actually filestore tracing)
rbd_tracing
osd_tracing
rados_tracing
rgw_op_tracing
rgw_rados_tracing
测试跟踪
启动 LTTng 守护程序
lttng-sessiond --daemonize
运行 vstart 集群并启用跟踪选项
../src/vstart.sh -d -n -l -e -o "osd_tracing = true"
列出可用的跟踪点
lttng list --userspace
您将得到类似如下的结果
UST events:
-------------
PID: 100859 - Name: /path/to/ceph-osd
pg:queue_op (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
osd:do_osd_op_post (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
osd:do_osd_op_pre_unknown (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
osd:do_osd_op_pre_copy_from (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
osd:do_osd_op_pre_copy_get (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
...
创建跟踪会话,启用跟踪点并开始跟踪
lttng create trace-test
lttng enable-event --userspace osd:*
lttng start
执行一些 Ceph 操作
rados bench -p ec 5 write
停止跟踪并查看结果
lttng stop
lttng view
销毁跟踪会话
lttng destroy
使用 Blkin 跟踪 Ceph
此版本已弃用: 此功能已在 Squid 版本中弃用,并将在后续版本中移除。
Ceph 可以使用由 Marios Kogias 等人创建的 Blkin 库,该库能够跟踪一个特定的请求,从它在高层进入系统开始,直到最终由 RADOS 提供服务为止。
总的来说,Blkin 实现了 Dapper 跟踪语义,以显示 IO 请求可能触发的不同处理阶段之间的因果关系。目标是实现请求在系统中的路由的端到端可视化,并附带每个处理阶段的延迟信息。得益于 LTTng,这可以以最小的开销实时发生。然后可以使用 Twitter 的 Zipkin 对 LTTng 跟踪进行可视化。
使用 Blkin 配置 Ceph
使用 -DWITH_BLKIN 选项(需要 -DWITH_LTTNG)
./do_cmake -DWITH_LTTNG=ON -DWITH_BLKIN=ON
必须在 ceph.conf 中将 blkin 的配置选项设置为 true。目前可用的选项如下
rbd_blkin_trace_all
osd_blkin_trace_all
osdc_blkin_trace_all
测试 Blkin
测试 Ceph 的 Blkin 跟踪很容易。假设您还没有运行 Ceph,并且您编译了具有 Blkin 支持的 Ceph,但没有安装它。然后在 Ceph 的 src 目录中使用 vstart.sh 脚本启动 Ceph,以便您可以看到可能的跟踪点。
OSD=3 MON=3 RGW=1 ../src/vstart.sh -n -o "rbd_blkin_trace_all"
lttng list --userspace
您将看到类似如下的内容:
UST events:
-------------
PID: 8987 - Name: ./ceph-osd
zipkin:timestamp (loglevel: TRACE_WARNING (4)) (type: tracepoint)
zipkin:keyval_integer (loglevel: TRACE_WARNING (4)) (type: tracepoint)
zipkin:keyval_string (loglevel: TRACE_WARNING (4)) (type: tracepoint)
lttng_ust_tracelog:TRACE_DEBUG (loglevel: TRACE_DEBUG (14)) (type: tracepoint)
PID: 8407 - Name: ./ceph-mon
zipkin:timestamp (loglevel: TRACE_WARNING (4)) (type: tracepoint)
zipkin:keyval_integer (loglevel: TRACE_WARNING (4)) (type: tracepoint)
zipkin:keyval_string (loglevel: TRACE_WARNING (4)) (type: tracepoint)
lttng_ust_tracelog:TRACE_DEBUG (loglevel: TRACE_DEBUG (14)) (type: tracepoint)
...
接下来,停止 Ceph,以便可以启用跟踪点。
../src/stop.sh
启动 LTTng 会话并启用跟踪点。
lttng create blkin-test
lttng enable-event --userspace zipkin:timestamp
lttng enable-event --userspace zipkin:keyval_integer
lttng enable-event --userspace zipkin:keyval_string
lttng start
然后再次启动 Ceph。
OSD=3 MON=3 RGW=1 ../src/vstart.sh -n -o "rbd_blkin_trace_all"
您可能需要检查 ceph 是否已启动。
ceph status
现在使用 rados 放入一些东西,检查它是否成功,取回它,然后删除它。
ceph osd pool create test-blkin
rados put test-object-1 ../src/vstart.sh --pool=test-blkin
rados -p test-blkin ls
ceph osd map test-blkin test-object-1
rados get test-object-1 ./vstart-copy.sh --pool=test-blkin
md5sum vstart*
rados rm test-object-1 --pool=test-blkin
您也可以使用 examples/librados/ 中的示例或 rados bench。
然后停止 LTTng 会话并查看收集到的内容。
lttng stop
lttng view
您将看到类似如下的内容:
[15:33:08.884275486] (+0.000225472) ubuntu zipkin:timestamp: { cpu_id = 53 }, { trace_name = "op", service_name = "Objecter", port_no = 0, ip = "0.0.0.0", trace_id = 5485970765435202833, span_id = 5485970765435202833, parent_span_id = 0, event = "osd op reply" }
[15:33:08.884614135] (+0.000002839) ubuntu zipkin:keyval_integer: { cpu_id = 10 }, { trace_name = "", service_name = "Messenger", port_no = 6805, ip = "0.0.0.0", trace_id = 7381732770245808782, span_id = 7387710183742669839, parent_span_id = 1205040135881905799, key = "tid", val = 2 }
[15:33:08.884616431] (+0.000002296) ubuntu zipkin:keyval_string: { cpu_id = 10 }, { trace_name = "", service_name = "Messenger", port_no = 6805, ip = "0.0.0.0", trace_id = 7381732770245808782, span_id = 7387710183742669839, parent_span_id = 1205040135881905799, key = "entity type", val = "client" }
安装 Zipkin
使用 Blkin 的目的之一是您可以使用 Zipkin 查看跟踪。用户应该将 Zipkin 作为跟踪点收集器和 Web 服务运行。可执行 jar 在端口 9410 上运行收集器,在端口 9411 上运行 Web 界面
下载 Zipkin 软件包
git clone https://github.com/openzipkin/zipkin && cd zipkin
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
java -jar zipkin.jar
或者,启动 docker 镜像
docker run -d -p 9411:9411 openzipkin/Zipkin
在 Zipkin-web 中显示 Ceph 的 Blkin 跟踪
下载 babeltrace-zipkin 项目。该项目获取使用 blkin 生成的跟踪,并通过 scribe 将它们发送到 Zipkin 收集器
git clone https://github.com/vears91/babeltrace-zipkin
cd babeltrace-zipkin
将 lttng 数据发送到 Zipkin
python3 babeltrace_zipkin.py ${lttng-traces-dir}/${blkin-test}/ust/uid/0/64-bit/ -p ${zipkin-collector-port(9410 by default)} -s ${zipkin-collector-ip}
示例
python3 babeltrace_zipkin.py ~/lttng-traces-dir/blkin-test-20150225-160222/ust/uid/0/64-bit/ -p 9410 -s 127.0.0.1
在网页上检查 Ceph 跟踪
Browse http://${zipkin-collector-ip}:9411
Click "Find traces"