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"
"os/signal"
"syscall"
2023-08-10 17:20:34 +05:30
"time"
2021-01-03 18:15:44 +05:30
2022-10-06 20:13:30 +05:30
"go.signoz.io/signoz/pkg/query-service/app"
"go.signoz.io/signoz/pkg/query-service/auth"
"go.signoz.io/signoz/pkg/query-service/constants"
2024-05-17 07:45:03 +05:30
"go.signoz.io/signoz/pkg/query-service/migrate"
2022-10-06 20:13:30 +05:30
"go.signoz.io/signoz/pkg/query-service/version"
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 . EncodeLevel = zapcore . CapitalColorLevelEncoder
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
2022-07-14 11:59:06 +05:30
// the url used to build link in the alert messages in slack and other systems
2023-09-17 10:40:45 +05:30
var ruleRepoURL , cacheConfigPath , fluxInterval 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
2024-09-12 10:58:07 +05:30
flag . BoolVar ( & useLogsNewSchema , "use-logs-new-schema" , false , "use logs_v2 schema for logs" )
2022-07-14 11:59:06 +05:30
flag . StringVar ( & promConfigPath , "config" , "./config/prometheus.yml" , "(prometheus config to read metrics)" )
2023-06-30 06:58:22 +05:30
flag . StringVar ( & skipTopLvlOpsPath , "skip-top-level-ops" , "" , "(config file to skip top level operations)" )
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)" )
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)" )
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')" )
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.)" )
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.)" )
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 ( )
2022-02-01 23:03:16 +05:30
version . PrintVersion ( )
2021-01-03 18:15:44 +05:30
serverOptions := & app . ServerOptions {
2023-06-30 06:58:22 +05:30
HTTPHostPort : constants . HTTPHostPort ,
PromConfigPath : promConfigPath ,
SkipTopLvlOpsPath : skipTopLvlOpsPath ,
2023-07-14 11:31:44 +05:30
PreferSpanMetrics : preferSpanMetrics ,
2023-06-30 06:58:22 +05:30
PrivateHostPort : constants . PrivateHostPort ,
DisableRules : disableRules ,
RuleRepoURL : ruleRepoURL ,
2023-08-10 17:20:34 +05:30
MaxIdleConns : maxIdleConns ,
MaxOpenConns : maxOpenConns ,
DialTimeout : dialTimeout ,
2023-09-17 10:40:45 +05:30
CacheConfigPath : cacheConfigPath ,
FluxInterval : fluxInterval ,
2023-10-20 12:37:45 +05:30
Cluster : cluster ,
2024-09-12 10:58:07 +05:30
UseLogsNewSchema : useLogsNewSchema ,
2021-01-03 18:15:44 +05:30
}
2022-05-03 15:26:32 +05:30
// Read the jwt secret key
auth . JwtSecret = os . Getenv ( "SIGNOZ_JWT_SECRET" )
if len ( auth . JwtSecret ) == 0 {
2024-03-27 00:07:29 +05:30
zap . L ( ) . Warn ( "No JWT secret key is specified." )
2022-05-03 15:26:32 +05:30
} else {
2024-04-02 23:09:05 +08:00
zap . L ( ) . Info ( "JWT secret key set successfully." )
2022-05-03 15:26:32 +05:30
}
2024-05-17 07:45:03 +05:30
if err := migrate . Migrate ( constants . RELATIONAL_DATASOURCE_PATH ) ; err != nil {
zap . L ( ) . Error ( "Failed to migrate" , zap . Error ( err ) )
} else {
zap . L ( ) . Info ( "Migration successful" )
}
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 ) )
}
if err := server . Start ( ) ; err != nil {
logger . Fatal ( "Could not start servers" , zap . Error ( err ) )
}
2022-05-03 15:26:32 +05:30
if err := auth . InitAuthCache ( context . Background ( ) ) ; err != nil {
logger . Fatal ( "Failed to initialize auth cache" , zap . Error ( err ) )
}
2021-01-03 18:15:44 +05:30
signalsChannel := make ( chan os . Signal , 1 )
signal . Notify ( signalsChannel , os . Interrupt , syscall . SIGTERM )
for {
select {
case status := <- server . HealthCheckStatus ( ) :
logger . Info ( "Received HealthCheck status: " , zap . Int ( "status" , int ( status ) ) )
case <- signalsChannel :
2023-03-15 15:09:15 +05:30
logger . Info ( "Received OS Interrupt Signal ... " )
err := server . Stop ( )
if err != nil {
logger . Fatal ( "Failed to stop server" , zap . Error ( err ) )
}
logger . Info ( "Server stopped" )
return
2021-01-03 18:15:44 +05:30
}
}
}