Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
killuaz丶x
SkyWalking
提交
7a20c260
S
SkyWalking
项目概览
killuaz丶x
/
SkyWalking
与 Fork 源项目一致
Fork自
apache / SkyWalking
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
7a20c260
编写于
8月 05, 2020
作者:
于
于玉桔
提交者:
GitHub
8月 05, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add HBase hbase-client plugin (#5225)
上级
89f314c8
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
838 addition
and
1 deletion
+838
-1
.github/workflows/plugins-test.3.yaml
.github/workflows/plugins-test.3.yaml
+1
-0
apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java
...walking/apm/network/trace/component/ComponentsDefine.java
+2
-0
apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/InstanceConstructorInterceptor.java
...n/interceptor/enhance/InstanceConstructorInterceptor.java
+1
-1
apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/util/CollectionUtil.java
...apache/skywalking/apm/agent/core/util/CollectionUtil.java
+6
-0
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/pom.xml
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/pom.xml
+47
-0
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hbase/HTableInterceptor.java
...apache/skywalking/apm/plugin/hbase/HTableInterceptor.java
+122
-0
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hbase/define/HTableInstrumentation.java
...alking/apm/plugin/hbase/define/HTableInstrumentation.java
+101
-0
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/src/main/resources/skywalking-plugin.def
...hbase-1.x-plugin/src/main/resources/skywalking-plugin.def
+17
-0
apm-sniffer/apm-sdk-plugin/pom.xml
apm-sniffer/apm-sdk-plugin/pom.xml
+1
-0
docs/en/setup/service-agent/java-agent/Supported-list.md
docs/en/setup/service-agent/java-agent/Supported-list.md
+2
-0
oap-server/server-bootstrap/src/main/resources/component-libraries.yml
...rver-bootstrap/src/main/resources/component-libraries.yml
+3
-0
test/plugin/scenarios/hbase-scenario/bin/startup.sh
test/plugin/scenarios/hbase-scenario/bin/startup.sh
+21
-0
test/plugin/scenarios/hbase-scenario/config/expectedData.yaml
.../plugin/scenarios/hbase-scenario/config/expectedData.yaml
+96
-0
test/plugin/scenarios/hbase-scenario/configuration.yml
test/plugin/scenarios/hbase-scenario/configuration.yml
+31
-0
test/plugin/scenarios/hbase-scenario/pom.xml
test/plugin/scenarios/hbase-scenario/pom.xml
+136
-0
test/plugin/scenarios/hbase-scenario/src/main/assembly/assembly.xml
...n/scenarios/hbase-scenario/src/main/assembly/assembly.xml
+41
-0
test/plugin/scenarios/hbase-scenario/src/main/java/org/apache/skywalking/apm/testcase/hbase/Application.java
...org/apache/skywalking/apm/testcase/hbase/Application.java
+34
-0
test/plugin/scenarios/hbase-scenario/src/main/java/org/apache/skywalking/apm/testcase/hbase/controller/HBaseController.java
...alking/apm/testcase/hbase/controller/HBaseController.java
+106
-0
test/plugin/scenarios/hbase-scenario/src/main/resources/application.properties
.../hbase-scenario/src/main/resources/application.properties
+19
-0
test/plugin/scenarios/hbase-scenario/src/main/resources/log4j2.xml
...in/scenarios/hbase-scenario/src/main/resources/log4j2.xml
+30
-0
test/plugin/scenarios/hbase-scenario/support-version.list
test/plugin/scenarios/hbase-scenario/support-version.list
+21
-0
未找到文件。
.github/workflows/plugins-test.3.yaml
浏览文件 @
7a20c260
...
...
@@ -52,6 +52,7 @@ jobs:
-
{
name
:
'
graphql-8.x-scenario'
,
title
:
'
graphql-8.x
8.0
(1)'
}
-
{
name
:
'
graphql-9.x-scenario'
,
title
:
'
graphql-9.x
9.0-11.0
(3)'
}
-
{
name
:
'
graphql-12.x-scenario'
,
title
:
'
graphql-12.x
12.0-15.0
(4)'
}
-
{
name
:
'
hbase-scenario'
,
title
:
'
hbase-scenario
(5)'
}
steps
:
-
uses
:
actions/checkout@v2
with
:
...
...
apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java
浏览文件 @
7a20c260
...
...
@@ -168,4 +168,6 @@ public class ComponentsDefine {
public
static
final
OfficialComponent
GRAPHQL
=
new
OfficialComponent
(
92
,
"GraphQL"
);
public
static
final
OfficialComponent
SPRING_ANNOTATION
=
new
OfficialComponent
(
93
,
"spring-annotation"
);
public
static
final
OfficialComponent
HBASE
=
new
OfficialComponent
(
94
,
"HBase"
);
}
apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/InstanceConstructorInterceptor.java
浏览文件 @
7a20c260
...
...
@@ -27,5 +27,5 @@ public interface InstanceConstructorInterceptor {
/**
* Called after the origin constructor invocation.
*/
void
onConstruct
(
EnhancedInstance
objInst
,
Object
[]
allArguments
);
void
onConstruct
(
EnhancedInstance
objInst
,
Object
[]
allArguments
)
throws
Throwable
;
}
apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/util/CollectionUtil.java
浏览文件 @
7a20c260
...
...
@@ -19,6 +19,7 @@
package
org.apache.skywalking.apm.agent.core.util
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
...
...
@@ -35,4 +36,9 @@ public final class CollectionUtil {
.
map
(
entry
->
entry
.
getKey
()
+
"="
+
Arrays
.
toString
(
entry
.
getValue
()))
.
collect
(
Collectors
.
joining
(
"\n"
));
}
@SuppressWarnings
(
"rawtypes"
)
public
static
boolean
isEmpty
(
Collection
collection
)
{
return
collection
==
null
||
collection
.
isEmpty
();
}
}
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/pom.xml
0 → 100644
浏览文件 @
7a20c260
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
-->
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.apache.skywalking
</groupId>
<artifactId>
apm-sdk-plugin
</artifactId>
<version>
8.2.0-SNAPSHOT
</version>
</parent>
<artifactId>
apm-hbase-1.x-plugin
</artifactId>
<packaging>
jar
</packaging>
<name>
hbase-1.x-plugin
</name>
<properties>
<hbase-client.version>
1.4.9
</hbase-client.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.apache.hbase
</groupId>
<artifactId>
hbase-client
</artifactId>
<version>
${hbase-client.version}
</version>
<scope>
provided
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hbase/HTableInterceptor.java
0 → 100644
浏览文件 @
7a20c260
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package
org.apache.skywalking.apm.plugin.hbase
;
import
org.apache.hadoop.conf.Configuration
;
import
org.apache.hadoop.hbase.client.ClusterConnection
;
import
org.apache.hadoop.hbase.client.HTable
;
import
org.apache.hadoop.hbase.client.OperationWithAttributes
;
import
org.apache.skywalking.apm.agent.core.context.CarrierItem
;
import
org.apache.skywalking.apm.agent.core.context.ContextCarrier
;
import
org.apache.skywalking.apm.agent.core.context.ContextManager
;
import
org.apache.skywalking.apm.agent.core.context.tag.Tags
;
import
org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan
;
import
org.apache.skywalking.apm.agent.core.context.trace.SpanLayer
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult
;
import
org.apache.skywalking.apm.agent.core.util.CollectionUtil
;
import
org.apache.skywalking.apm.network.trace.component.ComponentsDefine
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Properties
;
public
class
HTableInterceptor
implements
InstanceMethodsAroundInterceptor
,
InstanceConstructorInterceptor
{
private
static
final
String
PREFIX_OPERATION_NAME
=
"/HTable/"
;
private
static
final
String
HBASE_DB_TYPE
=
"hbase"
;
@Override
@SuppressWarnings
(
"unchecked, rawtypes"
)
public
void
beforeMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
MethodInterceptResult
result
)
throws
Throwable
{
boolean
canTracingServer
=
false
;
List
<
OperationWithAttributes
>
operations
=
null
;
OperationWithAttributes
operation
=
null
;
if
(
allArguments
!=
null
&&
allArguments
.
length
>
0
)
{
if
(
allArguments
[
0
]
instanceof
List
)
{
List
list
=
(
List
)
allArguments
[
0
];
if
(!
CollectionUtil
.
isEmpty
(
list
)
&&
list
.
get
(
0
)
instanceof
OperationWithAttributes
)
{
operations
=
list
;
canTracingServer
=
true
;
}
}
else
if
(
allArguments
[
0
]
instanceof
OperationWithAttributes
)
{
operation
=
(
OperationWithAttributes
)
allArguments
[
0
];
canTracingServer
=
true
;
}
}
AbstractSpan
span
;
if
(
canTracingServer
)
{
ContextCarrier
contextCarrier
=
new
ContextCarrier
();
span
=
ContextManager
.
createExitSpan
(
PREFIX_OPERATION_NAME
+
method
.
getName
(),
contextCarrier
,
(
String
)
objInst
.
getSkyWalkingDynamicField
());
CarrierItem
next
=
contextCarrier
.
items
();
while
(
next
.
hasNext
())
{
next
=
next
.
next
();
if
(
operation
!=
null
)
{
operation
.
setAttribute
(
next
.
getHeadKey
(),
next
.
getHeadValue
().
getBytes
());
}
else
{
for
(
OperationWithAttributes
o
:
operations
)
{
o
.
setAttribute
(
next
.
getHeadKey
(),
next
.
getHeadValue
().
getBytes
());
}
}
}
}
else
{
span
=
ContextManager
.
createExitSpan
(
PREFIX_OPERATION_NAME
+
method
.
getName
(),
(
String
)
objInst
.
getSkyWalkingDynamicField
());
}
span
.
setComponent
(
ComponentsDefine
.
HBASE
);
Tags
.
DB_TYPE
.
set
(
span
,
HBASE_DB_TYPE
);
Tags
.
DB_INSTANCE
.
set
(
span
,
((
HTable
)
objInst
).
getName
().
getNameAsString
());
SpanLayer
.
asDB
(
span
);
}
@Override
public
Object
afterMethod
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Object
ret
)
throws
Throwable
{
ContextManager
.
stopSpan
();
return
ret
;
}
@Override
public
void
handleMethodException
(
EnhancedInstance
objInst
,
Method
method
,
Object
[]
allArguments
,
Class
<?>[]
argumentsTypes
,
Throwable
t
)
{
AbstractSpan
span
=
ContextManager
.
activeSpan
();
span
.
errorOccurred
();
span
.
log
(
t
);
}
@Override
@SuppressWarnings
(
"rawtypes"
)
public
void
onConstruct
(
EnhancedInstance
objInst
,
Object
[]
allArguments
)
throws
Throwable
{
Configuration
connection
=
((
ClusterConnection
)
allArguments
[
1
]).
getConfiguration
();
Field
field
=
connection
.
getClass
().
getDeclaredField
(
"overlay"
);
field
.
setAccessible
(
true
);
Properties
properties
=
(
Properties
)
field
.
get
(
connection
);
for
(
Map
.
Entry
entry
:
properties
.
entrySet
())
{
if
(
"hbase.zookeeper.quorum"
.
equals
(
entry
.
getKey
()))
{
objInst
.
setSkyWalkingDynamicField
(
entry
.
getValue
().
toString
());
}
}
}
}
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/hbase/define/HTableInstrumentation.java
0 → 100644
浏览文件 @
7a20c260
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package
org.apache.skywalking.apm.plugin.hbase.define
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.matcher.ElementMatcher
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint
;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine
;
import
org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch
;
import
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
isPublic
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
named
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
takesArgument
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
takesArguments
;
public
class
HTableInstrumentation
extends
ClassInstanceMethodsEnhancePluginDefine
{
private
static
final
String
ENHANCE_CLASS
=
"org.apache.hadoop.hbase.client.HTable"
;
private
static
final
String
INTERCEPT_CLASS
=
"org.apache.skywalking.apm.plugin.hbase.HTableInterceptor"
;
@Override
protected
ClassMatch
enhanceClass
()
{
return
NameMatch
.
byName
(
ENHANCE_CLASS
);
}
@Override
public
ConstructorInterceptPoint
[]
getConstructorsInterceptPoints
()
{
return
new
ConstructorInterceptPoint
[]{
new
ConstructorInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getConstructorMatcher
()
{
return
takesArguments
(
6
);
}
@Override
public
String
getConstructorInterceptor
()
{
return
INTERCEPT_CLASS
;
}
}
};
}
@Override
public
InstanceMethodsInterceptPoint
[]
getInstanceMethodsInterceptPoints
()
{
return
new
InstanceMethodsInterceptPoint
[]{
new
InstanceMethodsInterceptPoint
()
{
@Override
public
ElementMatcher
<
MethodDescription
>
getMethodsMatcher
()
{
return
named
(
"delete"
).
or
(
named
(
"put"
)).
or
(
isPublic
().
and
(
named
(
"get"
)))
.
or
(
named
(
"getScanner"
).
and
(
takesArguments
(
1
))
.
and
(
takesArgument
(
0
,
named
(
"org.apache.hadoop.hbase.client.Scan"
))));
}
@Override
()
public
String
getMethodsInterceptor
()
{
return
INTERCEPT_CLASS
;
}
@Override
public
boolean
isOverrideArgs
()
{
return
false
;
}
}
};
}
}
apm-sniffer/apm-sdk-plugin/hbase-1.x-plugin/src/main/resources/skywalking-plugin.def
0 → 100644
浏览文件 @
7a20c260
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hbase-1.x=org.apache.skywalking.apm.plugin.hbase.define.HTableInstrumentation
\ No newline at end of file
apm-sniffer/apm-sdk-plugin/pom.xml
浏览文件 @
7a20c260
...
...
@@ -94,6 +94,7 @@
<module>
mariadb-2.x-plugin
</module>
<module>
influxdb-2.x-plugin
</module>
<module>
baidu-brpc-plugin
</module>
<module>
hbase-1.x-plugin
</module>
<module>
graphql-plugin
</module>
</modules>
<packaging>
pom
</packaging>
...
...
docs/en/setup/service-agent/java-agent/Supported-list.md
浏览文件 @
7a20c260
...
...
@@ -70,6 +70,8 @@
*
[
SolrJ
](
https://github.com/apache/lucene-solr/tree/master/solr/solrj
)
7.x
*
[
Cassandra
](
https://github.com/apache/cassandra
)
3.x
*
[
cassandra-java-driver
](
https://github.com/datastax/java-driver
)
3.7.0-3.7.2
*
HBase
*
[
hbase-client
](
https://github.com/apache/hbase
)
HTable 1.x
*
Service Discovery
*
[
Netflix Eureka
](
https://github.com/Netflix/eureka
)
*
Distributed Coordination
...
...
oap-server/server-bootstrap/src/main/resources/component-libraries.yml
浏览文件 @
7a20c260
...
...
@@ -311,6 +311,9 @@ GraphQL:
spring-annotation
:
id
:
93
languages
:
Java
HBase
:
id
:
94
languages
:
Java
# .NET/.NET Core components
# [3000, 4000) for C#/.NET only
...
...
test/plugin/scenarios/hbase-scenario/bin/startup.sh
0 → 100644
浏览文件 @
7a20c260
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
home
=
"
$(
cd
"
$(
dirname
$0
)
"
;
pwd
)
"
java
-Dhbase
.host
=
${
HBASE_SERVERS
}
-jar
${
agent_opts
}
${
home
}
/../libs/hbase-scenario.jar &
\ No newline at end of file
test/plugin/scenarios/hbase-scenario/config/expectedData.yaml
0 → 100644
浏览文件 @
7a20c260
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
segmentItems
:
-
serviceName
:
hbase-scenario
segmentSize
:
nq
0
segments
:
-
segmentId
:
not
null
spans
:
-
operationName
:
/HTable/put
operationId
:
0
parentSpanId
:
0
spanId
:
1
spanLayer
:
Database
startTime
:
not
null
endTime
:
not
null
componentId
:
94
isError
:
false
spanType
:
Exit
peer
:
hbase-server
skipAnalysis
:
false
tags
:
-
{
key
:
db.type
,
value
:
hbase
}
-
{
key
:
db.instance
,
value
:
test_table
}
-
operationName
:
/HTable/getScanner
operationId
:
0
parentSpanId
:
0
spanId
:
2
spanLayer
:
Database
startTime
:
not
null
endTime
:
not
null
componentId
:
94
isError
:
false
spanType
:
Exit
peer
:
hbase-server
skipAnalysis
:
false
tags
:
-
{
key
:
db.type
,
value
:
hbase
}
-
{
key
:
db.instance
,
value
:
test_table
}
-
operationName
:
/HTable/get
operationId
:
0
parentSpanId
:
0
spanId
:
3
spanLayer
:
Database
startTime
:
not
null
endTime
:
not
null
componentId
:
94
isError
:
false
spanType
:
Exit
peer
:
hbase-server
skipAnalysis
:
false
tags
:
-
{
key
:
db.type
,
value
:
hbase
}
-
{
key
:
db.instance
,
value
:
test_table
}
-
operationName
:
/HTable/delete
operationId
:
0
parentSpanId
:
0
spanId
:
4
spanLayer
:
Database
startTime
:
not
null
endTime
:
not
null
componentId
:
94
isError
:
false
spanType
:
Exit
peer
:
hbase-server
skipAnalysis
:
false
tags
:
-
{
key
:
db.type
,
value
:
hbase
}
-
{
key
:
db.instance
,
value
:
test_table
}
-
operationName
:
/hbase-scenario/case/hbase-case
operationId
:
0
parentSpanId
:
-1
spanId
:
0
spanLayer
:
Http
startTime
:
not
null
endTime
:
not
null
componentId
:
1
isError
:
false
spanType
:
Entry
peer
:
'
'
skipAnalysis
:
false
tags
:
-
{
key
:
url
,
value
:
'
http://localhost:8080/hbase-scenario/case/hbase-case'
}
-
{
key
:
http.method
,
value
:
GET
}
test/plugin/scenarios/hbase-scenario/configuration.yml
0 → 100644
浏览文件 @
7a20c260
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
type
:
jvm
entryService
:
http://localhost:8080/hbase-scenario/case/hbase-case
healthCheck
:
http://localhost:8080/hbase-scenario/case/healthCheck
startScript
:
./bin/startup.sh
environment
:
-
HBASE_SERVERS=hbase-server
depends_on
:
-
hbase-server
dependencies
:
hbase-server
:
image
:
harisekhon/hbase:1.4
hostname
:
hbase-server
expose
:
-
"
2181"
-
"
16020"
\ No newline at end of file
test/plugin/scenarios/hbase-scenario/pom.xml
0 → 100644
浏览文件 @
7a20c260
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
-->
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
org.apache.skywalking
</groupId>
<artifactId>
hbase-scenario
</artifactId>
<version>
5.0.0
</version>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<test.framework.version>
1.4.9
</test.framework.version>
<docker.image.version>
${test.framework.version}
</docker.image.version>
<log4j.version>
2.6.2
</log4j.version>
<spring.version>
4.3.8.RELEASE
</spring.version>
<spring-boot-version>
1.5.2.RELEASE
</spring-boot-version>
</properties>
<name>
skywalking-hbase-scenario
</name>
<dependencies>
<dependency>
<groupId>
org.apache.hbase
</groupId>
<artifactId>
hbase-client
</artifactId>
<version>
${test.framework.version}
</version>
<exclusions>
<exclusion>
<groupId>
org.slf4j
</groupId>
<artifactId>
*
</artifactId>
</exclusion>
<exclusion>
<groupId>
log4j
</groupId>
<artifactId>
*
</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring Boot-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
<version>
${spring-boot-version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-api
</artifactId>
<version>
${log4j.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-core
</artifactId>
<version>
${log4j.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-slf4j-impl
</artifactId>
<version>
${log4j.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-jcl
</artifactId>
<version>
${log4j.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-tomcat
</artifactId>
<version>
${spring-boot-version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
<version>
${spring-boot-version}
</version>
</dependency>
</dependencies>
<build>
<finalName>
hbase-scenario
</finalName>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<executions>
<execution>
<goals>
<goal>
repackage
</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>
maven-compiler-plugin
</artifactId>
<configuration>
<source>
${compiler.version}
</source>
<target>
${compiler.version}
</target>
<encoding>
${project.build.sourceEncoding}
</encoding>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-assembly-plugin
</artifactId>
<executions>
<execution>
<id>
assemble
</id>
<phase>
package
</phase>
<goals>
<goal>
single
</goal>
</goals>
<configuration>
<descriptors>
<descriptor>
src/main/assembly/assembly.xml
</descriptor>
</descriptors>
<outputDirectory>
./target/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
test/plugin/scenarios/hbase-scenario/src/main/assembly/assembly.xml
0 → 100644
浏览文件 @
7a20c260
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
-->
<assembly
xmlns=
"http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"
>
<formats>
<format>
zip
</format>
</formats>
<fileSets>
<fileSet>
<directory>
./bin
</directory>
<fileMode>
0775
</fileMode>
</fileSet>
</fileSets>
<files>
<file>
<source>
${project.build.directory}/hbase-scenario.jar
</source>
<outputDirectory>
./libs
</outputDirectory>
<fileMode>
0775
</fileMode>
</file>
</files>
</assembly>
test/plugin/scenarios/hbase-scenario/src/main/java/org/apache/skywalking/apm/testcase/hbase/Application.java
0 → 100644
浏览文件 @
7a20c260
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package
org.apache.skywalking.apm.testcase.hbase
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
Application
{
public
static
void
main
(
String
[]
args
)
{
try
{
SpringApplication
.
run
(
Application
.
class
,
args
);
}
catch
(
Exception
e
)
{
// Never do this
}
}
}
test/plugin/scenarios/hbase-scenario/src/main/java/org/apache/skywalking/apm/testcase/hbase/controller/HBaseController.java
0 → 100644
浏览文件 @
7a20c260
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package
org.apache.skywalking.apm.testcase.hbase.controller
;
import
org.apache.hadoop.conf.Configuration
;
import
org.apache.hadoop.hbase.*
;
import
org.apache.hadoop.hbase.client.*
;
import
org.apache.hadoop.hbase.filter.PrefixFilter
;
import
org.apache.hadoop.hbase.util.Bytes
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.PropertySource
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.annotation.PostConstruct
;
import
java.io.IOException
;
@Controller
@RequestMapping
(
"/case"
)
@PropertySource
(
"classpath:application.properties"
)
public
class
HBaseController
{
@Value
(
"${hbase.servers:localhost}"
)
private
String
address
;
private
Table
table
;
@PostConstruct
public
void
init
()
{
Configuration
config
=
HBaseConfiguration
.
create
();
config
.
set
(
"hbase.zookeeper.quorum"
,
address
);
config
.
set
(
"hbase.zookeeper.property.clientPort"
,
"2181"
);
config
.
set
(
"hbase.client.ipc.pool.type"
,
"RoundRobin"
);
config
.
set
(
"hbase.client.ipc.pool.size"
,
"5"
);
try
{
Admin
admin
=
ConnectionFactory
.
createConnection
(
config
).
getAdmin
();
if
(!
admin
.
tableExists
(
TableName
.
valueOf
(
"test_table"
)))
{
HTableDescriptor
tableDescriptor
=
new
HTableDescriptor
(
TableName
.
valueOf
(
"test_table"
));
HColumnDescriptor
columnDescriptor
=
new
HColumnDescriptor
(
"family1"
);
tableDescriptor
.
addFamily
(
columnDescriptor
);
admin
.
createTable
(
tableDescriptor
);
}
table
=
admin
.
getConnection
().
getTable
(
TableName
.
valueOf
(
"test_table"
));
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
@RequestMapping
(
"/hbase-case"
)
@ResponseBody
public
String
hbaseCase
()
{
try
{
Put
put
=
new
Put
(
"rowkey1"
.
getBytes
());
put
.
addColumn
(
"family1"
.
getBytes
(),
"qualifier1"
.
getBytes
(),
"value1"
.
getBytes
());
table
.
put
(
put
);
Scan
s
=
new
Scan
();
s
.
setFilter
(
new
PrefixFilter
((
"rowkey"
).
getBytes
()));
s
.
setCaching
(
100
);
ResultScanner
results
=
table
.
getScanner
(
s
);
for
(
Result
result
:
results
)
{
if
(
result
!=
null
&&
!
result
.
isEmpty
())
{
for
(
Cell
cell
:
result
.
rawCells
())
{
String
family
=
Bytes
.
toString
(
CellUtil
.
cloneFamily
(
cell
));
String
colName
=
Bytes
.
toString
(
cell
.
getQualifierArray
(),
cell
.
getQualifierOffset
(),
cell
.
getQualifierLength
());
String
value
=
Bytes
.
toString
(
cell
.
getValueArray
(),
cell
.
getValueOffset
(),
cell
.
getValueLength
());
System
.
out
.
println
(
"family: "
+
family
+
" colName:"
+
colName
+
" value:"
+
value
);
}
}
}
Result
result
=
table
.
get
(
new
Get
(
"rowkey1"
.
getBytes
()));
for
(
Cell
cell
:
result
.
rawCells
())
{
String
family
=
Bytes
.
toString
(
CellUtil
.
cloneFamily
(
cell
));
String
colName
=
Bytes
.
toString
(
cell
.
getQualifierArray
(),
cell
.
getQualifierOffset
(),
cell
.
getQualifierLength
());
String
value
=
Bytes
.
toString
(
cell
.
getValueArray
(),
cell
.
getValueOffset
(),
cell
.
getValueLength
());
System
.
out
.
println
(
"family: "
+
family
+
" colName:"
+
colName
+
" value:"
+
value
);
}
table
.
delete
(
new
Delete
(
"rowkey1"
.
getBytes
()));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
"Success"
;
}
@RequestMapping
(
"/healthCheck"
)
@ResponseBody
public
String
healthCheck
()
{
return
"healthCheck"
;
}
}
test/plugin/scenarios/hbase-scenario/src/main/resources/application.properties
0 → 100644
浏览文件 @
7a20c260
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
server.port
=
8080
server.contextPath
=
/hbase-scenario
test/plugin/scenarios/hbase-scenario/src/main/resources/log4j2.xml
0 → 100644
浏览文件 @
7a20c260
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
-->
<Configuration
status=
"WARN"
>
<Appenders>
<Console
name=
"Console"
target=
"SYSTEM_ERR"
>
<PatternLayout
charset=
"UTF-8"
pattern=
"[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"
/>
</Console>
</Appenders>
<Loggers>
<Root
level=
"WARN"
>
<AppenderRef
ref=
"Console"
/>
</Root>
</Loggers>
</Configuration>
\ No newline at end of file
test/plugin/scenarios/hbase-scenario/support-version.list
0 → 100644
浏览文件 @
7a20c260
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
1.2.1
1.2.6
1.3.1
1.4.0
1.4.9
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录