feat: add flag to switch to span metrics for service level latency metrics (#3134)

This commit is contained in:
Srikanth Chekuri 2023-07-14 11:31:44 +05:30 committed by GitHub
parent 206e8b8dc3
commit 433f930956
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 116 additions and 54 deletions

View File

@ -18,6 +18,7 @@ type APIHandlerOptions struct {
DataConnector interfaces.DataConnector DataConnector interfaces.DataConnector
SkipConfig *basemodel.SkipConfig SkipConfig *basemodel.SkipConfig
PreferDelta bool PreferDelta bool
PreferSpanMetrics bool
AppDao dao.ModelDao AppDao dao.ModelDao
RulesManager *rules.Manager RulesManager *rules.Manager
FeatureFlags baseint.FeatureLookup FeatureFlags baseint.FeatureLookup
@ -36,6 +37,7 @@ func NewAPIHandler(opts APIHandlerOptions) (*APIHandler, error) {
Reader: opts.DataConnector, Reader: opts.DataConnector,
SkipConfig: opts.SkipConfig, SkipConfig: opts.SkipConfig,
PerferDelta: opts.PreferDelta, PerferDelta: opts.PreferDelta,
PreferSpanMetrics: opts.PreferSpanMetrics,
AppDao: opts.AppDao, AppDao: opts.AppDao,
RuleManager: opts.RulesManager, RuleManager: opts.RulesManager,
FeatureFlags: opts.FeatureFlags}) FeatureFlags: opts.FeatureFlags})

View File

@ -2,6 +2,8 @@ package api
import ( import (
"net/http" "net/http"
basemodel "go.signoz.io/signoz/pkg/query-service/model"
) )
func (ah *APIHandler) getFeatureFlags(w http.ResponseWriter, r *http.Request) { func (ah *APIHandler) getFeatureFlags(w http.ResponseWriter, r *http.Request) {
@ -10,5 +12,13 @@ func (ah *APIHandler) getFeatureFlags(w http.ResponseWriter, r *http.Request) {
ah.HandleError(w, err, http.StatusInternalServerError) ah.HandleError(w, err, http.StatusInternalServerError)
return return
} }
if ah.opts.PreferSpanMetrics {
for idx := range featureSet {
feature := &featureSet[idx]
if feature.Name == basemodel.UseSpanMetrics {
featureSet[idx].Active = true
}
}
}
ah.Respond(w, featureSet) ah.Respond(w, featureSet)
} }

View File

@ -57,6 +57,7 @@ type ServerOptions struct {
DisableRules bool DisableRules bool
RuleRepoURL string RuleRepoURL string
PreferDelta bool PreferDelta bool
PreferSpanMetrics bool
} }
// Server runs HTTP api service // Server runs HTTP api service
@ -172,6 +173,7 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
DataConnector: reader, DataConnector: reader,
SkipConfig: skipConfig, SkipConfig: skipConfig,
PreferDelta: serverOptions.PreferDelta, PreferDelta: serverOptions.PreferDelta,
PreferSpanMetrics: serverOptions.PreferSpanMetrics,
AppDao: modelDao, AppDao: modelDao,
RulesManager: rm, RulesManager: rm,
FeatureFlags: lm, FeatureFlags: lm,

View File

