[ 
https://issues.apache.org/jira/browse/PHOENIX-3655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16474802#comment-16474802
 ] 

Karan Mehta commented on PHOENIX-3655:
--------------------------------------

[~elserj] [~apurtell] [~tdsilva] [~xucang]

I digged into the metrics stuff further (hbase-metrics). All the metrics are 
implemented in the following manner
 # Create a public interface that extends {{BaseSource}} class. This is where 
all the metrics name, its meta data information is stored and methods are 
provided as to how those will get updated.
 # Create a public class that extends {{BaseSourceImpl}} class and implements 
the interface created in step 1. This makes a call to {{super()}} in its 
constructor. Inside {{BaseSourceImpl}}, {{MetricRegistryInfo}} is created based 
on the parameters provided. This object is used to register itself with 
{{MetricRegistries}}, using the call to {{MetricRegistries.global().create()}} 
method. An adapter is created {{HBaseMetrics2HadoopMetricsAdapter}} which takes 
care of converting any type of metric (hbase-metric) to the hadoop2-metric 
whenever its {{snapshotAllMetrics()}} method is called. The default sampling 
rate for hadoop2-metrics is 10 seconds, so essentially these gets called every 
10 seconds and metrics are pushed to JMX.

An example class in Phoenix is {{MetricsIndexerSourceImpl}} tracking the 
indexer metrics. [~elserj] I would like to know, why did you chose to use 
{{getMetricsRegistry()}} to get an instance of {{DynamicMetricsRegistry}}? This 
is supposed to be deprecated, right? Do you want to move towards 
{{MetricRegistry}} provided by HBase? 

Also, Pinging [~enis] [~eclark] [~alexb] To check if the understanding is 
correct. I will propose my solution ideas soon.

> Metrics for PQS
> ---------------
>
>                 Key: PHOENIX-3655
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3655
>             Project: Phoenix
>          Issue Type: New Feature
>    Affects Versions: 4.8.0
>         Environment: Linux 3.13.0-107-generic kernel, v4.9.0-HBase-0.98
>            Reporter: Rahul Shrivastava
>            Assignee: Karan Mehta
>            Priority: Major
>             Fix For: 4.15.0
>
>         Attachments: MetricsforPhoenixQueryServerPQS.pdf
>
>   Original Estimate: 240h
>  Remaining Estimate: 240h
>
> Phoenix Query Server runs a separate process compared to its thin client. 
> Metrics collection is currently done by PhoenixRuntime.java i.e. at Phoenix 
> driver level. We need the following
> 1. For every jdbc statement/prepared statement/ run by PQS , we need 
> capability to collect metrics at PQS level and push the data to external sink 
> i.e. file, JMX , other external custom sources. 
> 2. Besides this global metrics could be periodically collected and pushed to 
> the sink. 
> 2. PQS can be configured to turn on metrics collection and type of collect ( 
> runtime or global) via hbase-site.xml
> 3. Sink could be configured via an interface in hbase-site.xml. 
> All metrics definition https://phoenix.apache.org/metrics.html



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to