Phoenix 4.1.0开始,我们已经添加了收集每个请求跟踪的功能。这允许您查看查询或插入中的每个重要步骤,所有这些步骤都从客户端一直到HBase端,然后再返回。
我们利用Cloudera的HTrace库与HBase的tracing工具无缝集成。然后我们更进一步,将这些指标存储到Hadoop metrics2接收器中,并将其写入phoenix表。
在Hadoop1中不支持将traces写到phoenix表。
配置
您需要更新两个关键的配置文件。
- hadoop-metrics2-phoenix.properties
- hadoop-metrics2-hbase.properties
它们分别包含你需要在客户机和服务器上设置的属性,以及关于metrics2系统如何使用配置文件的信息。
将这些文件放到它们各自的类路径中,并重新启动进程以获取新的配置。
hadoop-metrics2-phoenix.properties
该文件将为Phoenix客户端配置Hadoop Metrics2系统。
你应该设置的默认属性是:
# Sample from all the sources every 10 seconds
*.period=10
# Write Traces to Phoenix
##########################
# ensure that we receive traces on the server
phoenix.sink.tracing.class=org.apache.phoenix.trace.PhoenixMetricsSink
# Tell the sink where to write the metrics
phoenix.sink.tracing.writer-class=org.apache.phoenix.trace.PhoenixTableMetricsWriter
# Only handle traces with a context of "tracing"
phoenix.sink.tracing.context=tracing
这将启用标准的Phoenix metrics sink(用于收集跟踪信息)和writer(将跟踪写入Phoenix系统)。TRACING_STATS表)。如果您有自定义类,您也可以修改它来设置您自己的自定义类。
请参阅源代码中的属性文件(phoenix-hadop2-compat/bin)以获得关于设置您自己的sinks和写入器的更多信息。
hadoop-metrics2-hbase.properties
HBase默认部署已经附带了metrics2配置,因此phoenix的metrics2配置可以替换现有文件(如果没有任何特殊配置),或者可以将属性复制到现有的metrics2配置文件中。
# ensure that we receive traces on the server
hbase.sink.tracing.class=org.apache.phoenix.trace.PhoenixMetricsSink
# Tell the sink where to write the metrics
hbase.sink.tracing.writer-class=org.apache.phoenix.trace.PhoenixTableMetricsWriter
# Only handle traces with a context of "tracing"
hbase.sink.tracing.context=tracing
它们本质上与hadoop-metrics2-phoenix.properties相同。属性的前缀是“hbase”而不是“phoenix”,因此它们加载了其余的hbase指标。
关闭tracing
你可以仅通过创建一个未启用跟踪属性的新连接来禁用跟踪客户端请求(请参阅下面的内容)。
但是,在服务器端,一旦启用了指标接收器,您就不能进行跟踪收集和写入,除非您删除Phoenix metrics2配置并弹回regionserver。这是由metrics2框架强制执行的,因为它假定你总是希望收集关于你所运行的服务器的信息。
用法
客户端属性
跟踪的频率由以下客户端Phoenix属性决定:
phoenix.trace.frequency
有三种可能的跟踪频率,您可以使用:
- never:默认选项
- always:每个请求都将跟踪
- probability:以概率频率进行跟踪,率阈值由phoenix.trace.probability设置。阈值,默认值为0.05(5%)。
与其他配置属性一样,可以在JDBC连接时将此属性指定为连接属性。通过打开这些属性之一,您就可以打开仅收集跟踪的功能。然而,这些痕迹需要存放在某处
例子:
# Enable tracing on every request
Properties props = new Properties();
props.setProperty("phoenix.trace.frequency", "always");
Connection conn = DriverManager.getConnection("jdbc:phoenix:localhost", props);
# Enable tracing on 50% of requests
props.setProperty("phoenix.trace.frequency", "probability");
props.setProperty("phoenix.trace.probability.threshold", 0.5)
Connection conn = DriverManager.getConnection("jdbc:phoenix:localhost", props);
hbase-site.xml
还可以通过hbase-site.xml启用跟踪。但是,目前只支持“always”和"never”。
<configuration>
<property>
<name>phoenix.trace.frequency</name>
<value>always</value>
</property>
</configuration>
读取Traces
默认情况下,跟踪被存入跟踪表TRACING_STATS,但它是可配置的HBase配置通过:
<property>
<name>phoenix.trace.statsTableName</name>
<value><your custom tracing table name></value>
</property>
通过ddl初始化跟踪表:
CREATE TABLE SYSTEM.TRACING_STATS (
trace_id BIGINT NOT NULL,
parent_id BIGINT NOT NULL,
span_id BIGINT NOT NULL,
description VARCHAR,
start_time BIGINT,
end_time BIGINT,
hostname VARCHAR,
tags.count SMALLINT,
annotations.count SMALLINT,
CONSTRAINT pk PRIMARY KEY (trace_id, parent_id, span_id)
)
跟踪表还包含许多针对每个跟踪的动态列,这些列由惟一的跟踪id(请求的id)、父id(父span的id)和个别的span-id(个别段的id)标识,其中可能有关于跟踪期间发生的事情的多个标记和注释。一旦你有标签和注释的数量,你可以检索他们与一个请求表:
SELECT <columns>
FROM SYSTEM.TRACING_STATS
WHERE trace_id = ?
AND parent_id = ?
ANd span_id = ?
其中列是annotations.aX或tags.tX ,其中X是要查找的动态列的索引。
要了解更多的用法,请查看我们的通用TraceReader,它可以通过编程从跟踪结果表中读取许多跟踪。
自定义注解也可以传递到Phoenix中,以添加到跟踪中。Phoenix查找名称以Phoenix .annotation开头的连接属性。并将这些作为注释添加到客户端跟踪。连接属性phoenix.annotation.myannotation=abc将导致在跟踪中添加键myannotation和值abc的注释。使用此特性将跟踪链接到系统中的其他请求标识符,如用户或会话id。
Phoenix Tracing WEB工具
如何启动
- 如上所示,为Apache Phoenix启用跟踪
- 启动web 应用 ./bin/traceserver.py start
- 打开对应地址 http://localhost:8864/webapp/
- 关闭web应用 ./bin/traceserver.py stop
特性列表
Apache Phoenix的跟踪web应用程序包含特性列表、依赖树、跟踪计数、跟踪分布和时间轴。
特性列表
近的痕迹被列了下来。在文本框中输入的限制值用于确定显示的跟踪计数。对于每个跟踪,都有一个链接来查看依赖项树或时间轴。
依赖树
依赖项树在树视图中查看属于跟踪id的跟踪。跟踪id是系统的输入。可以清楚地查看跟踪的父-子关系。工具提示给出主机名、父id、span id、开始时间、结束时间、描述和持续时间。每个节点都是可折叠和可扩展的。对于树的每个绘图都会查看SQL查询。Clear用于清除视图中的树。
跟踪计数
跟踪列表根据描述进行分类。跟踪计数图可以看作饼状图、折线图、条形图和区域图。图表更改选项是可折叠的,可以隐藏。
跟踪分布
跟踪分布图显示了在phoenix主机上运行的跟踪。使用的图表有饼状图、折线图、柱状图和面积图。图表更改选项是可折叠的,可以隐藏。
时间轴
可以沿着给定跟踪id的时间轴查看跟踪。可以从时间轴添加或清除跟踪。为了让系统画出它的时间轴,从两个不同的时间开始应该至少有两个跟踪。该特性帮助用户轻松地比较跟踪之间和同一跟踪内的执行时间。