@ -84,11 +84,13 @@ func main() {
var enableQueryServiceLogOTLPExport bool var enableQueryServiceLogOTLPExport bool
var preferDelta bool var preferDelta bool
var preferSpanMetrics bool
flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)") flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)")
flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)") flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)")
flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)") flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)")
flag.BoolVar(&preferDelta, "prefer-delta", false, "(prefer delta over raw metrics)") flag.BoolVar(&preferDelta, "prefer-delta", false, "(prefer delta over cumulative metrics)")
flag.BoolVar(&preferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)")
flag.StringVar(&ruleRepoURL, "rules.repo-url", baseconst.AlertHelpPage, "(host address used to build rule link in alert messages)") flag.StringVar(&ruleRepoURL, "rules.repo-url", baseconst.AlertHelpPage, "(host address used to build rule link in alert messages)")
flag.BoolVar(&enableQueryServiceLogOTLPExport, "enable.query.service.log.otlp.export", false, "(enable query service log otlp export)") flag.BoolVar(&enableQueryServiceLogOTLPExport, "enable.query.service.log.otlp.export", false, "(enable query service log otlp export)")
flag.Parse() flag.Parse()
@ -105,6 +107,7 @@ func main() {
PromConfigPath: promConfigPath, PromConfigPath: promConfigPath,
SkipTopLvlOpsPath: skipTopLvlOpsPath, SkipTopLvlOpsPath: skipTopLvlOpsPath,
PreferDelta: preferDelta, PreferDelta: preferDelta,
PreferSpanMetrics: preferSpanMetrics,
PrivateHostPort: baseconst.PrivateHostPort, PrivateHostPort: baseconst.PrivateHostPort,
DisableRules: disableRules, DisableRules: disableRules,
RuleRepoURL: ruleRepoURL, RuleRepoURL: ruleRepoURL,

View File

@ -60,6 +60,13 @@ var BasicPlan = basemodel.FeatureSet{
UsageLimit: 5, UsageLimit: 5,
Route: "", Route: "",
}, },
basemodel.Feature{
Name: basemodel.UseSpanMetrics,
Active: false,
Usage: 0,
UsageLimit: -1,
Route: "",
},
} }
var ProPlan = basemodel.FeatureSet{ var ProPlan = basemodel.FeatureSet{
@ -105,6 +112,13 @@ var ProPlan = basemodel.FeatureSet{
UsageLimit: -1, UsageLimit: -1,
Route: "", Route: "",
}, },
basemodel.Feature{
Name: basemodel.UseSpanMetrics,
Active: false,
Usage: 0,
UsageLimit: -1,
Route: "",
},
} }
var EnterprisePlan = basemodel.FeatureSet{ var EnterprisePlan = basemodel.FeatureSet{
@ -150,4 +164,11 @@ var EnterprisePlan = basemodel.FeatureSet{
UsageLimit: -1, UsageLimit: -1,
Route: "", Route: "",
}, },
basemodel.Feature{
Name: basemodel.UseSpanMetrics,
Active: false,
Usage: 0,
UsageLimit: -1,
Route: "",
},
} }

View File

@ -72,6 +72,7 @@ type APIHandler struct {
ready func(http.HandlerFunc) http.HandlerFunc ready func(http.HandlerFunc) http.HandlerFunc
queryBuilder *queryBuilder.QueryBuilder queryBuilder *queryBuilder.QueryBuilder
preferDelta bool preferDelta bool
preferSpanMetrics bool
// SetupCompleted indicates if SigNoz is ready for general use. // SetupCompleted indicates if SigNoz is ready for general use.
// at the moment, we mark the app ready when the first user // at the moment, we mark the app ready when the first user
@ -87,6 +88,7 @@ type APIHandlerOpts struct {
SkipConfig *model.SkipConfig SkipConfig *model.SkipConfig
PerferDelta bool PerferDelta bool
PreferSpanMetrics bool
// dao layer to perform crud on app objects like dashboard, alerts etc // dao layer to perform crud on app objects like dashboard, alerts etc
AppDao dao.ModelDao AppDao dao.ModelDao
@ -110,6 +112,7 @@ func NewAPIHandler(opts APIHandlerOpts) (*APIHandler, error) {
appDao: opts.AppDao, appDao: opts.AppDao,
skipConfig: opts.SkipConfig, skipConfig: opts.SkipConfig,
preferDelta: opts.PerferDelta, preferDelta: opts.PerferDelta,
preferSpanMetrics: opts.PreferSpanMetrics,
alertManager: alertManager, alertManager: alertManager,
ruleManager: opts.RuleManager, ruleManager: opts.RuleManager,
featureFlags: opts.FeatureFlags, featureFlags: opts.FeatureFlags,
@ -1668,6 +1671,14 @@ func (aH *APIHandler) getFeatureFlags(w http.ResponseWriter, r *http.Request) {
aH.HandleError(w, err, http.StatusInternalServerError) aH.HandleError(w, err, http.StatusInternalServerError)
return return
} }
if aH.preferSpanMetrics {
for idx := range featureSet {
feature := &featureSet[idx]
if feature.Name == model.UseSpanMetrics {
featureSet[idx].Active = true
}
}
}
aH.Respond(w, featureSet) aH.Respond(w, featureSet)
} }

