diff --git a/sig-observability/concepts-and-designs/how-to-add-new-metric-to-kubesphere.md b/sig-observability/concepts-and-designs/how-to-add-new-metric-to-kubesphere.md
new file mode 100644
index 00000000..75774515
--- /dev/null
+++ b/sig-observability/concepts-and-designs/how-to-add-new-metric-to-kubesphere.md
@@ -0,0 +1,61 @@
+# Why we need to add metrics to kubesphere
+
+Metrics can provide insight into the behavior and health of our system. They represent the raw material used by monitoring system to build a holistic view of kubesphere, automate responses to changes, and alert human beings when required.
+
+# How to add new metric
+
+* 1. [Define the metric](#Define)
+* 2. [Register the metric](#Register)
+* 3. [Export the metric](#Export)
+
+
+## 1. Define the metric
+Define the metric in the file `metric.go` of you package or somewhere else.
+
+ ```go
+ package application
+
+import (
+ compbasemetrics "k8s.io/component-base/metrics"
+ "kubesphere.io/kubesphere/pkg/utils/metrics"
+ )
+
+var (
+ // add a counter metric
+ appTemplateCreationCounter = compbasemetrics.NewCounterVec(
+ &compbasemetrics.CounterOpts{
+ Name: "application_template_creation", // metric name
+ Help: "Counter of application template creation broken out for each workspace, name and create state", // metric help info
+ StabilityLevel: compbasemetrics.ALPHA, //represents the API guarantees for a given defined metric
+ },
+ //we want to export the namespace, name and current state of the appTemplate
+ []string{"workspace", "name", "state"}, // the labels of the metric
+ )
+ )
+
+```
+
+## 2. Register the metric
+```go
+ package application
+ import (
+ "kubesphere.io/kubesphere/pkg/utils/metrics"
+ )
+
+ func init(){
+ Register()
+ }
+
+ func Register() {
+ metrics.MustRegister(appTemplateCreationCounter)
+ }
+```
+
+## 3. Export the metric
+```go
+package application
+func (c *appTemplateOperator) CreateApp(request *CreateAppRequest) {
+ // export app template create metric with label values
+ appTemplateCreationCounter.WithLabelValues("workspace", "Name", "failed").Inc()
+}
+```