mirror of
https://github.com/SigNoz/signoz.git
synced 2026-05-05 01:40:33 +01:00
* feat(apiserver): derive HTTP route prefix from global.external_url The path component of global.external_url is now used as the base path for all HTTP routes (API and web frontend), enabling SigNoz to be served behind a reverse proxy at a sub-path (e.g. https://example.com/signoz/). The prefix is applied via http.StripPrefix at the outermost handler level, requiring zero changes to route registration code. Health endpoints (/api/v1/health, /api/v2/healthz, /api/v2/readyz, /api/v2/livez) remain accessible without the prefix for container healthchecks. Removes web.prefix config in favor of the unified global.external_url approach, avoiding the desync bugs seen in projects with separate API/UI prefix configs (ArgoCD, Prometheus). closes SigNoz/platform-pod#1775 * feat(web): template index.html with dynamic base href from global.external_url Read index.html at startup, parse as Go template with [[ ]] delimiters, execute with BasePath derived from global.external_url, and cache the rendered bytes in memory. This injects <base href="/signoz/" /> (or whatever the route prefix is) so the browser resolves relative URLs correctly when SigNoz is served at a sub-path. Inject global.Config into the routerweb provider via the factory closure pattern. Static files (JS, CSS, images) are still served from disk unchanged. * refactor(web): extract index.html templating into web.NewIndex Move the template parsing and execution logic from routerweb provider into pkg/web/template.go. NewIndex logs and returns raw bytes on template failure; NewIndexE returns the error for callers that need it. Rename BasePath to BaseHref to match the HTML attribute it populates. Inject global.Config into routerweb via the factory closure pattern. * refactor(global): rename RoutePrefix to ExternalPath, add ExternalPathTrailing Rename RoutePrefix() to ExternalPath() to accurately reflect what it returns: the path component of the external URL. Add ExternalPathTrailing() which returns the path with a trailing slash, used for HTML base href injection. * refactor(web): make index filename configurable via web.index Move the hardcoded indexFileName const from routerweb/provider.go to web.Config.Index with default "index.html". This allows overriding the SPA entrypoint file via configuration. * refactor(web): collapse testdata_basepath into testdata Use a single testdata directory with a templated index.html for all routerweb tests. Remove the redundant testdata_basepath directory. * test(web): add no-template and invalid-template index test cases Add three distinct index fixtures in testdata: - index.html: correct [[ ]] template with BaseHref - index_no_template.html: plain HTML, no placeholders - index_invalid_template.html: malformed template syntax Tests verify: template substitution works, plain files pass through unchanged, and invalid templates fall back to serving raw bytes. Consolidate test helpers into startServer/get. * refactor(web): rename test fixtures to no_template, valid_template, invalid_template Drop the index_ prefix from test fixtures. Use web instead of w for the variable name in test helpers. * test(web): add SPA fallback paths to no_template and invalid_template tests Test /, /does-not-exist, and /assets in all three template test cases to verify SPA fallback behavior (non-existent paths and directories serve the index) regardless of template type. * test(web): use exact match instead of contains in template tests Match the full expected response body in TestServeTemplatedIndex instead of using assert.Contains. * style(web): use raw string literals for expected test values * refactor(web): rename get test helper to httpGet * refactor(web): use table-driven tests with named path cases Replace for-loop path iteration with explicit table-driven test cases for each path. Each path (root, non-existent, directory) is a named subtest case in all three template tests. * chore: remove redundant comments from added code * style: add blank lines between logical blocks * fix(web): resolve lint errors in provider and template Fix errcheck on rw.Write in serveIndex, use ErrorContext instead of Error in NewIndex for sloglint compliance. Move serveIndex below ServeHTTP to order public methods before private ones. * style: formatting and test cleanup from review Restructure Validate nil check, rename expectErr to fail with early-return, trim trailing newlines in test assertions, remove t.Parallel from subtests, inline short config literals, restore struct field comments in web.Config. * fix: remove unused files * fix: remove unused files * perf(web): cache http.FileServer on provider instead of creating per-request * refactor(web): use html/template for context-aware escaping in index rendering --------- Co-authored-by: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com>
410 lines
13 KiB
YAML
410 lines
13 KiB
YAML
##################### SigNoz Configuration Example #####################
|
|
#
|
|
# Do not modify this file
|
|
#
|
|
|
|
##################### Global #####################
|
|
global:
|
|
# the url under which the signoz apiserver is externally reachable.
|
|
# the path component (e.g. /signoz in https://example.com/signoz) is used
|
|
# as the base path for all HTTP routes (both API and web frontend).
|
|
external_url: <unset>
|
|
# the url where the SigNoz backend receives telemetry data (traces, metrics, logs) from instrumented applications.
|
|
ingestion_url: <unset>
|
|
|
|
##################### Version #####################
|
|
version:
|
|
banner:
|
|
# Whether to enable the version banner on startup.
|
|
enabled: true
|
|
|
|
##################### Instrumentation #####################
|
|
instrumentation:
|
|
logs:
|
|
# The log level to use.
|
|
level: info
|
|
traces:
|
|
# Whether to enable tracing.
|
|
enabled: false
|
|
processors:
|
|
batch:
|
|
exporter:
|
|
otlp:
|
|
endpoint: localhost:4317
|
|
metrics:
|
|
# Whether to enable metrics.
|
|
enabled: true
|
|
readers:
|
|
pull:
|
|
exporter:
|
|
prometheus:
|
|
host: "0.0.0.0"
|
|
port: 9090
|
|
|
|
##################### PProf #####################
|
|
pprof:
|
|
# Whether to enable the pprof server.
|
|
enabled: true
|
|
# The address on which the pprof server listens.
|
|
address: 0.0.0.0:6060
|
|
|
|
##################### Web #####################
|
|
web:
|
|
# Whether to enable the web frontend
|
|
enabled: true
|
|
# The index file to use as the SPA entrypoint.
|
|
index: index.html
|
|
# The directory containing the static build files.
|
|
directory: /etc/signoz/web
|
|
|
|
##################### Cache #####################
|
|
cache:
|
|
# specifies the caching provider to use.
|
|
provider: memory
|
|
# memory: Uses in-memory caching.
|
|
memory:
|
|
# Max items for the in-memory cache (10x the entries)
|
|
num_counters: 100000
|
|
# Total cost in bytes allocated bounded cache
|
|
max_cost: 67108864
|
|
# redis: Uses Redis as the caching backend.
|
|
redis:
|
|
# The hostname or IP address of the Redis server.
|
|
host: localhost
|
|
# The port on which the Redis server is running. Default is usually 6379.
|
|
port: 6379
|
|
# The password for authenticating with the Redis server, if required.
|
|
password:
|
|
# The Redis database number to use
|
|
db: 0
|
|
|
|
##################### SQLStore #####################
|
|
sqlstore:
|
|
# specifies the SQLStore provider to use.
|
|
provider: sqlite
|
|
# The maximum number of open connections to the database.
|
|
max_open_conns: 100
|
|
# The maximum amount of time a connection may be reused.
|
|
# If max_conn_lifetime == 0, connections are not closed due to a connection's age.
|
|
max_conn_lifetime: 0
|
|
sqlite:
|
|
# The path to the SQLite database file.
|
|
path: /var/lib/signoz/signoz.db
|
|
# The journal mode for the sqlite database. Supported values: delete, wal.
|
|
mode: wal
|
|
# The timeout for the sqlite database to wait for a lock.
|
|
busy_timeout: 10s
|
|
# The default transaction locking behavior. Supported values: deferred, immediate, exclusive.
|
|
transaction_mode: deferred
|
|
|
|
##################### APIServer #####################
|
|
apiserver:
|
|
timeout:
|
|
# Default request timeout.
|
|
default: 60s
|
|
# Maximum request timeout.
|
|
max: 600s
|
|
# List of routes to exclude from request timeout.
|
|
excluded_routes:
|
|
- /api/v1/logs/tail
|
|
- /api/v3/logs/livetail
|
|
logging:
|
|
# List of routes to exclude from request responselogging.
|
|
excluded_routes:
|
|
- /api/v1/health
|
|
- /api/v1/version
|
|
- /
|
|
|
|
##################### Querier #####################
|
|
querier:
|
|
# The TTL for cached query results.
|
|
cache_ttl: 168h
|
|
# The interval for recent data that should not be cached.
|
|
flux_interval: 5m
|
|
# The maximum number of concurrent queries for missing ranges.
|
|
max_concurrent_queries: 4
|
|
|
|
##################### TelemetryStore #####################
|
|
telemetrystore:
|
|
# Maximum number of idle connections in the connection pool.
|
|
max_idle_conns: 50
|
|
# Maximum number of open connections to the database.
|
|
max_open_conns: 100
|
|
# Maximum time to wait for a connection to be established.
|
|
dial_timeout: 5s
|
|
# Specifies the telemetrystore provider to use.
|
|
provider: clickhouse
|
|
clickhouse:
|
|
# The DSN to use for clickhouse.
|
|
dsn: tcp://localhost:9000
|
|
# The cluster name to use for clickhouse.
|
|
cluster: cluster
|
|
# The query settings for clickhouse.
|
|
settings:
|
|
max_execution_time: 0
|
|
max_execution_time_leaf: 0
|
|
timeout_before_checking_execution_speed: 0
|
|
max_bytes_to_read: 0
|
|
max_result_rows: 0
|
|
ignore_data_skipping_indices: ""
|
|
secondary_indices_enable_bulk_filtering: false
|
|
|
|
##################### Prometheus #####################
|
|
prometheus:
|
|
# The maximum time a PromQL query is allowed to run before being aborted.
|
|
timeout: 2m
|
|
active_query_tracker:
|
|
# Whether to enable the active query tracker.
|
|
enabled: true
|
|
# The path to use for the active query tracker.
|
|
path: ""
|
|
# The maximum number of concurrent queries.
|
|
max_concurrent: 20
|
|
|
|
##################### Alertmanager #####################
|
|
alertmanager:
|
|
# Specifies the alertmanager provider to use.
|
|
provider: signoz
|
|
signoz:
|
|
# The poll interval for periodically syncing the alertmanager with the config in the store.
|
|
poll_interval: 1m
|
|
# The URL under which Alertmanager is externally reachable (for example, if Alertmanager is served via a reverse proxy). Used for generating relative and absolute links back to Alertmanager itself.
|
|
external_url: http://localhost:8080
|
|
# The global configuration for the alertmanager. All the exahustive fields can be found in the upstream: https://github.com/prometheus/alertmanager/blob/efa05feffd644ba4accb526e98a8c6545d26a783/config/config.go#L833
|
|
global:
|
|
# ResolveTimeout is the time after which an alert is declared resolved if it has not been updated.
|
|
resolve_timeout: 5m
|
|
route:
|
|
# GroupByStr is the list of labels to group alerts by.
|
|
group_by:
|
|
- alertname
|
|
# GroupInterval is the interval at which alerts are grouped.
|
|
group_interval: 1m
|
|
# GroupWait is the time to wait before sending alerts to receivers.
|
|
group_wait: 1m
|
|
# RepeatInterval is the interval at which alerts are repeated.
|
|
repeat_interval: 1h
|
|
alerts:
|
|
# Interval between garbage collection of alerts.
|
|
gc_interval: 30m
|
|
silences:
|
|
# Maximum number of silences, including expired silences. If negative or zero, no limit is set.
|
|
max: 0
|
|
# Maximum size of the silences in bytes. If negative or zero, no limit is set.
|
|
max_size_bytes: 0
|
|
# Interval between garbage collection and snapshotting of the silences. The snapshot will be stored in the state store.
|
|
maintenance_interval: 15m
|
|
# Retention of the silences.
|
|
retention: 120h
|
|
nflog:
|
|
# Interval between garbage collection and snapshotting of the notification logs. The snapshot will be stored in the state store.
|
|
maintenance_interval: 15m
|
|
# Retention of the notification logs.
|
|
retention: 120h
|
|
|
|
##################### Emailing #####################
|
|
emailing:
|
|
# Whether to enable emailing.
|
|
enabled: false
|
|
templates:
|
|
# The directory containing the email templates. This directory should contain a list of files defined at pkg/types/emailtypes/template.go.
|
|
directory: /opt/signoz/conf/templates/email
|
|
format:
|
|
header:
|
|
enabled: false
|
|
logo_url: ""
|
|
help:
|
|
enabled: false
|
|
email: ""
|
|
footer:
|
|
enabled: false
|
|
smtp:
|
|
# The SMTP server address.
|
|
address: localhost:25
|
|
# The email address to use for the SMTP server.
|
|
from:
|
|
# The hello message to use for the SMTP server.
|
|
hello:
|
|
# The static headers to send with the email.
|
|
headers: {}
|
|
auth:
|
|
# The username to use for the SMTP server.
|
|
username:
|
|
# The password to use for the SMTP server.
|
|
password:
|
|
# The secret to use for the SMTP server.
|
|
secret:
|
|
# The identity to use for the SMTP server.
|
|
identity:
|
|
tls:
|
|
# Whether to enable TLS. It should be false in most cases since the authentication mechanism should use the STARTTLS extension instead.
|
|
enabled: false
|
|
# Whether to skip TLS verification.
|
|
insecure_skip_verify: false
|
|
# The path to the CA file.
|
|
ca_file_path:
|
|
# The path to the key file.
|
|
key_file_path:
|
|
# The path to the certificate file.
|
|
cert_file_path:
|
|
|
|
##################### Sharder (experimental) #####################
|
|
sharder:
|
|
# Specifies the sharder provider to use.
|
|
provider: noop
|
|
single:
|
|
# The org id to which this instance belongs to.
|
|
org_id: org_id
|
|
|
|
##################### Analytics #####################
|
|
analytics:
|
|
# Whether to enable analytics.
|
|
enabled: false
|
|
segment:
|
|
# The key to use for segment.
|
|
key: ""
|
|
|
|
##################### StatsReporter #####################
|
|
statsreporter:
|
|
# Whether to enable stats reporter. This is used to provide valuable insights to the SigNoz team. It does not collect any sensitive/PII data.
|
|
enabled: true
|
|
# The interval at which the stats are collected.
|
|
interval: 6h
|
|
collect:
|
|
# Whether to collect identities and traits (emails).
|
|
identities: true
|
|
|
|
##################### Gateway (License only) #####################
|
|
gateway:
|
|
# The URL of the gateway's api.
|
|
url: http://localhost:8080
|
|
|
|
##################### Tokenizer #####################
|
|
tokenizer:
|
|
# Specifies the tokenizer provider to use.
|
|
provider: jwt
|
|
lifetime:
|
|
# The duration for which a user can be idle before being required to authenticate.
|
|
idle: 168h
|
|
# The duration for which a user can remain logged in before being asked to login.
|
|
max: 720h
|
|
rotation:
|
|
# The interval to rotate tokens in.
|
|
interval: 30m
|
|
# The duration for which the previous token pair remains valid after a token pair is rotated.
|
|
duration: 60s
|
|
jwt:
|
|
# The secret to sign the JWT tokens.
|
|
secret: secret
|
|
opaque:
|
|
gc:
|
|
# The interval to perform garbage collection.
|
|
interval: 1h
|
|
token:
|
|
# The maximum number of tokens a user can have. This limits the number of concurrent sessions a user can have.
|
|
max_per_user: 5
|
|
|
|
##################### Flagger #####################
|
|
flagger:
|
|
# Config are the overrides for the feature flags which come directly from the config file.
|
|
config:
|
|
boolean:
|
|
use_span_metrics: true
|
|
kafka_span_eval: false
|
|
string:
|
|
float:
|
|
integer:
|
|
object:
|
|
|
|
##################### User #####################
|
|
user:
|
|
password:
|
|
reset:
|
|
# Whether to allow users to reset their password themselves.
|
|
allow_self: true
|
|
# The duration within which a user can reset their password.
|
|
max_token_lifetime: 6h
|
|
invite:
|
|
# The duration within which a user can accept their invite.
|
|
max_token_lifetime: 48h
|
|
root:
|
|
# Whether to enable the root user. When enabled, a root user is provisioned
|
|
# on startup using the email and password below. The root user cannot be
|
|
# deleted, updated, or have their password changed through the UI.
|
|
enabled: false
|
|
# The email address of the root user.
|
|
email: ""
|
|
# The password of the root user. Must meet password requirements.
|
|
password: ""
|
|
# The name of the organization to create or look up for the root user.
|
|
org:
|
|
name: default
|
|
id: 00000000-0000-0000-0000-000000000000
|
|
|
|
##################### IdentN #####################
|
|
identn:
|
|
tokenizer:
|
|
# toggle tokenizer identN
|
|
enabled: true
|
|
# headers to use for tokenizer identN resolver
|
|
headers:
|
|
- Authorization
|
|
- Sec-WebSocket-Protocol
|
|
apikey:
|
|
# toggle apikey identN
|
|
enabled: true
|
|
# headers to use for apikey identN resolver
|
|
headers:
|
|
- SIGNOZ-API-KEY
|
|
impersonation:
|
|
# toggle impersonation identN, when enabled, all requests will impersonate the root user
|
|
enabled: false
|
|
|
|
##################### Service Account #####################
|
|
serviceaccount:
|
|
email:
|
|
# email domain for the service account principal
|
|
domain: signozserviceaccount.com
|
|
|
|
analytics:
|
|
# toggle service account analytics
|
|
enabled: true
|
|
|
|
##################### Auditor #####################
|
|
auditor:
|
|
# Specifies the auditor provider to use.
|
|
# noop: discards all audit events (community default).
|
|
# otlphttp: exports audit events via OTLP HTTP (enterprise).
|
|
provider: noop
|
|
# The async channel capacity for audit events. Events are dropped when full (fail-open).
|
|
buffer_size: 1000
|
|
# The maximum number of events per export batch.
|
|
batch_size: 100
|
|
# The maximum time between export flushes.
|
|
flush_interval: 1s
|
|
otlphttp:
|
|
# The target scheme://host:port/path of the OTLP HTTP endpoint.
|
|
endpoint: http://localhost:4318/v1/logs
|
|
# Whether to use HTTP instead of HTTPS.
|
|
insecure: false
|
|
# The maximum duration for an export attempt.
|
|
timeout: 10s
|
|
# Additional HTTP headers sent with every export request.
|
|
headers: {}
|
|
retry:
|
|
# Whether to retry on transient failures.
|
|
enabled: true
|
|
# The initial wait time before the first retry.
|
|
initial_interval: 5s
|
|
# The upper bound on backoff interval.
|
|
max_interval: 30s
|
|
# The total maximum time spent retrying.
|
|
max_elapsed_time: 60s
|
|
|
|
##################### Cloud Integration #####################
|
|
cloudintegration:
|
|
# cloud integration agent configuration
|
|
agent:
|
|
# The version of the cloud integration agent.
|
|
version: v0.0.8
|