kubevela/pkg/monitor
Tianxin Dong 16dfc1bf8a
Feat: add pending phase in workflow step (#4365)
* Feat: add pending phase in workflow step

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

* fix test

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

* fix lint

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>

* fix test

Signed-off-by: FogDong <dongtianxin.tx@alibaba-inc.com>
2022-07-19 14:31:20 +08:00
..
context Feat: add more performance optimization and prometheus metrics for controller (#3086) 2022-01-14 15:18:02 +08:00
metrics Feat: add metrics for workflow and app phase (#4236) 2022-06-24 14:15:02 +08:00
watcher Feat: add pending phase in workflow step (#4365) 2022-07-19 14:31:20 +08:00
README.md Feat: output log with structured tag & add step duration metrics (#2683) 2021-11-12 11:48:41 +08:00

README.md

Package Usage

Context

First, this context is compatible with built-in context interface. Also it supports fork and commit like trace span.

Fork

Fork will generate a sub context that inherit the parent's tags. When new tags are added to the sub-context, the parent-context will not be affected.

Commit

Commit will log the context duration, and export metrics or other execution information.

usage

tracerCtx:=context.NewTraceContext(stdCtx,"$id") 
defer tracerCtx.Commit("success")

// Execute sub-code logic
subCtx:=tracerCtx.Fork("sub-id")
...
subCtx.Commit("step is executed")

Metrics

First, you need register metricVec in package pkg/monitor/metrics, like below:

StepDurationSummary = prometheus.NewSummaryVec(prometheus.SummaryOpts{
		Name:        "step_duration_ms",
		Help:        "step latency distributions.",
		Objectives:  map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
		ConstLabels: prometheus.Labels{},
	}, []string{"application", "workflow_revision", "step_name", "step_type"})

Now, you can export metrics by context,for example

subCtx:=tracerCtx.Fork("sub-id",DurationMetric(func(v float64) {
					metrics.StepDurationSummary.WithLabelValues(e.app.Name, e.status.AppRevision, stepStatus.Name, stepStatus.Type).Observe(v)
				})
subCtx.Commit("export") // At this time, it will export the StepDurationSummary metrics. 			

Context only support DurationMetric exporter. you can submit pr to support more exporters. If metrics have nothing to do with context, there is no need to extend it through context exporter