mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
feat(cmd): add cmd package (#8535)
This commit is contained in:
parent
629e502703
commit
ebb2f1fd63
4
.github/workflows/build-community.yaml
vendored
4
.github/workflows/build-community.yaml
vendored
@ -66,7 +66,7 @@ jobs:
|
|||||||
GO_NAME: signoz-community
|
GO_NAME: signoz-community
|
||||||
GO_INPUT_ARTIFACT_CACHE_KEY: community-jsbuild-${{ github.sha }}
|
GO_INPUT_ARTIFACT_CACHE_KEY: community-jsbuild-${{ github.sha }}
|
||||||
GO_INPUT_ARTIFACT_PATH: frontend/build
|
GO_INPUT_ARTIFACT_PATH: frontend/build
|
||||||
GO_BUILD_CONTEXT: ./pkg/query-service
|
GO_BUILD_CONTEXT: ./cmd/community
|
||||||
GO_BUILD_FLAGS: >-
|
GO_BUILD_FLAGS: >-
|
||||||
-tags timetzdata
|
-tags timetzdata
|
||||||
-ldflags='-linkmode external -extldflags \"-static\" -s -w
|
-ldflags='-linkmode external -extldflags \"-static\" -s -w
|
||||||
@ -78,6 +78,6 @@ jobs:
|
|||||||
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
|
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
|
||||||
GO_CGO_ENABLED: 1
|
GO_CGO_ENABLED: 1
|
||||||
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
|
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
|
||||||
DOCKER_DOCKERFILE_PATH: ./pkg/query-service/Dockerfile.multi-arch
|
DOCKER_DOCKERFILE_PATH: ./cmd/community/Dockerfile.multi-arch
|
||||||
DOCKER_MANIFEST: true
|
DOCKER_MANIFEST: true
|
||||||
DOCKER_PROVIDERS: dockerhub
|
DOCKER_PROVIDERS: dockerhub
|
||||||
|
|||||||
4
.github/workflows/build-enterprise.yaml
vendored
4
.github/workflows/build-enterprise.yaml
vendored
@ -96,7 +96,7 @@ jobs:
|
|||||||
GO_VERSION: 1.23
|
GO_VERSION: 1.23
|
||||||
GO_INPUT_ARTIFACT_CACHE_KEY: enterprise-jsbuild-${{ github.sha }}
|
GO_INPUT_ARTIFACT_CACHE_KEY: enterprise-jsbuild-${{ github.sha }}
|
||||||
GO_INPUT_ARTIFACT_PATH: frontend/build
|
GO_INPUT_ARTIFACT_PATH: frontend/build
|
||||||
GO_BUILD_CONTEXT: ./ee/query-service
|
GO_BUILD_CONTEXT: ./cmd/enterprise
|
||||||
GO_BUILD_FLAGS: >-
|
GO_BUILD_FLAGS: >-
|
||||||
-tags timetzdata
|
-tags timetzdata
|
||||||
-ldflags='-linkmode external -extldflags \"-static\" -s -w
|
-ldflags='-linkmode external -extldflags \"-static\" -s -w
|
||||||
@ -112,6 +112,6 @@ jobs:
|
|||||||
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
|
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
|
||||||
GO_CGO_ENABLED: 1
|
GO_CGO_ENABLED: 1
|
||||||
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
|
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
|
||||||
DOCKER_DOCKERFILE_PATH: ./ee/query-service/Dockerfile.multi-arch
|
DOCKER_DOCKERFILE_PATH: ./cmd/enterprise/Dockerfile.multi-arch
|
||||||
DOCKER_MANIFEST: true
|
DOCKER_MANIFEST: true
|
||||||
DOCKER_PROVIDERS: ${{ needs.prepare.outputs.docker_providers }}
|
DOCKER_PROVIDERS: ${{ needs.prepare.outputs.docker_providers }}
|
||||||
|
|||||||
4
.github/workflows/build-staging.yaml
vendored
4
.github/workflows/build-staging.yaml
vendored
@ -95,7 +95,7 @@ jobs:
|
|||||||
GO_VERSION: 1.23
|
GO_VERSION: 1.23
|
||||||
GO_INPUT_ARTIFACT_CACHE_KEY: staging-jsbuild-${{ github.sha }}
|
GO_INPUT_ARTIFACT_CACHE_KEY: staging-jsbuild-${{ github.sha }}
|
||||||
GO_INPUT_ARTIFACT_PATH: frontend/build
|
GO_INPUT_ARTIFACT_PATH: frontend/build
|
||||||
GO_BUILD_CONTEXT: ./ee/query-service
|
GO_BUILD_CONTEXT: ./cmd/enterprise
|
||||||
GO_BUILD_FLAGS: >-
|
GO_BUILD_FLAGS: >-
|
||||||
-tags timetzdata
|
-tags timetzdata
|
||||||
-ldflags='-linkmode external -extldflags \"-static\" -s -w
|
-ldflags='-linkmode external -extldflags \"-static\" -s -w
|
||||||
@ -111,7 +111,7 @@ jobs:
|
|||||||
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
|
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
|
||||||
GO_CGO_ENABLED: 1
|
GO_CGO_ENABLED: 1
|
||||||
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
|
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
|
||||||
DOCKER_DOCKERFILE_PATH: ./ee/query-service/Dockerfile.multi-arch
|
DOCKER_DOCKERFILE_PATH: ./cmd/enterprise/Dockerfile.multi-arch
|
||||||
DOCKER_MANIFEST: true
|
DOCKER_MANIFEST: true
|
||||||
DOCKER_PROVIDERS: gcp
|
DOCKER_PROVIDERS: gcp
|
||||||
staging:
|
staging:
|
||||||
|
|||||||
4
.github/workflows/gor-signoz-community.yaml
vendored
4
.github/workflows/gor-signoz-community.yaml
vendored
@ -36,7 +36,7 @@ jobs:
|
|||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
- macos-latest
|
- macos-latest
|
||||||
env:
|
env:
|
||||||
CONFIG_PATH: pkg/query-service/.goreleaser.yaml
|
CONFIG_PATH: cmd/community/.goreleaser.yaml
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
@ -100,7 +100,7 @@ jobs:
|
|||||||
needs: build
|
needs: build
|
||||||
env:
|
env:
|
||||||
DOCKER_CLI_EXPERIMENTAL: "enabled"
|
DOCKER_CLI_EXPERIMENTAL: "enabled"
|
||||||
WORKDIR: pkg/query-service
|
WORKDIR: cmd/community
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|||||||
2
.github/workflows/gor-signoz.yaml
vendored
2
.github/workflows/gor-signoz.yaml
vendored
@ -50,7 +50,7 @@ jobs:
|
|||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
- macos-latest
|
- macos-latest
|
||||||
env:
|
env:
|
||||||
CONFIG_PATH: ee/query-service/.goreleaser.yaml
|
CONFIG_PATH: cmd/enterprise/.goreleaser.yaml
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
|
|||||||
2
.github/workflows/integrationci.yaml
vendored
2
.github/workflows/integrationci.yaml
vendored
@ -20,7 +20,7 @@ jobs:
|
|||||||
- sqlite
|
- sqlite
|
||||||
clickhouse-version:
|
clickhouse-version:
|
||||||
- 24.1.2-alpine
|
- 24.1.2-alpine
|
||||||
- 24.12-alpine
|
- 25.5.6
|
||||||
schema-migrator-version:
|
schema-migrator-version:
|
||||||
- v0.128.1
|
- v0.128.1
|
||||||
postgres-version:
|
postgres-version:
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@ -2,7 +2,7 @@ Copyright (c) 2020-present SigNoz Inc.
|
|||||||
|
|
||||||
Portions of this software are licensed as follows:
|
Portions of this software are licensed as follows:
|
||||||
|
|
||||||
* All content that resides under the "ee/" directory of this repository, if that directory exists, is licensed under the license defined in "ee/LICENSE".
|
* All content that resides under the "ee/" and the "cmd/enterprise/" directory of this repository, if that directory exists, is licensed under the license defined in "ee/LICENSE".
|
||||||
* All third party components incorporated into the SigNoz Software are licensed under the original license provided by the owner of the applicable component.
|
* All third party components incorporated into the SigNoz Software are licensed under the original license provided by the owner of the applicable component.
|
||||||
* Content outside of the above mentioned directories or restrictions above is available under the "MIT Expat" license as defined below.
|
* Content outside of the above mentioned directories or restrictions above is available under the "MIT Expat" license as defined below.
|
||||||
|
|
||||||
|
|||||||
12
Makefile
12
Makefile
@ -20,18 +20,18 @@ GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO = -X github.com/SigNoz/signoz/ee/zeus.depreca
|
|||||||
|
|
||||||
GO_BUILD_VERSION_LDFLAGS = -X github.com/SigNoz/signoz/pkg/version.version=$(VERSION) -X github.com/SigNoz/signoz/pkg/version.hash=$(COMMIT_SHORT_SHA) -X github.com/SigNoz/signoz/pkg/version.time=$(TIMESTAMP) -X github.com/SigNoz/signoz/pkg/version.branch=$(BRANCH_NAME)
|
GO_BUILD_VERSION_LDFLAGS = -X github.com/SigNoz/signoz/pkg/version.version=$(VERSION) -X github.com/SigNoz/signoz/pkg/version.hash=$(COMMIT_SHORT_SHA) -X github.com/SigNoz/signoz/pkg/version.time=$(TIMESTAMP) -X github.com/SigNoz/signoz/pkg/version.branch=$(BRANCH_NAME)
|
||||||
GO_BUILD_ARCHS_COMMUNITY = $(addprefix go-build-community-,$(ARCHS))
|
GO_BUILD_ARCHS_COMMUNITY = $(addprefix go-build-community-,$(ARCHS))
|
||||||
GO_BUILD_CONTEXT_COMMUNITY = $(SRC)/pkg/query-service
|
GO_BUILD_CONTEXT_COMMUNITY = $(SRC)/cmd/community
|
||||||
GO_BUILD_LDFLAGS_COMMUNITY = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=community
|
GO_BUILD_LDFLAGS_COMMUNITY = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=community
|
||||||
GO_BUILD_ARCHS_ENTERPRISE = $(addprefix go-build-enterprise-,$(ARCHS))
|
GO_BUILD_ARCHS_ENTERPRISE = $(addprefix go-build-enterprise-,$(ARCHS))
|
||||||
GO_BUILD_ARCHS_ENTERPRISE_RACE = $(addprefix go-build-enterprise-race-,$(ARCHS))
|
GO_BUILD_ARCHS_ENTERPRISE_RACE = $(addprefix go-build-enterprise-race-,$(ARCHS))
|
||||||
GO_BUILD_CONTEXT_ENTERPRISE = $(SRC)/ee/query-service
|
GO_BUILD_CONTEXT_ENTERPRISE = $(SRC)/cmd/enterprise
|
||||||
GO_BUILD_LDFLAGS_ENTERPRISE = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=enterprise $(GO_BUILD_LDFLAG_ZEUS_URL) $(GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO)
|
GO_BUILD_LDFLAGS_ENTERPRISE = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=enterprise $(GO_BUILD_LDFLAG_ZEUS_URL) $(GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO)
|
||||||
|
|
||||||
DOCKER_BUILD_ARCHS_COMMUNITY = $(addprefix docker-build-community-,$(ARCHS))
|
DOCKER_BUILD_ARCHS_COMMUNITY = $(addprefix docker-build-community-,$(ARCHS))
|
||||||
DOCKERFILE_COMMUNITY = $(SRC)/pkg/query-service/Dockerfile
|
DOCKERFILE_COMMUNITY = $(SRC)/cmd/community/Dockerfile
|
||||||
DOCKER_REGISTRY_COMMUNITY ?= docker.io/signoz/signoz-community
|
DOCKER_REGISTRY_COMMUNITY ?= docker.io/signoz/signoz-community
|
||||||
DOCKER_BUILD_ARCHS_ENTERPRISE = $(addprefix docker-build-enterprise-,$(ARCHS))
|
DOCKER_BUILD_ARCHS_ENTERPRISE = $(addprefix docker-build-enterprise-,$(ARCHS))
|
||||||
DOCKERFILE_ENTERPRISE = $(SRC)/ee/query-service/Dockerfile
|
DOCKERFILE_ENTERPRISE = $(SRC)/cmd/enterprise/Dockerfile
|
||||||
DOCKER_REGISTRY_ENTERPRISE ?= docker.io/signoz/signoz
|
DOCKER_REGISTRY_ENTERPRISE ?= docker.io/signoz/signoz
|
||||||
JS_BUILD_CONTEXT = $(SRC)/frontend
|
JS_BUILD_CONTEXT = $(SRC)/frontend
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ go-run-enterprise: ## Runs the enterprise go backend server
|
|||||||
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
|
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
|
||||||
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
|
||||||
go run -race \
|
go run -race \
|
||||||
$(GO_BUILD_CONTEXT_ENTERPRISE)/main.go \
|
$(GO_BUILD_CONTEXT_ENTERPRISE)/*.go \
|
||||||
--config ./conf/prometheus.yml \
|
--config ./conf/prometheus.yml \
|
||||||
--cluster cluster
|
--cluster cluster
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ go-run-community: ## Runs the community go backend server
|
|||||||
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
|
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
|
||||||
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
|
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
|
||||||
go run -race \
|
go run -race \
|
||||||
$(GO_BUILD_CONTEXT_COMMUNITY)/main.go \
|
$(GO_BUILD_CONTEXT_COMMUNITY)/*.go \
|
||||||
--config ./conf/prometheus.yml \
|
--config ./conf/prometheus.yml \
|
||||||
--cluster cluster
|
--cluster cluster
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ before:
|
|||||||
builds:
|
builds:
|
||||||
- id: signoz
|
- id: signoz
|
||||||
binary: bin/signoz
|
binary: bin/signoz
|
||||||
main: pkg/query-service/main.go
|
main: cmd/community
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1
|
- CGO_ENABLED=1
|
||||||
- >-
|
- >-
|
||||||
@ -16,4 +16,4 @@ COPY frontend/build/ /etc/signoz/web/
|
|||||||
|
|
||||||
RUN chmod 755 /root /root/signoz
|
RUN chmod 755 /root /root/signoz
|
||||||
|
|
||||||
ENTRYPOINT ["./signoz"]
|
ENTRYPOINT ["./signoz", "server"]
|
||||||
@ -17,4 +17,4 @@ COPY frontend/build/ /etc/signoz/web/
|
|||||||
|
|
||||||
RUN chmod 755 /root /root/signoz-community
|
RUN chmod 755 /root /root/signoz-community
|
||||||
|
|
||||||
ENTRYPOINT ["./signoz-community"]
|
ENTRYPOINT ["./signoz-community", "server"]
|
||||||
18
cmd/community/main.go
Normal file
18
cmd/community/main.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
|
||||||
|
"github.com/SigNoz/signoz/cmd"
|
||||||
|
"github.com/SigNoz/signoz/pkg/instrumentation"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// initialize logger for logging in the cmd/ package. This logger is different from the logger used in the application.
|
||||||
|
logger := instrumentation.NewLogger(instrumentation.Config{Logs: instrumentation.LogsConfig{Level: slog.LevelInfo}})
|
||||||
|
|
||||||
|
// register a list of commands to the root command
|
||||||
|
registerServer(cmd.RootCmd, logger)
|
||||||
|
|
||||||
|
cmd.Execute(logger)
|
||||||
|
}
|
||||||
116
cmd/community/server.go
Normal file
116
cmd/community/server.go
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log/slog"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/SigNoz/signoz/cmd"
|
||||||
|
"github.com/SigNoz/signoz/ee/sqlstore/postgressqlstore"
|
||||||
|
"github.com/SigNoz/signoz/pkg/analytics"
|
||||||
|
"github.com/SigNoz/signoz/pkg/factory"
|
||||||
|
"github.com/SigNoz/signoz/pkg/licensing"
|
||||||
|
"github.com/SigNoz/signoz/pkg/licensing/nooplicensing"
|
||||||
|
"github.com/SigNoz/signoz/pkg/modules/organization"
|
||||||
|
"github.com/SigNoz/signoz/pkg/query-service/app"
|
||||||
|
"github.com/SigNoz/signoz/pkg/signoz"
|
||||||
|
"github.com/SigNoz/signoz/pkg/sqlschema"
|
||||||
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
||||||
|
"github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
|
||||||
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
||||||
|
"github.com/SigNoz/signoz/pkg/version"
|
||||||
|
"github.com/SigNoz/signoz/pkg/zeus"
|
||||||
|
"github.com/SigNoz/signoz/pkg/zeus/noopzeus"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
func registerServer(parentCmd *cobra.Command, logger *slog.Logger) {
|
||||||
|
var flags signoz.DeprecatedFlags
|
||||||
|
|
||||||
|
serverCmd := &cobra.Command{
|
||||||
|
Use: "server",
|
||||||
|
Short: "Run the SigNoz server",
|
||||||
|
FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
|
||||||
|
RunE: func(currCmd *cobra.Command, args []string) error {
|
||||||
|
config, err := cmd.NewSigNozConfig(currCmd.Context(), flags)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return runServer(currCmd.Context(), config, logger)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
flags.RegisterFlags(serverCmd)
|
||||||
|
parentCmd.AddCommand(serverCmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) error {
|
||||||
|
// print the version
|
||||||
|
version.Info.PrettyPrint(config.Version)
|
||||||
|
|
||||||
|
// add enterprise sqlstore factories to the community sqlstore factories
|
||||||
|
sqlstoreFactories := signoz.NewSQLStoreProviderFactories()
|
||||||
|
if err := sqlstoreFactories.Add(postgressqlstore.NewFactory(sqlstorehook.NewLoggingFactory())); err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to add postgressqlstore factory", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
jwt := authtypes.NewJWT(cmd.NewJWTSecret(ctx, logger), 30*time.Minute, 30*24*time.Hour)
|
||||||
|
|
||||||
|
signoz, err := signoz.New(
|
||||||
|
ctx,
|
||||||
|
config,
|
||||||
|
jwt,
|
||||||
|
zeus.Config{},
|
||||||
|
noopzeus.NewProviderFactory(),
|
||||||
|
licensing.Config{},
|
||||||
|
func(_ sqlstore.SQLStore, _ zeus.Zeus, _ organization.Getter, _ analytics.Analytics) factory.ProviderFactory[licensing.Licensing, licensing.Config] {
|
||||||
|
return nooplicensing.NewFactory()
|
||||||
|
},
|
||||||
|
signoz.NewEmailingProviderFactories(),
|
||||||
|
signoz.NewCacheProviderFactories(),
|
||||||
|
signoz.NewWebProviderFactories(),
|
||||||
|
func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
|
||||||
|
return signoz.NewSQLSchemaProviderFactories(sqlstore)
|
||||||
|
},
|
||||||
|
signoz.NewSQLStoreProviderFactories(),
|
||||||
|
signoz.NewTelemetryStoreProviderFactories(),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to create signoz", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
server, err := app.NewServer(config, signoz, jwt)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to create server", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := server.Start(ctx); err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to start server", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
signoz.Start(ctx)
|
||||||
|
|
||||||
|
if err := signoz.Wait(ctx); err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to start signoz", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = server.Stop(ctx)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to stop server", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = signoz.Stop(ctx)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to stop signoz", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
45
cmd/config.go
Normal file
45
cmd/config.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"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/signoz"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewSigNozConfig(ctx context.Context, flags signoz.DeprecatedFlags) (signoz.Config, error) {
|
||||||
|
config, err := signoz.NewConfig(
|
||||||
|
ctx,
|
||||||
|
config.ResolverConfig{
|
||||||
|
Uris: []string{"env:"},
|
||||||
|
ProviderFactories: []config.ProviderFactory{
|
||||||
|
envprovider.NewFactory(),
|
||||||
|
fileprovider.NewFactory(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
flags,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return signoz.Config{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return config, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewJWTSecret(_ context.Context, _ *slog.Logger) string {
|
||||||
|
jwtSecret := os.Getenv("SIGNOZ_JWT_SECRET")
|
||||||
|
if len(jwtSecret) == 0 {
|
||||||
|
fmt.Println("🚨 CRITICAL SECURITY ISSUE: No JWT secret key specified!")
|
||||||
|
fmt.Println("SIGNOZ_JWT_SECRET environment variable is not set. This has dire consequences for the security of the application.")
|
||||||
|
fmt.Println("Without a JWT secret, user sessions are vulnerable to tampering and unauthorized access.")
|
||||||
|
fmt.Println("Please set the SIGNOZ_JWT_SECRET environment variable immediately.")
|
||||||
|
fmt.Println("For more information, please refer to https://github.com/SigNoz/signoz/issues/8400.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return jwtSecret
|
||||||
|
}
|
||||||
@ -11,7 +11,7 @@ before:
|
|||||||
builds:
|
builds:
|
||||||
- id: signoz
|
- id: signoz
|
||||||
binary: bin/signoz
|
binary: bin/signoz
|
||||||
main: ee/query-service/main.go
|
main: cmd/enterprise
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1
|
- CGO_ENABLED=1
|
||||||
- >-
|
- >-
|
||||||
@ -16,4 +16,4 @@ COPY frontend/build/ /etc/signoz/web/
|
|||||||
|
|
||||||
RUN chmod 755 /root /root/signoz
|
RUN chmod 755 /root /root/signoz
|
||||||
|
|
||||||
ENTRYPOINT ["./signoz"]
|
ENTRYPOINT ["./signoz", "server"]
|
||||||
@ -23,6 +23,7 @@ COPY go.mod go.sum ./
|
|||||||
|
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
|
|
||||||
|
COPY ./cmd/ ./cmd/
|
||||||
COPY ./ee/ ./ee/
|
COPY ./ee/ ./ee/
|
||||||
COPY ./pkg/ ./pkg/
|
COPY ./pkg/ ./pkg/
|
||||||
COPY ./templates/email /root/templates
|
COPY ./templates/email /root/templates
|
||||||
@ -33,4 +34,4 @@ RUN mv /root/linux-${TARGETARCH}/signoz /root/signoz
|
|||||||
|
|
||||||
RUN chmod 755 /root /root/signoz
|
RUN chmod 755 /root /root/signoz
|
||||||
|
|
||||||
ENTRYPOINT ["/root/signoz"]
|
ENTRYPOINT ["/root/signoz", "server"]
|
||||||
@ -17,4 +17,4 @@ COPY frontend/build/ /etc/signoz/web/
|
|||||||
|
|
||||||
RUN chmod 755 /root /root/signoz
|
RUN chmod 755 /root /root/signoz
|
||||||
|
|
||||||
ENTRYPOINT ["./signoz"]
|
ENTRYPOINT ["./signoz", "server"]
|
||||||
18
cmd/enterprise/main.go
Normal file
18
cmd/enterprise/main.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
|
||||||
|
"github.com/SigNoz/signoz/cmd"
|
||||||
|
"github.com/SigNoz/signoz/pkg/instrumentation"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// initialize logger for logging in the cmd/ package. This logger is different from the logger used in the application.
|
||||||
|
logger := instrumentation.NewLogger(instrumentation.Config{Logs: instrumentation.LogsConfig{Level: slog.LevelInfo}})
|
||||||
|
|
||||||
|
// register a list of commands to the root command
|
||||||
|
registerServer(cmd.RootCmd, logger)
|
||||||
|
|
||||||
|
cmd.Execute(logger)
|
||||||
|
}
|
||||||
124
cmd/enterprise/server.go
Normal file
124
cmd/enterprise/server.go
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log/slog"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/SigNoz/signoz/cmd"
|
||||||
|
enterpriselicensing "github.com/SigNoz/signoz/ee/licensing"
|
||||||
|
"github.com/SigNoz/signoz/ee/licensing/httplicensing"
|
||||||
|
enterpriseapp "github.com/SigNoz/signoz/ee/query-service/app"
|
||||||
|
"github.com/SigNoz/signoz/ee/sqlschema/postgressqlschema"
|
||||||
|
"github.com/SigNoz/signoz/ee/sqlstore/postgressqlstore"
|
||||||
|
enterprisezeus "github.com/SigNoz/signoz/ee/zeus"
|
||||||
|
"github.com/SigNoz/signoz/ee/zeus/httpzeus"
|
||||||
|
"github.com/SigNoz/signoz/pkg/analytics"
|
||||||
|
"github.com/SigNoz/signoz/pkg/factory"
|
||||||
|
"github.com/SigNoz/signoz/pkg/licensing"
|
||||||
|
"github.com/SigNoz/signoz/pkg/modules/organization"
|
||||||
|
"github.com/SigNoz/signoz/pkg/signoz"
|
||||||
|
"github.com/SigNoz/signoz/pkg/sqlschema"
|
||||||
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
||||||
|
"github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
|
||||||
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
||||||
|
"github.com/SigNoz/signoz/pkg/version"
|
||||||
|
"github.com/SigNoz/signoz/pkg/zeus"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
func registerServer(parentCmd *cobra.Command, logger *slog.Logger) {
|
||||||
|
var flags signoz.DeprecatedFlags
|
||||||
|
|
||||||
|
serverCmd := &cobra.Command{
|
||||||
|
Use: "server",
|
||||||
|
Short: "Run the SigNoz server",
|
||||||
|
FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
|
||||||
|
RunE: func(currCmd *cobra.Command, args []string) error {
|
||||||
|
config, err := cmd.NewSigNozConfig(currCmd.Context(), flags)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return runServer(currCmd.Context(), config, logger)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
flags.RegisterFlags(serverCmd)
|
||||||
|
parentCmd.AddCommand(serverCmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) error {
|
||||||
|
// print the version
|
||||||
|
version.Info.PrettyPrint(config.Version)
|
||||||
|
|
||||||
|
// add enterprise sqlstore factories to the community sqlstore factories
|
||||||
|
sqlstoreFactories := signoz.NewSQLStoreProviderFactories()
|
||||||
|
if err := sqlstoreFactories.Add(postgressqlstore.NewFactory(sqlstorehook.NewLoggingFactory())); err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to add postgressqlstore factory", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
jwt := authtypes.NewJWT(cmd.NewJWTSecret(ctx, logger), 30*time.Minute, 30*24*time.Hour)
|
||||||
|
|
||||||
|
signoz, err := signoz.New(
|
||||||
|
ctx,
|
||||||
|
config,
|
||||||
|
jwt,
|
||||||
|
enterprisezeus.Config(),
|
||||||
|
httpzeus.NewProviderFactory(),
|
||||||
|
enterpriselicensing.Config(24*time.Hour, 3),
|
||||||
|
func(sqlstore sqlstore.SQLStore, zeus zeus.Zeus, orgGetter organization.Getter, analytics analytics.Analytics) factory.ProviderFactory[licensing.Licensing, licensing.Config] {
|
||||||
|
return httplicensing.NewProviderFactory(sqlstore, zeus, orgGetter, analytics)
|
||||||
|
},
|
||||||
|
signoz.NewEmailingProviderFactories(),
|
||||||
|
signoz.NewCacheProviderFactories(),
|
||||||
|
signoz.NewWebProviderFactories(),
|
||||||
|
func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
|
||||||
|
existingFactories := signoz.NewSQLSchemaProviderFactories(sqlstore)
|
||||||
|
if err := existingFactories.Add(postgressqlschema.NewFactory(sqlstore)); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return existingFactories
|
||||||
|
},
|
||||||
|
sqlstoreFactories,
|
||||||
|
signoz.NewTelemetryStoreProviderFactories(),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to create signoz", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
server, err := enterpriseapp.NewServer(config, signoz, jwt)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to create server", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := server.Start(ctx); err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to start server", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
signoz.Start(ctx)
|
||||||
|
|
||||||
|
if err := signoz.Wait(ctx); err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to start signoz", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = server.Stop(ctx)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to stop server", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = signoz.Stop(ctx)
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(ctx, "failed to stop signoz", "error", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
33
cmd/root.go
Normal file
33
cmd/root.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/SigNoz/signoz/pkg/version"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"go.uber.org/zap" //nolint:depguard
|
||||||
|
)
|
||||||
|
|
||||||
|
var RootCmd = &cobra.Command{
|
||||||
|
Use: "signoz",
|
||||||
|
Short: "OpenTelemetry-Native Logs, Metrics and Traces in a single pane",
|
||||||
|
Version: version.Info.Version(),
|
||||||
|
SilenceUsage: true,
|
||||||
|
SilenceErrors: true,
|
||||||
|
CompletionOptions: cobra.CompletionOptions{DisableDefaultCmd: true},
|
||||||
|
}
|
||||||
|
|
||||||
|
func Execute(logger *slog.Logger) {
|
||||||
|
zapLogger := newZapLogger()
|
||||||
|
zap.ReplaceGlobals(zapLogger)
|
||||||
|
defer func() {
|
||||||
|
_ = zapLogger.Sync()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err := RootCmd.Execute()
|
||||||
|
if err != nil {
|
||||||
|
logger.ErrorContext(RootCmd.Context(), "error running command", "error", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
15
cmd/zap.go
Normal file
15
cmd/zap.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go.uber.org/zap" //nolint:depguard
|
||||||
|
"go.uber.org/zap/zapcore" //nolint:depguard
|
||||||
|
)
|
||||||
|
|
||||||
|
// Deprecated: Use `NewLogger` from `pkg/instrumentation` instead.
|
||||||
|
func newZapLogger() *zap.Logger {
|
||||||
|
config := zap.NewProductionConfig()
|
||||||
|
config.EncoderConfig.TimeKey = "timestamp"
|
||||||
|
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
||||||
|
logger, _ := config.Build()
|
||||||
|
return logger
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
.vscode
|
|
||||||
README.md
|
|
||||||
signoz.db
|
|
||||||
bin
|
|
||||||
@ -1,189 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/ee/licensing"
|
|
||||||
"github.com/SigNoz/signoz/ee/licensing/httplicensing"
|
|
||||||
"github.com/SigNoz/signoz/ee/query-service/app"
|
|
||||||
"github.com/SigNoz/signoz/ee/sqlschema/postgressqlschema"
|
|
||||||
"github.com/SigNoz/signoz/ee/sqlstore/postgressqlstore"
|
|
||||||
"github.com/SigNoz/signoz/ee/zeus"
|
|
||||||
"github.com/SigNoz/signoz/ee/zeus/httpzeus"
|
|
||||||
"github.com/SigNoz/signoz/pkg/analytics"
|
|
||||||
"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/factory"
|
|
||||||
pkglicensing "github.com/SigNoz/signoz/pkg/licensing"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/organization"
|
|
||||||
baseconst "github.com/SigNoz/signoz/pkg/query-service/constants"
|
|
||||||
"github.com/SigNoz/signoz/pkg/signoz"
|
|
||||||
"github.com/SigNoz/signoz/pkg/sqlschema"
|
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore"
|
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/version"
|
|
||||||
pkgzeus "github.com/SigNoz/signoz/pkg/zeus"
|
|
||||||
|
|
||||||
"go.uber.org/zap"
|
|
||||||
"go.uber.org/zap/zapcore"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Deprecated: Please use the logger from pkg/instrumentation.
|
|
||||||
func initZapLog() *zap.Logger {
|
|
||||||
config := zap.NewProductionConfig()
|
|
||||||
config.EncoderConfig.TimeKey = "timestamp"
|
|
||||||
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
||||||
logger, _ := config.Build()
|
|
||||||
return logger
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var promConfigPath, skipTopLvlOpsPath string
|
|
||||||
|
|
||||||
// disables rule execution but allows change to the rule definition
|
|
||||||
var disableRules bool
|
|
||||||
|
|
||||||
// the url used to build link in the alert messages in slack and other systems
|
|
||||||
var ruleRepoURL string
|
|
||||||
var cluster string
|
|
||||||
|
|
||||||
var useLogsNewSchema bool
|
|
||||||
var useTraceNewSchema bool
|
|
||||||
var cacheConfigPath, fluxInterval, fluxIntervalForTraceDetail string
|
|
||||||
var preferSpanMetrics bool
|
|
||||||
|
|
||||||
var maxIdleConns int
|
|
||||||
var maxOpenConns int
|
|
||||||
var dialTimeout time.Duration
|
|
||||||
var gatewayUrl string
|
|
||||||
var useLicensesV3 bool
|
|
||||||
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&useLogsNewSchema, "use-logs-new-schema", false, "use logs_v2 schema for logs")
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&useTraceNewSchema, "use-trace-new-schema", false, "use new schema for traces")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)")
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)")
|
|
||||||
flag.BoolVar(&preferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)")
|
|
||||||
// Deprecated
|
|
||||||
flag.IntVar(&maxIdleConns, "max-idle-conns", 50, "(number of connections to maintain in the pool.)")
|
|
||||||
// Deprecated
|
|
||||||
flag.IntVar(&maxOpenConns, "max-open-conns", 100, "(max connections for use at any time.)")
|
|
||||||
// Deprecated
|
|
||||||
flag.DurationVar(&dialTimeout, "dial-timeout", 5*time.Second, "(the maximum time to establish a connection.)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&ruleRepoURL, "rules.repo-url", baseconst.AlertHelpPage, "(host address used to build rule link in alert messages)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&cacheConfigPath, "experimental.cache-config", "", "(cache config to use)")
|
|
||||||
flag.StringVar(&fluxInterval, "flux-interval", "5m", "(the interval to exclude data from being cached to avoid incorrect cache for data in motion)")
|
|
||||||
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)")
|
|
||||||
flag.StringVar(&cluster, "cluster", "cluster", "(cluster name - defaults to 'cluster')")
|
|
||||||
flag.StringVar(&gatewayUrl, "gateway-url", "", "(url to the gateway)")
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&useLicensesV3, "use-licenses-v3", false, "use licenses_v3 schema for licenses")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
loggerMgr := initZapLog()
|
|
||||||
zap.ReplaceGlobals(loggerMgr)
|
|
||||||
defer loggerMgr.Sync() // flushes buffer, if any
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
config, err := signoz.NewConfig(ctx, config.ResolverConfig{
|
|
||||||
Uris: []string{"env:"},
|
|
||||||
ProviderFactories: []config.ProviderFactory{
|
|
||||||
envprovider.NewFactory(),
|
|
||||||
fileprovider.NewFactory(),
|
|
||||||
},
|
|
||||||
}, signoz.DeprecatedFlags{
|
|
||||||
MaxIdleConns: maxIdleConns,
|
|
||||||
MaxOpenConns: maxOpenConns,
|
|
||||||
DialTimeout: dialTimeout,
|
|
||||||
Config: promConfigPath,
|
|
||||||
FluxInterval: fluxInterval,
|
|
||||||
FluxIntervalForTraceDetail: fluxIntervalForTraceDetail,
|
|
||||||
Cluster: cluster,
|
|
||||||
GatewayUrl: gatewayUrl,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to create config", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
version.Info.PrettyPrint(config.Version)
|
|
||||||
|
|
||||||
sqlStoreFactories := signoz.NewSQLStoreProviderFactories()
|
|
||||||
if err := sqlStoreFactories.Add(postgressqlstore.NewFactory(sqlstorehook.NewLoggingFactory())); err != nil {
|
|
||||||
zap.L().Fatal("Failed to add postgressqlstore factory", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
signoz, err := signoz.New(
|
|
||||||
context.Background(),
|
|
||||||
config,
|
|
||||||
jwt,
|
|
||||||
zeus.Config(),
|
|
||||||
httpzeus.NewProviderFactory(),
|
|
||||||
licensing.Config(24*time.Hour, 3),
|
|
||||||
func(sqlstore sqlstore.SQLStore, zeus pkgzeus.Zeus, orgGetter organization.Getter, analytics analytics.Analytics) factory.ProviderFactory[pkglicensing.Licensing, pkglicensing.Config] {
|
|
||||||
return httplicensing.NewProviderFactory(sqlstore, zeus, orgGetter, analytics)
|
|
||||||
},
|
|
||||||
signoz.NewEmailingProviderFactories(),
|
|
||||||
signoz.NewCacheProviderFactories(),
|
|
||||||
signoz.NewWebProviderFactories(),
|
|
||||||
func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
|
|
||||||
existingFactories := signoz.NewSQLSchemaProviderFactories(sqlstore)
|
|
||||||
if err := existingFactories.Add(postgressqlschema.NewFactory(sqlstore)); err != nil {
|
|
||||||
zap.L().Fatal("Failed to add postgressqlschema factory", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
return existingFactories
|
|
||||||
},
|
|
||||||
sqlStoreFactories,
|
|
||||||
signoz.NewTelemetryStoreProviderFactories(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to create signoz", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
server, err := app.NewServer(config, signoz, jwt)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to create server", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := server.Start(ctx); err != nil {
|
|
||||||
zap.L().Fatal("Could not start server", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
signoz.Start(ctx)
|
|
||||||
|
|
||||||
if err := signoz.Wait(ctx); err != nil {
|
|
||||||
zap.L().Fatal("Failed to start signoz", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
err = server.Stop(ctx)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to stop server", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
err = signoz.Stop(ctx)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to stop signoz", zap.Error(err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
2
go.mod
2
go.mod
@ -50,6 +50,7 @@ require (
|
|||||||
github.com/sethvargo/go-password v0.2.0
|
github.com/sethvargo/go-password v0.2.0
|
||||||
github.com/smartystreets/goconvey v1.8.1
|
github.com/smartystreets/goconvey v1.8.1
|
||||||
github.com/soheilhy/cmux v0.1.5
|
github.com/soheilhy/cmux v0.1.5
|
||||||
|
github.com/spf13/cobra v1.9.1
|
||||||
github.com/srikanthccv/ClickHouse-go-mock v0.12.0
|
github.com/srikanthccv/ClickHouse-go-mock v0.12.0
|
||||||
github.com/stretchr/testify v1.10.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/tidwall/gjson v1.18.0
|
github.com/tidwall/gjson v1.18.0
|
||||||
@ -206,7 +207,6 @@ require (
|
|||||||
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
|
github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect
|
||||||
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 // indirect
|
github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 // indirect
|
||||||
github.com/smarty/assertions v1.15.0 // indirect
|
github.com/smarty/assertions v1.15.0 // indirect
|
||||||
github.com/spf13/cobra v1.9.1 // indirect
|
|
||||||
github.com/spf13/pflag v1.0.6 // indirect
|
github.com/spf13/pflag v1.0.6 // indirect
|
||||||
github.com/stretchr/objx v0.5.2 // indirect
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
github.com/tidwall/match v1.1.1 // indirect
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
.vscode
|
|
||||||
README.md
|
|
||||||
signoz.db
|
|
||||||
@ -1,176 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/analytics"
|
|
||||||
"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/factory"
|
|
||||||
"github.com/SigNoz/signoz/pkg/licensing"
|
|
||||||
"github.com/SigNoz/signoz/pkg/licensing/nooplicensing"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/organization"
|
|
||||||
"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/sqlschema"
|
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/version"
|
|
||||||
"github.com/SigNoz/signoz/pkg/zeus"
|
|
||||||
"github.com/SigNoz/signoz/pkg/zeus/noopzeus"
|
|
||||||
|
|
||||||
"go.uber.org/zap"
|
|
||||||
"go.uber.org/zap/zapcore"
|
|
||||||
)
|
|
||||||
|
|
||||||
func initZapLog() *zap.Logger {
|
|
||||||
config := zap.NewProductionConfig()
|
|
||||||
config.EncoderConfig.TimeKey = "timestamp"
|
|
||||||
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
||||||
logger, _ := config.Build()
|
|
||||||
return logger
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var promConfigPath, skipTopLvlOpsPath string
|
|
||||||
|
|
||||||
// disables rule execution but allows change to the rule definition
|
|
||||||
var disableRules bool
|
|
||||||
|
|
||||||
var useLogsNewSchema bool
|
|
||||||
var useTraceNewSchema bool
|
|
||||||
// the url used to build link in the alert messages in slack and other systems
|
|
||||||
var ruleRepoURL, cacheConfigPath, fluxInterval, fluxIntervalForTraceDetail string
|
|
||||||
var cluster string
|
|
||||||
|
|
||||||
var preferSpanMetrics bool
|
|
||||||
|
|
||||||
var maxIdleConns int
|
|
||||||
var maxOpenConns int
|
|
||||||
var dialTimeout time.Duration
|
|
||||||
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&useLogsNewSchema, "use-logs-new-schema", false, "use logs_v2 schema for logs")
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&useTraceNewSchema, "use-trace-new-schema", false, "use new schema for traces")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)")
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)")
|
|
||||||
// Deprecated
|
|
||||||
flag.BoolVar(&preferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&ruleRepoURL, "rules.repo-url", constants.AlertHelpPage, "(host address used to build rule link in alert messages)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&cacheConfigPath, "experimental.cache-config", "", "(cache config to use)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&fluxInterval, "flux-interval", "5m", "(the interval to exclude data from being cached to avoid incorrect cache for data in motion)")
|
|
||||||
// Deprecated
|
|
||||||
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)")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&cluster, "cluster", "cluster", "(cluster name - defaults to 'cluster')")
|
|
||||||
// Deprecated
|
|
||||||
flag.StringVar(&cluster, "cluster-name", "cluster", "(cluster name - defaults to 'cluster')")
|
|
||||||
// Deprecated
|
|
||||||
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.)")
|
|
||||||
// Deprecated
|
|
||||||
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.)")
|
|
||||||
// Deprecated
|
|
||||||
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.)")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
loggerMgr := initZapLog()
|
|
||||||
zap.ReplaceGlobals(loggerMgr)
|
|
||||||
defer loggerMgr.Sync() // flushes buffer, if any
|
|
||||||
|
|
||||||
logger := loggerMgr.Sugar()
|
|
||||||
|
|
||||||
config, err := signoz.NewConfig(context.Background(), config.ResolverConfig{
|
|
||||||
Uris: []string{"env:"},
|
|
||||||
ProviderFactories: []config.ProviderFactory{
|
|
||||||
envprovider.NewFactory(),
|
|
||||||
fileprovider.NewFactory(),
|
|
||||||
},
|
|
||||||
}, signoz.DeprecatedFlags{
|
|
||||||
MaxIdleConns: maxIdleConns,
|
|
||||||
MaxOpenConns: maxOpenConns,
|
|
||||||
DialTimeout: dialTimeout,
|
|
||||||
Config: promConfigPath,
|
|
||||||
FluxInterval: fluxInterval,
|
|
||||||
FluxIntervalForTraceDetail: fluxIntervalForTraceDetail,
|
|
||||||
PreferSpanMetrics: preferSpanMetrics,
|
|
||||||
Cluster: cluster,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to create config", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
version.Info.PrettyPrint(config.Version)
|
|
||||||
|
|
||||||
// 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)
|
|
||||||
|
|
||||||
signoz, err := signoz.New(
|
|
||||||
context.Background(),
|
|
||||||
config,
|
|
||||||
jwt,
|
|
||||||
zeus.Config{},
|
|
||||||
noopzeus.NewProviderFactory(),
|
|
||||||
licensing.Config{},
|
|
||||||
func(_ sqlstore.SQLStore, _ zeus.Zeus, _ organization.Getter, _ analytics.Analytics) factory.ProviderFactory[licensing.Licensing, licensing.Config] {
|
|
||||||
return nooplicensing.NewFactory()
|
|
||||||
},
|
|
||||||
signoz.NewEmailingProviderFactories(),
|
|
||||||
signoz.NewCacheProviderFactories(),
|
|
||||||
signoz.NewWebProviderFactories(),
|
|
||||||
func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
|
|
||||||
return signoz.NewSQLSchemaProviderFactories(sqlstore)
|
|
||||||
},
|
|
||||||
signoz.NewSQLStoreProviderFactories(),
|
|
||||||
signoz.NewTelemetryStoreProviderFactories(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
zap.L().Fatal("Failed to create signoz", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
server, err := app.NewServer(config, signoz, jwt)
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal("Failed to create server", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := server.Start(context.Background()); err != nil {
|
|
||||||
logger.Fatal("Could not start servers", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
signoz.Start(context.Background())
|
|
||||||
|
|
||||||
if err := signoz.Wait(context.Background()); err != nil {
|
|
||||||
zap.L().Fatal("Failed to start signoz", zap.Error(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
err = server.Stop(context.Background())
|
|
||||||
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))
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -30,6 +30,7 @@ import (
|
|||||||
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
||||||
"github.com/SigNoz/signoz/pkg/version"
|
"github.com/SigNoz/signoz/pkg/version"
|
||||||
"github.com/SigNoz/signoz/pkg/web"
|
"github.com/SigNoz/signoz/pkg/web"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config defines the entire input configuration of signoz.
|
// Config defines the entire input configuration of signoz.
|
||||||
@ -106,6 +107,28 @@ type DeprecatedFlags struct {
|
|||||||
GatewayUrl string
|
GatewayUrl string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (df *DeprecatedFlags) RegisterFlags(cmd *cobra.Command) {
|
||||||
|
cmd.Flags().IntVar(&df.MaxIdleConns, "max-idle-conns", 50, "max idle connections to the database")
|
||||||
|
cmd.Flags().IntVar(&df.MaxOpenConns, "max-open-conns", 100, "max open connections to the database")
|
||||||
|
cmd.Flags().DurationVar(&df.DialTimeout, "dial-timeout", 5*time.Second, "dial timeout for the database")
|
||||||
|
cmd.Flags().StringVar(&df.Config, "config", "./config/prometheus.yml", "(prometheus config to read metrics)")
|
||||||
|
cmd.Flags().StringVar(&df.FluxInterval, "flux-interval", "5m", "flux interval")
|
||||||
|
cmd.Flags().StringVar(&df.FluxIntervalForTraceDetail, "flux-interval-for-trace-detail", "2m", "flux interval for trace detail")
|
||||||
|
cmd.Flags().BoolVar(&df.PreferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)")
|
||||||
|
cmd.Flags().StringVar(&df.Cluster, "cluster", "cluster", "(cluster name - defaults to 'cluster')")
|
||||||
|
cmd.Flags().StringVar(&df.GatewayUrl, "gateway-url", "", "(url to the gateway)")
|
||||||
|
|
||||||
|
_ = cmd.Flags().MarkDeprecated("max-idle-conns", "use SIGNOZ_TELEMETRYSTORE_MAX__IDLE__CONNS instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("max-open-conns", "use SIGNOZ_TELEMETRYSTORE_MAX__OPEN__CONNS instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("dial-timeout", "use SIGNOZ_TELEMETRYSTORE_DIAL__TIMEOUT instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("config", "use SIGNOZ_PROMETHEUS_CONFIG instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("flux-interval", "use SIGNOZ_QUERIER_FLUX__INTERVAL instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("flux-interval-for-trace-detail", "use SIGNOZ_QUERIER_FLUX__INTERVAL instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("cluster", "use SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_CLUSTER instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("prefer-span-metrics", "use USE_SPAN_METRICS instead")
|
||||||
|
_ = cmd.Flags().MarkDeprecated("gateway-url", "use SIGNOZ_GATEWAY_URL instead")
|
||||||
|
}
|
||||||
|
|
||||||
func NewConfig(ctx context.Context, resolverConfig config.ResolverConfig, deprecatedFlags DeprecatedFlags) (Config, error) {
|
func NewConfig(ctx context.Context, resolverConfig config.ResolverConfig, deprecatedFlags DeprecatedFlags) (Config, error) {
|
||||||
configFactories := []factory.ConfigFactory{
|
configFactories := []factory.ConfigFactory{
|
||||||
version.NewConfigFactory(),
|
version.NewConfigFactory(),
|
||||||
|
|||||||
@ -53,7 +53,7 @@ def signoz(
|
|||||||
# Build the image
|
# Build the image
|
||||||
self = DockerImage(
|
self = DockerImage(
|
||||||
path="../../",
|
path="../../",
|
||||||
dockerfile_path="ee/query-service/Dockerfile.integration",
|
dockerfile_path="cmd/enterprise/Dockerfile.integration",
|
||||||
tag="signoz:integration",
|
tag="signoz:integration",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user