diff --git a/docs/en/setup/envoy/config.yaml b/docs/en/setup/envoy/config.yaml index f99a91dd1..3a00c2eed 100644 --- a/docs/en/setup/envoy/config.yaml +++ b/docs/en/setup/envoy/config.yaml @@ -1,3 +1,19 @@ +# 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. + admin: access_log_path: /tmp/admin_access.log address: @@ -5,6 +21,7 @@ admin: protocol: TCP address: 127.0.0.1 port_value: 9901 + stats_sinks: - name: envoy.metrics_service config: @@ -66,7 +83,8 @@ static_resources: address: socket_address: address: skywalking - port_value: 9001 + # This is the port where SkyWalking serving the Envoy Metrics Service gRPC stream. + port_value: 11800 - name: service_google connect_timeout: 5s diff --git a/docs/en/setup/envoy/examples/metrics/Makefile b/docs/en/setup/envoy/examples/metrics/Makefile new file mode 100644 index 000000000..da68d6304 --- /dev/null +++ b/docs/en/setup/envoy/examples/metrics/Makefile @@ -0,0 +1,23 @@ +# 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. + +up: + docker-compose up -d + +down: + docker-compose down + +.PHONY: up down diff --git a/docs/en/setup/envoy/examples/metrics/README.md b/docs/en/setup/envoy/examples/metrics/README.md new file mode 100644 index 000000000..0f2465725 --- /dev/null +++ b/docs/en/setup/envoy/examples/metrics/README.md @@ -0,0 +1,56 @@ +# Sending Envoy Metrics to SkyWalking OAP Server Example + +This is an example of sending [Envoy Stats](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/observability/statistics#arch-overview-statistics) to SkyWalking OAP server +through [Metric Service](https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/metrics/v2/metrics_service.proto). + +## Running the example + +The example requires `docker` and `docker-compose` to be installed in your local. It fetches images from Docker Hub. + +Note that in ths setup, we override the [`log4j2.xml`](log4j2.xml) config to set the `org.apache.skywalking.oap.server.receiver.envoy` logger level to `DEBUG`. This enables us to see the messages sent by Envoy to SkyWalking OAP server. + +``` +$ make up +$ docker-compose logs -f skywalking +$ # Please wait for a moment until SkyWalking is ready and Envoy starts sending the stats. You will see similar messages like the following: +skywalking_1 | 2019-08-31 23:57:40,672 - org.apache.skywalking.oap.server.receiver.envoy.MetricServiceGRPCHandler -26870 [grpc-default-executor-0] DEBUG [] - Received msg identifier { +skywalking_1 | node { +skywalking_1 | id: "ingress" +skywalking_1 | cluster: "envoy-proxy" +skywalking_1 | metadata { +skywalking_1 | fields { +skywalking_1 | key: "skywalking" +skywalking_1 | value { +skywalking_1 | string_value: "iscool" +skywalking_1 | } +skywalking_1 | } +skywalking_1 | fields { +skywalking_1 | key: "envoy" +skywalking_1 | value { +skywalking_1 | string_value: "isawesome" +skywalking_1 | } +skywalking_1 | } +skywalking_1 | } +skywalking_1 | locality { +skywalking_1 | region: "ap-southeast-1" +skywalking_1 | zone: "zone1" +skywalking_1 | sub_zone: "subzone1" +skywalking_1 | } +skywalking_1 | build_version: "e349fb6139e4b7a59a9a359be0ea45dd61e589c5/1.11.1/Clean/RELEASE/BoringSSL" +skywalking_1 | } +skywalking_1 | } +skywalking_1 | envoy_metrics { +skywalking_1 | name: "cluster.service_skywalking.update_success" +skywalking_1 | type: COUNTER +skywalking_1 | metric { +skywalking_1 | counter { +skywalking_1 | value: 2.0 +skywalking_1 | } +skywalking_1 | timestamp_ms: 1567295859556 +skywalking_1 | } +skywalking_1 | } +... + +$ # To tear down: +$ make down +``` diff --git a/docs/en/setup/envoy/examples/metrics/docker-compose.yaml b/docs/en/setup/envoy/examples/metrics/docker-compose.yaml new file mode 100644 index 000000000..2250d5216 --- /dev/null +++ b/docs/en/setup/envoy/examples/metrics/docker-compose.yaml @@ -0,0 +1,34 @@ +# 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. + +version: "3" +services: + envoy: + image: envoyproxy/envoy-alpine:latest + command: /usr/local/bin/envoy -c /etc/envoy.yaml --service-cluster envoy-proxy + ports: + - 10000:10000 + depends_on: + - skywalking + volumes: + - ./envoy.yaml:/etc/envoy.yaml + + skywalking: + image: apache/skywalking-oap-server:latest + volumes: + - ./log4j2.xml:/skywalking/config/log4j2.xml + expose: + - "11800" diff --git a/docs/en/setup/envoy/examples/metrics/envoy.yaml b/docs/en/setup/envoy/examples/metrics/envoy.yaml new file mode 100644 index 000000000..af688f8c4 --- /dev/null +++ b/docs/en/setup/envoy/examples/metrics/envoy.yaml @@ -0,0 +1,104 @@ +# 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. + +admin: + access_log_path: /tmp/admin_access.log + address: + socket_address: + protocol: TCP + address: 127.0.0.1 + port_value: 9901 + +stats_sinks: + - name: envoy.metrics_service + config: + grpc_service: + envoy_grpc: + cluster_name: service_skywalking + +node: + id: ingress + cluster: card-api-cluster + locality: + region: ap-southeast-1 + zone: zone1 + sub_zone: subzone1 + metadata: + skywalking: iscool + envoy: isawesome + +static_resources: + listeners: + - name: listener_0 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 10000 + filter_chains: + - filters: + - name: envoy.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager + stat_prefix: ingress_http + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: ["*"] + routes: + - match: + prefix: "/" + route: + host_rewrite: www.google.com + cluster: service_google + http_filters: + - name: envoy.router + clusters: + - name: service_skywalking + connect_timeout: 5s + type: STRICT_DNS + http2_protocol_options: {} + # Comment out the following line to test on v6 networks + dns_lookup_family: V4_ONLY + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: service_skywalking + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: skywalking + port_value: 11800 + + - name: service_google + connect_timeout: 5s + type: STRICT_DNS + # Comment out the following line to test on v6 networks + dns_lookup_family: V4_ONLY + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: service_google + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: www.google.com + port_value: 443 + tls_context: + sni: www.google.com diff --git a/docs/en/setup/envoy/examples/metrics/log4j2.xml b/docs/en/setup/envoy/examples/metrics/log4j2.xml new file mode 100644 index 000000000..6c3774eac --- /dev/null +++ b/docs/en/setup/envoy/examples/metrics/log4j2.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + +