You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2021/11/18 06:52:10 UTC

[skywalking-showcase] 01/01: Add feature event

This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch event
in repository https://gitbox.apache.org/repos/asf/skywalking-showcase.git

commit 5764ddc87ed15a3559e05e732b746ac5a83fde37
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Thu Nov 18 14:51:58 2021 +0800

    Add feature event
---
 Makefile.in                                        |   2 +
 deploy/platform/docker/Makefile.in                 |   2 +-
 deploy/platform/docker/docker-compose.event.yaml   |  43 +++++++++
 deploy/platform/kubernetes/Makefile                |   2 +
 deploy/platform/kubernetes/Makefile.in             |   2 +-
 .../feature-event/permissions.yaml}                |  21 +++-
 .../kubernetes/feature-event/resources.yaml        |  90 +++++++++++++++++
 .../platform/kubernetes/feature-event/scaler.yaml  | 106 +++++++++++++++++++++
 deploy/platform/kubernetes/features.mk             |   2 +-
 docs/readme.md                                     |   1 +
 10 files changed, 266 insertions(+), 5 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 2181347..55c545b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -28,6 +28,8 @@ ES_IMAGE ?= docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.0
 
 SW_OAP_IMAGE ?= ghcr.io/apache/skywalking/oap:b63008c61e1fcb1d69b25a8be7ce99f1d987a175
 SW_ROCKET_BOT_IMAGE ?= ghcr.io/apache/skywalking/ui:b63008c61e1fcb1d69b25a8be7ce99f1d987a175
+SW_CLI_IMAGE ?= ghcr.io/apache/skywalking-cli/skywalking-cli:8c5725f2c4c47de6091748c1b4747f0d6047ad8e
+SW_EVENT_EXPORTER_IMAGE ?= ghcr.io/apache/skywalking-kubernetes-event-exporter/skywalking-kubernetes-event-exporter:c4abefe016160873651915c5a3b8cdd2071774e7
 
 SW_AGENT_NODEJS_BACKEND_VERSION ?= e755659c7f308d3b5589619778c8360308cb14f8
 SW_AGENT_NODEJS_FRONTEND_VERSION ?= af0565a67d382b683c1dbd94c379b7080db61449
diff --git a/deploy/platform/docker/Makefile.in b/deploy/platform/docker/Makefile.in
index 2c80d2b..1c5ba3c 100644
--- a/deploy/platform/docker/Makefile.in
+++ b/deploy/platform/docker/Makefile.in
@@ -17,4 +17,4 @@
 #
 
 .EXPORT_ALL_VARIABLES:
-FEATURE_FLAGS ?= agent,cluster,so11y,vm
+FEATURE_FLAGS ?= agent,cluster,so11y,vm,event
diff --git a/deploy/platform/docker/docker-compose.event.yaml b/deploy/platform/docker/docker-compose.event.yaml
new file mode 100644
index 0000000..929e083
--- /dev/null
+++ b/deploy/platform/docker/docker-compose.event.yaml
@@ -0,0 +1,43 @@
+# 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: '2.1'
+
+services:
+  # @feature: event; set up event reporter to upload events.
+  event-reporter:
+    image: ${SW_CLI_IMAGE}
+    networks: [ sw ]
+    entrypoint:
+      - /bin/sh
+      - -xc
+    command:
+      - >-
+        while true; do
+          /swctl --grpc-addr=oap:11800 event report --uuid=$$RANDOM$$RANDOM$$RANDOM --name=Upgrade --service-name=songs --message='Upgrade from {fromVersion} to {toVersion}' --start-time=$$(($$(date +%s)*1000-60000)) --end-time=$$(($$(date +%s)*1000)) fromVersion=v1 toVersion=v2
+          sleep 30
+          /swctl --grpc-addr=oap:11800 event report --uuid=$$RANDOM$$RANDOM$$RANDOM --name=Upgrade --service-name=recommendation --message='Upgrade from {fromVersion} to {toVersion}' --start-time=$$(($$(date +%s)*1000-60000)) --end-time=$$(($$(date +%s)*1000)) fromVersion=v1 toVersion=v2
+          sleep 30
+          /swctl --grpc-addr=oap:11800 event report --uuid=$$RANDOM$$RANDOM$$RANDOM --name=Upgrade --service-name=gateway --message='Upgrade from {fromVersion} to {toVersion}' --start-time=$$(($$(date +%s)*1000-60000)) --end-time=$$(($$(date +%s)*1000)) fromVersion=v1 toVersion=v2
+          sleep 30
+        done
+    depends_on:
+      oap:
+        condition: service_healthy
+
+networks:
+  sw:
diff --git a/deploy/platform/kubernetes/Makefile b/deploy/platform/kubernetes/Makefile
index aeb6b4f..178ae19 100644
--- a/deploy/platform/kubernetes/Makefile
+++ b/deploy/platform/kubernetes/Makefile
@@ -38,6 +38,7 @@ $(deploy_resources): deploy.%.resources: %
 
 .PHONY: deploy
 deploy: $(deploy_features)
