This is an automated email from the ASF dual-hosted git repository.
hanahmily pushed a commit to branch 6.0
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/6.0 by this push:
new fc3b440 Add handler to parse istio telemetry data.
fc3b440 is described below
commit fc3b440ae9b6314a4e7a0015ff887ecfdb5c600c
Author: Gao Hongtao <[email protected]>
AuthorDate: Wed Aug 15 20:42:24 2018 +0800
Add handler to parse istio telemetry data.
---
apm-protocol/apm-network/src/main/proto | 2 +-
.../provider/IstioTelemetryGRPCHandler.java | 113 +++++++++++++++++++++
.../provider/IstioTelemetryReceiverProvider.java | 3 +
.../src/main/proto/istio-metric.proto | 3 +
.../mixer/adapter/model/v1beta1/extensions.proto | 2 +
.../proto/mixer/adapter/model/v1beta1/report.proto | 2 +
.../src/main/proto/policy/v1beta1/type.proto | 2 +
.../src/main/proto/policy/v1beta1/value_type.proto | 2 +
.../provider/IstioTelemetryGRPCHandlerTest.java | 30 ++++++
.../src/main/resources/application.yml | 2 +
.../server-starter/src/main/resources/log4j2.xml | 1 +
11 files changed, 161 insertions(+), 1 deletion(-)
diff --git a/apm-protocol/apm-network/src/main/proto
b/apm-protocol/apm-network/src/main/proto
index 33b132b..75c7418 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit 33b132bffaabacbd003eec41b498d2810f386161
+Subproject commit 75c74186a1548657013a299f388e6e8b7b4b5251
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java
new file mode 100644
index 0000000..cb372c5
--- /dev/null
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandler.java
@@ -0,0 +1,113 @@
+/*
+ * 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.oap.server.receiver.istio.telemetry.provider;
+
+import com.google.protobuf.Timestamp;
+import io.grpc.stub.StreamObserver;
+import io.istio.HandleMetricServiceGrpc;
+import io.istio.IstioMetricProto;
+import io.istio.api.mixer.adapter.model.v1beta1.ReportProto;
+import io.istio.api.policy.v1beta1.TypeProto;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Map;
+import org.apache.skywalking.apm.network.servicemesh.DetectPoint;
+import org.apache.skywalking.apm.network.servicemesh.Protocol;
+import org.apache.skywalking.apm.network.servicemesh.ServiceMeshMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Handle istio telemetry data.
+ *
+ * @author gaohongtao
+ */
+public class IstioTelemetryGRPCHandler extends
HandleMetricServiceGrpc.HandleMetricServiceImplBase {
+
+ private static final Logger logger =
LoggerFactory.getLogger(IstioTelemetryGRPCHandler.class);
+
+ @Override public void handleMetric(IstioMetricProto.HandleMetricRequest
request,
+ StreamObserver<ReportProto.ReportResult> responseObserver) {
+ for (IstioMetricProto.InstanceMsg i : request.getInstancesList()) {
+ logger.debug("Received msg {}", request);
+ String requestMethod = string(i, "requestMethod");
+ String requestPath = string(i,"requestPath");
+ String requestScheme = string(i,"requestScheme");
+ long responseCode = int64(i, "responseCode");
+ String reporter = string(i, "reporter");
+ String protocol = string(i, "apiProtocol");
+
+ String endpoint;
+ boolean status = true;
+ Protocol netProtocol;
+ if (protocol.equals("http") || protocol.equals("https")) {
+ endpoint = requestScheme + "/" + requestMethod + "/" +
requestPath;
+ status = responseCode >= 200 && responseCode < 400;
+ netProtocol = Protocol.HTTP;
+ } else {
+ //grpc
+ endpoint = protocol + "/" + requestPath;
+ netProtocol = Protocol.gRPC;
+ }
+ Instant requestTime = time(i, "requestTime");
+ Instant responseTime = time(i, "responseTime");
+ int latency = Math.toIntExact(Duration.between(requestTime,
responseTime).toMillis());
+
+ DetectPoint detectPoint;
+ if (reporter.equals("source")) {
+ detectPoint = DetectPoint.client;
+ } else {
+ detectPoint = DetectPoint.server;
+ }
+ ServiceMeshMetric metric =
ServiceMeshMetric.newBuilder().setStartTime(requestTime.toEpochMilli())
+
.setEndTime(responseTime.toEpochMilli()).setSourceServiceName(string(i,
"sourceService"))
+ .setSourceServiceInstance(string(i,
"sourceUID")).setDestServiceName(string(i, "destinationService"))
+ .setDestServiceInstance(string(i,
"destinationUID")).setEndpoint(endpoint).setLatency(latency)
+
.setResponseCode(Math.toIntExact(responseCode)).setStatus(status).setProtocol(netProtocol).setDetectPoint(detectPoint).build();
+ logger.debug("Transformed metric {}", metric);
+ }
+ responseObserver.onNext(ReportProto.ReportResult.newBuilder().build());
+ responseObserver.onCompleted();
+ }
+
+ private String string(final IstioMetricProto.InstanceMsg instanceMsg,
final String key) {
+ Map<String, TypeProto.Value> map = instanceMsg.getDimensionsMap();
+ assertDimension(map, key);
+ return map.get(key).getStringValue();
+ }
+
+ private long int64(final IstioMetricProto.InstanceMsg instanceMsg, final
String key) {
+ Map<String, TypeProto.Value> map = instanceMsg.getDimensionsMap();
+ assertDimension(map, key);
+ return map.get(key).getInt64Value();
+ }
+
+ private Instant time(final IstioMetricProto.InstanceMsg instanceMsg, final
String key) {
+ Map<String, TypeProto.Value> map = instanceMsg.getDimensionsMap();
+ assertDimension(map, key);
+ Timestamp timestamp = map.get(key).getTimestampValue().getValue();
+ return Instant.ofEpochSecond(timestamp.getSeconds(),
timestamp.getNanos());
+ }
+
+ private void assertDimension(final Map<String, TypeProto.Value> map, final
String key) {
+ if (!map.containsKey(key)) {
+ throw new IllegalArgumentException(String.format("Lack dimension
%s", key));
+ }
+ }
+}
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryReceiverProvider.java
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryReceiverProvider.java
index ee03495..4421f24 100644
---
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryReceiverProvider.java
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryReceiverProvider.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.receiver.istio.telemetry.provider;
import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
import org.apache.skywalking.oap.server.library.module.ModuleDefine;
import org.apache.skywalking.oap.server.library.module.ModuleProvider;
@@ -43,6 +44,8 @@ public class IstioTelemetryReceiverProvider extends
ModuleProvider {
}
@Override public void start() throws ServiceNotProvidedException,
ModuleStartException {
+ GRPCHandlerRegister service =
getManager().find(CoreModule.NAME).getService(GRPCHandlerRegister.class);
+ service.addHandler(new IstioTelemetryGRPCHandler());
}
@Override public void notifyAfterCompleted() throws
ServiceNotProvidedException, ModuleStartException {
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/istio-metric.proto
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/istio-metric.proto
index f74fa1d..082b482 100644
---
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/istio-metric.proto
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/istio-metric.proto
@@ -54,6 +54,9 @@ import "mixer/adapter/model/v1beta1/report.proto";
import "policy/v1beta1/value_type.proto";
import "policy/v1beta1/type.proto";
+option java_package = "io.istio";
+option java_outer_classname = "IstioMetricProto";
+
option (istio.mixer.adapter.model.v1beta1.template_variety) =
TEMPLATE_VARIETY_REPORT;
option (istio.mixer.adapter.model.v1beta1.template_name) = "metric";
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/extensions.proto
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/extensions.proto
index 5237ac9..2976843 100644
---
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/extensions.proto
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/extensions.proto
@@ -17,6 +17,8 @@ syntax = "proto3";
package istio.mixer.adapter.model.v1beta1;
option go_package="istio.io/api/mixer/adapter/model/v1beta1";
+option java_package = "io.istio.api.mixer.adapter.model.v1beta1";
+option java_outer_classname = "ExtensionsProto";
import "google/protobuf/descriptor.proto";
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/report.proto
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/report.proto
index bc4bee8..6fdcca3 100644
---
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/report.proto
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/mixer/adapter/model/v1beta1/report.proto
@@ -17,6 +17,8 @@ syntax = "proto3";
package istio.mixer.adapter.model.v1beta1;
option go_package="istio.io/api/mixer/adapter/model/v1beta1";
+option java_package = "io.istio.api.mixer.adapter.model.v1beta1";
+option java_outer_classname = "ReportProto";
import "gogoproto/gogo.proto";
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/type.proto
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/type.proto
index d6027d1..1b7505e 100644
---
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/type.proto
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/type.proto
@@ -22,6 +22,8 @@ syntax = "proto3";
package istio.policy.v1beta1;
option go_package="istio.io/api/policy/v1beta1";
+option java_package = "io.istio.api.policy.v1beta1";
+option java_outer_classname = "TypeProto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/value_type.proto
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/value_type.proto
index 23194f3..04d8675 100644
---
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/value_type.proto
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/main/proto/policy/v1beta1/value_type.proto
@@ -17,6 +17,8 @@ syntax = "proto3";
package istio.policy.v1beta1;
option go_package="istio.io/api/policy/v1beta1";
+option java_package = "io.istio.api.policy.v1beta1";
+option java_outer_classname = "ValueTypeProto";
// ValueType describes the types that values in the Istio system can take.
These
// are used to describe the type of Attributes at run time, describe the type
of
diff --git
a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/test/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandlerTest.java
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/test/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandlerTest.java
new file mode 100644
index 0000000..4199ac9
--- /dev/null
+++
b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/istio-telemetry-receiver-provider/src/test/java/org/apache/skywalking/oap/server/receiver/istio/telemetry/provider/IstioTelemetryGRPCHandlerTest.java
@@ -0,0 +1,30 @@
+/*
+ * 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.oap.server.receiver.istio.telemetry.provider;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class IstioTelemetryGRPCHandlerTest {
+
+ @Test
+ public void handleMetric() {
+ }
+}
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/application.yml
b/oap-server/server-starter/src/main/resources/application.yml
index 46c3535..0799415 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -51,6 +51,8 @@ storage:
monthMetricDataTTL: 18 # Unit is month
service-mesh:
default:
+istio-telemetry:
+ default:
query:
graphql:
path: /graphql
diff --git a/oap-server/server-starter/src/main/resources/log4j2.xml
b/oap-server/server-starter/src/main/resources/log4j2.xml
index 0003b82..eb69a89 100644
--- a/oap-server/server-starter/src/main/resources/log4j2.xml
+++ b/oap-server/server-starter/src/main/resources/log4j2.xml
@@ -28,6 +28,7 @@
<logger name="org.apache.zookeeper" level="INFO"/>
<logger name="org.elasticsearch.common.network.IfConfig" level="INFO"/>
<logger name="io.grpc.netty" level="INFO"/>
+ <logger
name="org.apache.skywalking.oap.server.receiver.istio.telemetry" level="DEBUG"/>
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>