Slackbot
09/24/2021, 12:04 PMAnkit Nayan
Ankit Nayan
Use MV with aggregated data per service, to display the metrics page fasterWe shall now be generating metrics from traces to display in those charts. It will be very fast to get metrics. Also, how much scale are you handling?
Ankit Nayan
Retain only problematic traces(traces with status code >=400, or duration greater the X), so data could be retained for longer periodHow do you do this currently? Ideally this should be part of tail-sampling processor in otel-collector.
Ankit Nayan
I want to add some SLA report with comparison between days/weeks/monthsSigNoz will have extensive SLA reports, SLO and SLI maybe in coming months. Great to know about this use case 🙂
Ankit Nayan
All works well, however, i’ve encountered some issue:
Trace view might get “broken” if one of the traces is missing, on my case, i had a trace which was set as CHILD_OF, however its parent span was missing, so trace view did not show all the traces, only the total request time, while response had 34 spans available in the specific traceThis should be fixed. I think I saw such behaviour sometime. Can you query the data from ClickHouse so that we make better discussion with an example.
Itzik Lavon
09/28/2021, 11:52 AMCREATE TABLE koala_apm.signoz_index_aggregated
(
`timestamp` DateTime CODEC(Delta(8), ZSTD(1)),
`serviceName` LowCardinality(String) CODEC(ZSTD(1)),
`statusCode` Int64 CODEC(ZSTD(1)),
`kind` Int32 CODEC(ZSTD(1)),
`name` LowCardinality(String) CODEC(ZSTD(1)),
`dbSystem` Nullable(String) CODEC(ZSTD(1)),
`dbName` Nullable(String) CODEC(ZSTD(1)),
`externalHttpMethod` Nullable(String) CODEC(ZSTD(1)),
`externalHttpUrl` Nullable(String) CODEC(ZSTD(1)),
`count` Int32,
`avg` AggregateFunction(avg, UInt64),
`quantile` AggregateFunction(quantile, UInt64),
`tagsKeys` Array(String) CODEC(ZSTD(1))
)
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY (timestamp, serviceName, kind, statusCode)
TTL toDate(timestamp) + toIntervalMonth(6)
SETTINGS index_granularity = 8192
CREATE TABLE IF NOT EXISTS signoz_spans (
timestamp DateTime64(9) CODEC(Delta(8), ZSTD(1)),
traceID String CODEC(ZSTD(1)),
model String CODEC(ZSTD(3))
)
ENGINE = Null
CREATE TABLE koala_apm.signoz_index
(
`timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`traceID` String CODEC(ZSTD(1)),
`spanID` String CODEC(ZSTD(1)),
`parentSpanID` String CODEC(ZSTD(1)),
`serviceName` LowCardinality(String) CODEC(ZSTD(1)),
`name` LowCardinality(String) CODEC(ZSTD(1)),
`kind` Int32 CODEC(ZSTD(1)),
`durationNano` UInt64 CODEC(ZSTD(1)),
`tags` Array(String) CODEC(ZSTD(1)),
`tagsKeys` Array(String) CODEC(ZSTD(1)),
`tagsValues` Array(String) CODEC(ZSTD(1)),
`statusCode` Int64 CODEC(ZSTD(1)),
`references` String CODEC(ZSTD(1)),
`externalHttpMethod` Nullable(String) CODEC(ZSTD(1)),
`externalHttpUrl` Nullable(String) CODEC(ZSTD(1)),
`component` Nullable(String) CODEC(ZSTD(1)),
`dbSystem` Nullable(String) CODEC(ZSTD(1)),
`dbName` Nullable(String) CODEC(ZSTD(1)),
`dbOperation` Nullable(String) CODEC(ZSTD(1)),
`peerService` Nullable(String) CODEC(ZSTD(1))
)
ENGINE = Buffer('koala_apm', 'signoz_index_tmp', 4, 0, 20, 0, 100000, 0, 100000000)
CREATE TABLE koala_apm.signoz_index_tmp
(
`timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`traceID` String CODEC(ZSTD(1)),
`spanID` String CODEC(ZSTD(1)),
`parentSpanID` String CODEC(ZSTD(1)),
`serviceName` LowCardinality(String) CODEC(ZSTD(1)),
`name` LowCardinality(String) CODEC(ZSTD(1)),
`kind` Int32 CODEC(ZSTD(1)),
`durationNano` UInt64 CODEC(ZSTD(1)),
`tags` Array(String) CODEC(ZSTD(1)),
`tagsKeys` Array(String) CODEC(ZSTD(1)),
`tagsValues` Array(String) CODEC(ZSTD(1)),
`statusCode` Int64 CODEC(ZSTD(1)),
`references` String CODEC(ZSTD(1)),
`externalHttpMethod` Nullable(String) CODEC(ZSTD(1)),
`externalHttpUrl` Nullable(String) CODEC(ZSTD(1)),
`component` Nullable(String) CODEC(ZSTD(1)),
`dbSystem` Nullable(String) CODEC(ZSTD(1)),
`dbName` Nullable(String) CODEC(ZSTD(1)),
`dbOperation` Nullable(String) CODEC(ZSTD(1)),
`peerService` Nullable(String) CODEC(ZSTD(1)),
INDEX idx_traceID traceID TYPE bloom_filter GRANULARITY 4,
INDEX idx_service serviceName TYPE bloom_filter GRANULARITY 4,
INDEX idx_kind kind TYPE minmax GRANULARITY 4,
INDEX idx_spanID spanID TYPE bloom_filter GRANULARITY 1,
INDEX idx_tagsKeys tagsKeys TYPE bloom_filter(0.01) GRANULARITY 64,
INDEX idx_tagsValues tagsValues TYPE bloom_filter(0.01) GRANULARITY 64,
INDEX idx_duration durationNano TYPE minmax GRANULARITY 1
)
ENGINE = MergeTree()
PARTITION BY toDate(timestamp)
ORDER BY (timestamp, serviceName)
TTL toDate(timestamp) + toIntervalDay(1)
SETTINGS index_granularity = 8192
CREATE TABLE koala_apm.signoz_index_final
(
`timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`traceID` String CODEC(ZSTD(1)),
`spanID` String CODEC(ZSTD(1)),
`parentSpanID` String CODEC(ZSTD(1)),
`serviceName` LowCardinality(String) CODEC(ZSTD(1)),
`name` LowCardinality(String) CODEC(ZSTD(1)),
`kind` Int32 CODEC(ZSTD(1)),
`durationNano` UInt64 CODEC(ZSTD(1)),
`tags` Array(String) CODEC(ZSTD(1)),
`tagsKeys` Array(String) CODEC(ZSTD(1)),
`tagsValues` Array(String) CODEC(ZSTD(1)),
`statusCode` Int64 CODEC(ZSTD(1)),
`references` String CODEC(ZSTD(1)),
`externalHttpMethod` Nullable(String) CODEC(ZSTD(1)),
`externalHttpUrl` Nullable(String) CODEC(ZSTD(1)),
`component` Nullable(String) CODEC(ZSTD(1)),
`dbSystem` Nullable(String) CODEC(ZSTD(1)),
`dbName` Nullable(String) CODEC(ZSTD(1)),
`dbOperation` Nullable(String) CODEC(ZSTD(1)),
`peerService` Nullable(String) CODEC(ZSTD(1)),
INDEX idx_traceID traceID TYPE bloom_filter GRANULARITY 4,
INDEX idx_service serviceName TYPE bloom_filter GRANULARITY 4,
INDEX idx_kind kind TYPE minmax GRANULARITY 4,
INDEX idx_spanID spanID TYPE bloom_filter GRANULARITY 1,
INDEX idx_tagsKeys tagsKeys TYPE bloom_filter(0.01) GRANULARITY 64,
INDEX idx_tagsValues tagsValues TYPE bloom_filter(0.01) GRANULARITY 64,
INDEX idx_duration durationNano TYPE minmax GRANULARITY 1
)
ENGINE = MergeTree()
PARTITION BY toDate(timestamp)
ORDER BY (timestamp, serviceName)
TTL toDate(timestamp) + toIntervalMonth(3)
SETTINGS index_granularity = 8192
CREATE TABLE koala_apm.last_success
(
`last_success_key` String,
`last_success_date` String,
`event_time` DateTime
)
ENGINE = dReplacingMergeTree(event_time)
PARTITION BY toYYYYMMDD(event_time)
ORDER BY last_success_key
SETTINGS index_granularity = 8192
CREATE MATERIALIZED VIEW koala_apm.signoz_index_aggregated_mv TO koala_apm.signoz_index_aggregated
(
`timestamp` DateTime CODEC(Delta(8), ZSTD(1)),
`serviceName` LowCardinality(String) CODEC(ZSTD(1)),
`statusCode` Int64 CODEC(ZSTD(1)),
`kind` Int32 CODEC(ZSTD(1)),
`name` LowCardinality(String) CODEC(ZSTD(1)),
`dbSystem` Nullable(String) CODEC(ZSTD(1)),
`dbName` Nullable(String) CODEC(ZSTD(1)),
`externalHttpMethod` Nullable(String) CODEC(ZSTD(1)),
`externalHttpUrl` Nullable(String) CODEC(ZSTD(1)),
`count` Int32,
`avg` AggregateFunction(avg, UInt64),
`quantile` AggregateFunction(quantile, UInt64),
`tagsKeys` Array(String) CODEC(ZSTD(1))
) AS
SELECT
toStartOfInterval(timestamp, toIntervalMinute(1)) AS timestamp,
serviceName,
statusCode AS statusCode,
kind AS kind,
name AS name,
dbSystem AS dbSystem,
dbName AS dbName,
externalHttpMethod AS externalHttpMethod,
externalHttpUrl AS externalHttpUrl,
uniqExact(spanID) AS count,
avgState(durationNano) AS avg,
quantileState(durationNano) AS quantile,
groupArrayDistinct(arrayJoin(tagsKeys)) AS tagsKeys
FROM koala_apm.signoz_index_tmp
GROUP BY
timestamp,
serviceName,
statusCode,
kind,
name,
dbSystem,
dbName,
externalHttpMethod,
externalHttpUrl
Itzik Lavon
09/28/2021, 12:41 PMAnkit Nayan
Ankit Nayan
Itzik Lavon
09/28/2021, 3:59 PMItzik Lavon
09/28/2021, 4:32 PMAnkit Nayan
Ankit Nayan
Trace view might get “broken” if one of the traces is missing, on my case, i had a trace which was set as CHILD_OF, however its parent span was missing, so trace view did not show all the traces, only the total request time, while response had 34 spans available in the specific tracePossible to share data to help fix?
Itzik Lavon
10/03/2021, 5:04 AMAnkit Nayan
SigNoz is an open-source APM. It helps developers monitor their applications & troubleshoot problems, an open-source alternative to DataDog, NewRelic, etc.
Powered by