+ifneq ($(SHOW_TIPS),false)
 	@echo
 	@echo "Now wait the Pods to be ready and use the following command to expose the port of SkyWalking UI"
 	@echo
@@ -45,6 +46,7 @@ deploy: $(deploy_features)
 	@echo
 	@echo "Then open your browser and navigate to http://localhost:8080"
 	@echo
+endif
 
 # Undeploy
 undeploy_features := $(foreach r,$(features),undeploy.$(r))
diff --git a/deploy/platform/kubernetes/Makefile.in b/deploy/platform/kubernetes/Makefile.in
index 3e955ba..85bc910 100644
--- a/deploy/platform/kubernetes/Makefile.in
+++ b/deploy/platform/kubernetes/Makefile.in
@@ -21,4 +21,4 @@
 NAMESPACE ?= default
 AGENTLESS ?= false
 
-FEATURE_FLAGS ?= agent,cluster,kubernetes-monitor,so11y,vm,als
+FEATURE_FLAGS ?= agent,cluster,kubernetes-monitor,so11y,vm,als,event
diff --git a/deploy/platform/docker/Makefile.in b/deploy/platform/kubernetes/feature-event/permissions.yaml
similarity index 65%
copy from deploy/platform/docker/Makefile.in
copy to deploy/platform/kubernetes/feature-event/permissions.yaml
index 2c80d2b..8aa437c 100644
--- a/deploy/platform/docker/Makefile.in
+++ b/deploy/platform/kubernetes/feature-event/permissions.yaml
@@ -15,6 +15,23 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  namespace: ${NAMESPACE}
+  name: skywalking-event-exporter-sa
 
