注意

本文档适用于 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"

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入