View File

@ -49,6 +49,7 @@ type ServerOptions struct {
DisableRules bool DisableRules bool
RuleRepoURL string RuleRepoURL string
PreferDelta bool PreferDelta bool
PreferSpanMetrics bool
} }
// Server runs HTTP, Mux and a grpc server // Server runs HTTP, Mux and a grpc server
@ -127,6 +128,7 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
Reader: reader, Reader: reader,
SkipConfig: skipConfig, SkipConfig: skipConfig,
PerferDelta: serverOptions.PreferDelta, PerferDelta: serverOptions.PreferDelta,
PreferSpanMetrics: serverOptions.PreferSpanMetrics,
AppDao: dao.DB(), AppDao: dao.DB(),
RuleManager: rm, RuleManager: rm,
FeatureFlags: fm, FeatureFlags: fm,

View File

@ -87,6 +87,13 @@ var DEFAULT_FEATURE_SET = model.FeatureSet{
UsageLimit: -1, UsageLimit: -1,
Route: "", Route: "",
}, },
model.Feature{
Name: model.UseSpanMetrics,
Active: false,
Usage: 0,
UsageLimit: -1,
Route: "",
},
} }
func GetContextTimeout() time.Duration { func GetContextTimeout() time.Duration {

View File

@ -35,11 +35,13 @@ func main() {
var ruleRepoURL string var ruleRepoURL string
var preferDelta bool var preferDelta bool
var preferSpanMetrics bool
flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)") flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)")
flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)") flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)")
flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)") flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)")
flag.BoolVar(&preferDelta, "prefer-delta", false, "(prefer delta over gauge)") flag.BoolVar(&preferDelta, "prefer-delta", false, "(prefer delta over cumulative metrics)")
flag.BoolVar(&preferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)")
flag.StringVar(&ruleRepoURL, "rules.repo-url", constants.AlertHelpPage, "(host address used to build rule link in alert messages)") flag.StringVar(&ruleRepoURL, "rules.repo-url", constants.AlertHelpPage, "(host address used to build rule link in alert messages)")
flag.Parse() flag.Parse()
@ -55,6 +57,7 @@ func main() {
PromConfigPath: promConfigPath, PromConfigPath: promConfigPath,
SkipTopLvlOpsPath: skipTopLvlOpsPath, SkipTopLvlOpsPath: skipTopLvlOpsPath,
PreferDelta: preferDelta, PreferDelta: preferDelta,
PreferSpanMetrics: preferSpanMetrics,
PrivateHostPort: constants.PrivateHostPort, PrivateHostPort: constants.PrivateHostPort,
DisableRules: disableRules, DisableRules: disableRules,
RuleRepoURL: ruleRepoURL, RuleRepoURL: ruleRepoURL,

View File

@ -14,3 +14,4 @@ const CustomMetricsFunction = "CUSTOM_METRICS_FUNCTION"
const OSS = "OSS" const OSS = "OSS"
const QueryBuilderPanels = "QUERY_BUILDER_PANELS" const QueryBuilderPanels = "QUERY_BUILDER_PANELS"
const QueryBuilderAlerts = "QUERY_BUILDER_ALERTS" const QueryBuilderAlerts = "QUERY_BUILDER_ALERTS"
const UseSpanMetrics = "USE_SPAN_METRICS"