2021-01-03 18:15:44 +05:30
package main
import (
2022-05-03 15:26:32 +05:30
"context"
2022-07-14 11:59:06 +05:30
"flag"
2021-01-03 18:15:44 +05:30
"os"
2023-08-10 17:20:34 +05:30
"time"
2021-01-03 18:15:44 +05:30
2025-03-20 21:01:41 +05:30
"github.com/SigNoz/signoz/pkg/config"
"github.com/SigNoz/signoz/pkg/config/envprovider"
"github.com/SigNoz/signoz/pkg/config/fileprovider"
"github.com/SigNoz/signoz/pkg/query-service/app"
"github.com/SigNoz/signoz/pkg/query-service/constants"
"github.com/SigNoz/signoz/pkg/signoz"
"github.com/SigNoz/signoz/pkg/types/authtypes"
2025-03-24 14:38:48 +05:30
"github.com/SigNoz/signoz/pkg/version"
2025-04-28 19:50:47 +05:30
"github.com/SigNoz/signoz/pkg/zeus"
"github.com/SigNoz/signoz/pkg/zeus/noopzeus"
2021-01-03 18:15:44 +05:30
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func initZapLog ( ) * zap . Logger {
2024-03-27 00:07:29 +05:30
config := zap . NewProductionConfig ( )
2021-01-03 18:15:44 +05:30
config . EncoderConfig . TimeKey = "timestamp"
config . EncoderConfig . EncodeTime = zapcore . ISO8601TimeEncoder
logger , _ := config . Build ( )
return logger
}
func main ( ) {
2023-06-30 06:58:22 +05:30
var promConfigPath , skipTopLvlOpsPath string
2022-07-14 11:59:06 +05:30
// disables rule execution but allows change to the rule definition
var disableRules bool
2024-09-12 10:58:07 +05:30
var useLogsNewSchema bool
2024-11-22 12:00:29 +05:30
var useTraceNewSchema bool
2022-07-14 11:59:06 +05:30
// the url used to build link in the alert messages in slack and other systems
2025-01-24 00:16:38 +05:30
var ruleRepoURL , cacheConfigPath , fluxInterval , fluxIntervalForTraceDetail string
2023-10-20 12:37:45 +05:30
var cluster string
2022-07-14 11:59:06 +05:30
2023-07-14 11:31:44 +05:30
var preferSpanMetrics bool
2023-07-13 18:50:19 +05:30
2023-08-10 17:20:34 +05:30
var maxIdleConns int
var maxOpenConns int
var dialTimeout time . Duration
2025-04-28 21:01:35 +05:30
// Deprecated
2024-09-12 10:58:07 +05:30
flag . BoolVar ( & useLogsNewSchema , "use-logs-new-schema" , false , "use logs_v2 schema for logs" )
2025-04-28 21:01:35 +05:30
// Deprecated
2024-11-22 12:00:29 +05:30
flag . BoolVar ( & useTraceNewSchema , "use-trace-new-schema" , false , "use new schema for traces" )
2025-04-28 14:57:26 +05:30
// Deprecated
2022-07-14 11:59:06 +05:30
flag . StringVar ( & promConfigPath , "config" , "./config/prometheus.yml" , "(prometheus config to read metrics)" )
2025-04-28 14:57:26 +05:30
// Deprecated
2023-06-30 06:58:22 +05:30
flag . StringVar ( & skipTopLvlOpsPath , "skip-top-level-ops" , "" , "(config file to skip top level operations)" )
2025-04-28 14:57:26 +05:30
// Deprecated
2022-07-14 11:59:06 +05:30
flag . BoolVar ( & disableRules , "rules.disable" , false , "(disable rule evaluation)" )
2023-07-14 11:31:44 +05:30
flag . BoolVar ( & preferSpanMetrics , "prefer-span-metrics" , false , "(prefer span metrics for service level metrics)" )
2025-04-28 14:57:26 +05:30
// Deprecated
2022-07-14 11:59:06 +05:30
flag . StringVar ( & ruleRepoURL , "rules.repo-url" , constants . AlertHelpPage , "(host address used to build rule link in alert messages)" )
2023-09-17 10:40:45 +05:30
flag . StringVar ( & cacheConfigPath , "experimental.cache-config" , "" , "(cache config to use)" )
2024-06-25 10:10:33 +05:30
flag . StringVar ( & fluxInterval , "flux-interval" , "5m" , "(the interval to exclude data from being cached to avoid incorrect cache for data in motion)" )
2025-01-24 00:16:38 +05:30
flag . StringVar ( & fluxIntervalForTraceDetail , "flux-interval-trace-detail" , "2m" , "(the interval to exclude data from being cached to avoid incorrect cache for trace data in motion)" )
2023-10-20 12:37:45 +05:30
flag . StringVar ( & cluster , "cluster" , "cluster" , "(cluster name - defaults to 'cluster')" )
2024-05-22 15:12:13 +08:00
// Allow using the consistent naming with the signoz collector
flag . StringVar ( & cluster , "cluster-name" , "cluster" , "(cluster name - defaults to 'cluster')" )
2025-04-28 14:57:26 +05:30
// Deprecated
2024-02-28 02:11:00 +08:00
flag . IntVar ( & maxIdleConns , "max-idle-conns" , 50 , "(number of connections to maintain in the pool, only used with clickhouse if not set in ClickHouseUrl env var DSN.)" )
2025-04-28 14:57:26 +05:30
// Deprecated
2024-02-28 02:11:00 +08:00
flag . IntVar ( & maxOpenConns , "max-open-conns" , 100 , "(max connections for use at any time, only used with clickhouse if not set in ClickHouseUrl env var DSN.)" )
2025-04-28 14:57:26 +05:30
// Deprecated
2024-02-28 02:11:00 +08:00
flag . DurationVar ( & dialTimeout , "dial-timeout" , 5 * time . Second , "(the maximum time to establish a connection, only used with clickhouse if not set in ClickHouseUrl env var DSN.)" )
2022-07-14 11:59:06 +05:30
flag . Parse ( )
2021-01-03 18:15:44 +05:30
loggerMgr := initZapLog ( )
zap . ReplaceGlobals ( loggerMgr )
defer loggerMgr . Sync ( ) // flushes buffer, if any
logger := loggerMgr . Sugar ( )
2025-01-20 17:45:33 +05:30
config , err := signoz . NewConfig ( context . Background ( ) , config . ResolverConfig {
Uris : [ ] string { "env:" } ,
ProviderFactories : [ ] config . ProviderFactory {
envprovider . NewFactory ( ) ,
fileprovider . NewFactory ( ) ,
} ,
2025-01-30 15:51:55 +05:30
} , signoz . DeprecatedFlags {
MaxIdleConns : maxIdleConns ,
MaxOpenConns : maxOpenConns ,
DialTimeout : dialTimeout ,
2025-03-31 19:41:11 +05:30
Config : promConfigPath ,
2025-01-20 17:45:33 +05:30
} )
if err != nil {
zap . L ( ) . Fatal ( "Failed to create config" , zap . Error ( err ) )
}
2025-03-24 14:38:48 +05:30
version . Info . PrettyPrint ( config . Version )
2025-03-10 01:30:42 +05:30
signoz , err := signoz . New (
context . Background ( ) ,
config ,
2025-04-28 19:50:47 +05:30
zeus . Config { } ,
noopzeus . NewProviderFactory ( ) ,
2025-03-10 01:30:42 +05:30
signoz . NewCacheProviderFactories ( ) ,
signoz . NewWebProviderFactories ( ) ,
signoz . NewSQLStoreProviderFactories ( ) ,
signoz . NewTelemetryStoreProviderFactories ( ) ,
)
2025-01-20 17:45:33 +05:30
if err != nil {
2025-03-31 19:41:11 +05:30
zap . L ( ) . Fatal ( "Failed to create signoz" , zap . Error ( err ) )
2025-01-20 17:45:33 +05:30
}
2025-02-17 18:16:41 +05:30
// Read the jwt secret key
jwtSecret := os . Getenv ( "SIGNOZ_JWT_SECRET" )
if len ( jwtSecret ) == 0 {
zap . L ( ) . Warn ( "No JWT secret key is specified." )
} else {
zap . L ( ) . Info ( "JWT secret key set successfully." )
}
jwt := authtypes . NewJWT ( jwtSecret , 30 * time . Minute , 30 * 24 * time . Hour )
2021-01-03 18:15:44 +05:30
serverOptions := & app . ServerOptions {
2025-01-24 00:16:38 +05:30
Config : config ,
HTTPHostPort : constants . HTTPHostPort ,
PreferSpanMetrics : preferSpanMetrics ,
PrivateHostPort : constants . PrivateHostPort ,
CacheConfigPath : cacheConfigPath ,
FluxInterval : fluxInterval ,
FluxIntervalForTraceDetail : fluxIntervalForTraceDetail ,
Cluster : cluster ,
SigNoz : signoz ,
2025-02-17 18:16:41 +05:30
Jwt : jwt ,
2022-05-03 15:26:32 +05:30
}
2021-01-03 18:15:44 +05:30
server , err := app . NewServer ( serverOptions )
if err != nil {
logger . Fatal ( "Failed to create server" , zap . Error ( err ) )
}
2025-04-18 00:04:25 +05:30
if err := server . Start ( context . Background ( ) ) ; err != nil {
2021-01-03 18:15:44 +05:30
logger . Fatal ( "Could not start servers" , zap . Error ( err ) )
}
2025-03-10 01:30:42 +05:30
signoz . Start ( context . Background ( ) )
if err := signoz . Wait ( context . Background ( ) ) ; err != nil {
zap . L ( ) . Fatal ( "Failed to start signoz" , zap . Error ( err ) )
}
2025-04-18 00:04:25 +05:30
err = server . Stop ( context . Background ( ) )
2025-03-10 01:30:42 +05:30
if err != nil {
zap . L ( ) . Fatal ( "Failed to stop server" , zap . Error ( err ) )
}
err = signoz . Stop ( context . Background ( ) )
if err != nil {
zap . L ( ) . Fatal ( "Failed to stop signoz" , zap . Error ( err ) )
2021-01-03 18:15:44 +05:30
}
}