-.EXPORT_ALL_VARIABLES:
-FEATURE_FLAGS ?= agent,cluster,so11y,vm
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: skywalking-event-exporter-role-binding
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: view
+subjects:
+  - kind: ServiceAccount
+    namespace: ${NAMESPACE}
+    name: skywalking-event-exporter-sa
diff --git a/deploy/platform/kubernetes/feature-event/resources.yaml b/deploy/platform/kubernetes/feature-event/resources.yaml
new file mode 100644
index 0000000..bb32769
--- /dev/null
+++ b/deploy/platform/kubernetes/feature-event/resources.yaml
@@ -0,0 +1,90 @@
+# 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.
+#
+
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: skywalking-event-exporter-cm
+  namespace: ${NAMESPACE}
+data:
+  config.yaml: |
+    filters:
+      - namespace: ${NAMESPACE}|${NAMESPACE}-agentless
+        exporters:
+          - skywalking
+
+    exporters:
+      skywalking:
+        template:
+          source:
+            service: "{{ .Service.Name }}"
+            serviceInstance: "{{ .Pod.Name }}"
+            endpoint: ""
+          message: "{{ .Event.Message }}"
+        address: "oap:11800"
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: skywalking-event-exporter-deployment
+  namespace: ${NAMESPACE}
+spec:
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: skywalking-event-exporter
+    spec:
+      serviceAccountName: skywalking-event-exporter-sa
+      containers:
+        - name: skywalking-event-exporter
+          image: ${SW_EVENT_EXPORTER_IMAGE}
+          args:
+            - start
+            - -v=debug
+            - -c=/data/config.yaml
+          volumeMounts:
+            - mountPath: /data
+              name: config
+      volumes:
+        - name: config
+          configMap:
+            name: skywalking-event-exporter-cm
+  selector:
+    matchLabels:
+      app: skywalking-event-exporter
diff --git a/deploy/platform/kubernetes/feature-event/scaler.yaml b/deploy/platform/kubernetes/feature-event/scaler.yaml
new file mode 100644
index 0000000..b032572
--- /dev/null
+++ b/deploy/platform/kubernetes/feature-event/scaler.yaml
@@ -0,0 +1,106 @@
+# 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.
+#
+
+---
+# @feature: event; a cron job to mimic the restart of Pods
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: event-role
+rules:
+  - apiGroups:
+      - ''
+      - extensions
+      - apps
+    resources:
+      - '*'
+    verbs:
+      - '*'
+
+---
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: event-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: event-scaler-sa
+roleRef:
+  kind: Role
+  name: event-role
+  apiGroup: ""
+
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: event-scaler-sa
+
+---
+apiVersion: batch/v1beta1
+kind: CronJob
+metadata:
+  name: event-scale-up
+spec:
+  schedule: "0,10,20,30,40,50 * * * *"
+  successfulJobsHistoryLimit: 1
+  failedJobsHistoryLimit: 1
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          annotations:
+            sidecar.istio.io/inject: "false"
+        spec:
+          serviceAccountName: event-scaler-sa
+          containers:
+            - name: event-scaler
+              image: bitnami/kubectl:1.20.12
+              volumeMounts:
+              command:
+                - sh
+                - -c
+                - kubectl -n ${NAMESPACE} scale deployment songs-deployment recommendation-deployment gateway-deployment app-deployment --replicas=2
+          restartPolicy: Never
+
+---
+apiVersion: batch/v1beta1
+kind: CronJob
+metadata:
+  name: event-scale-down
+spec:
+  schedule: "5,15,25,35,45,55 * * * *"
+  successfulJobsHistoryLimit: 1
+  failedJobsHistoryLimit: 1
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          annotations:
+            sidecar.istio.io/inject: "false"
+        spec:
+          serviceAccountName: event-scaler-sa
+          containers:
+            - name: event-scaler
+              image: bitnami/kubectl:1.20.12
+              volumeMounts:
+              command:
+                - sh
+                - -c
+                - kubectl -n ${NAMESPACE} scale deployment songs-deployment recommendation-deployment gateway-deployment app-deployment --replicas=1
+          restartPolicy: Never
diff --git a/deploy/platform/kubernetes/features.mk b/deploy/platform/kubernetes/features.mk
index 329c425..79de1cf 100644
--- a/deploy/platform/kubernetes/features.mk
+++ b/deploy/platform/kubernetes/features.mk
@@ -54,7 +54,7 @@ feature-als:
 
 .PHONY: deploy.feature-als
 deploy.feature-als: prerequisites
-	$(MAKE) deploy FEATURE_FLAGS=agent TAG=$(TAG)-agentless NAMESPACE=$(NAMESPACE)-agentless AGENTLESS=true
+	$(MAKE) deploy FEATURE_FLAGS=agent TAG=$(TAG)-agentless NAMESPACE=$(NAMESPACE)-agentless AGENTLESS=true SHOW_TIPS=false
 
 .PHONY: undeploy.feature-als
 undeploy.feature-als:
diff --git a/docs/readme.md b/docs/readme.md
index eace110..d17d1f8 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -83,6 +83,7 @@ Currently, the features supported are:
 | `vm`          | Start 2 virtual machines and export their metrics to SkyWalking. | The "virtual machines" are mimicked by Docker containers or Pods. |
 | `als`         | Start microservices WITHOUT SkyWalking agent enabled, and configure SkyWalking to analyze the topology and metrics from their access logs. | Command `istioctl` is required to run this feature. The agentless microservices will be running at namespace `${NAMESPACE}-agentless` |
 | `kubernetes-monitor` | Deploy OpenTelemetry and export Kubernetes monitoring metrics to SkyWalking for analysis and display on UI. | |
+| `event`       | Deploy tools to trigger events, and SkyWalking Kubernetes event exporter to export events into SkyWalking. | |
 
 ### Kubernetes