Skip to content

Commit

Permalink
fix: 接口没有数据报错,trace数据拆分
Browse files Browse the repository at this point in the history
  • Loading branch information
Qinyouzeng committed Apr 24, 2024
1 parent 8bd3066 commit 65691ca
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public Task<PaginatedListBase<EndpointListDto>> EndpointPageAsync(BaseApmRequest
var orderBy = GetOrderBy(query, isEndpoint ? endpointOrders : serviceOrders, defaultSort: isEndpoint ? endpointOrders["Name"] : serviceOrders["Name"]);
if (isInstrument)
{
countSql = $"select count(1) from(select count(1) from {MasaStackClickhouseConnection.TraceTable} where {where} {groupby})";
countSql = $"select count(1) from(select count(1) from {MasaStackClickhouseConnection.TraceSpanTable} where {where} {groupby})";
var minites = (long)(query.End - query.Start).TotalMinutes;
if (minites == 0) minites = 1;
sql = $@"select * from(
Expand All @@ -81,7 +81,7 @@ public Task<PaginatedListBase<EndpointListDto>> EndpointPageAsync(BaseApmRequest
round(count(1)*1.0/{minites},2) Throughput,
round(sum(has(['{string.Join("','", query.GetErrorStatusCodes())}'],`Attributes.http.status_code`))*100.0/if(count(1)=0,1,count(1)),2) Failed
{groupAppend}
from {MasaStackClickhouseConnection.TraceTable} where {where} {groupby} {orderBy} @limit)";
from {MasaStackClickhouseConnection.TraceSpanTable} where {where} {groupby} {orderBy} @limit)";
}
else
{
Expand Down Expand Up @@ -168,7 +168,7 @@ public Task<IEnumerable<ChartLineDto>> ChartDataAsync(BaseApmRequestDto query)
floor(quantile(0.99)(Duration/{MILLSECOND})) `P99`,
floor(quantile(0.95)(Duration/{MILLSECOND})) `P95`,
ServiceName{groupAppend}
from {MasaStackClickhouseConnection.TraceTable} where {where}
from {MasaStackClickhouseConnection.TraceSpanTable} where {where}
group by ServiceName{groupAppend},`time`
order by ServiceName{groupAppend},`time`
) t
Expand Down Expand Up @@ -292,10 +292,10 @@ public Task<EndpointLatencyDistributionDto> EndpointLatencyDistributionAsync(Apm
{
var (where, parameters) = AppendWhere(query);
var result = new EndpointLatencyDistributionDto();
var p95 = Convert.ToDouble(Scalar($"select floor(quantile(0.95)(Duration/{MILLSECOND})) p95 from {MasaStackClickhouseConnection.TraceTable} where {where}", parameters));
var p95 = Convert.ToDouble(Scalar($"select floor(quantile(0.95)(Duration/{MILLSECOND})) p95 from {MasaStackClickhouseConnection.TraceSpanTable} where {where}", parameters));
if (p95 is not double.NaN)
result.P95 = (long)Math.Floor(p95);
var sql = $@"select Duration/{MILLSECOND},count(1) total from {MasaStackClickhouseConnection.TraceTable} where {where} group by Duration order by Duration";
var sql = $@"select Duration/{MILLSECOND},count(1) total from {MasaStackClickhouseConnection.TraceSpanTable} where {where} group by Duration order by Duration";
var list = new List<ChartPointDto>();
lock (lockObj)
{
Expand Down Expand Up @@ -611,7 +611,7 @@ public Task<IEnumerable<ChartLineCountDto>> GetEndpointChartAsync(ApmEndpointReq
var sql = $@"select
toStartOfInterval(`Timestamp` , INTERVAL {GetPeriod(query)} ) as `time`,
count(1) `total`
from {MasaStackClickhouseConnection.TraceTable} where {where} {groupby}";
from {MasaStackClickhouseConnection.TraceSpanTable} where {where} {groupby}";

return Task.FromResult(GetChartCountData(sql, parameters, query.ComparisonType).AsEnumerable());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ public static void Init(IServiceCollection services)
if (!ExistsTable(Connection, MasaStackClickhouseConnection.LogSourceTable))
throw new ArgumentNullException(nameof(MasaStackClickhouseConnection.LogSourceTable));
InitLog();
InitTrace();
//InitTrace(MasaStackClickhouseConnection.TraceTable);
InitTrace(MasaStackClickhouseConnection.TraceSpanTable, "where SpanKind =='SPAN_KIND_SERVER'");
InitTrace(MasaStackClickhouseConnection.TraceClientTable, "where SpanKind =='SPAN_KIND_CLIENT'");
InitMappingTable();
var timezoneStr = GetTimezone(Connection);
MasaStackClickhouseConnection.TimeZone = TZConvert.GetTimeZoneInfo(timezoneStr);
Expand Down Expand Up @@ -108,10 +110,11 @@ TTL toDateTime(Timestamp) + toIntervalDay(30)
InitTable(MasaStackClickhouseConnection.LogTable, sql);
}

private static void InitTrace()
private static void InitTrace(string table, string? where = null)
{

string[] sql = new string[] {
@$"CREATE TABLE {MasaStackClickhouseConnection.TraceTable}
@$"CREATE TABLE {table}
(
`Timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`TraceId` String CODEC(ZSTD(1)),
Expand Down Expand Up @@ -175,7 +178,7 @@ TTL toDateTime(Timestamp) + toIntervalDay(30)
SETTINGS index_granularity = 8192,
ttl_only_drop_parts = 1;
",
$@"CREATE MATERIALIZED VIEW {MasaStackClickhouseConnection.TraceTable.Replace(".",".v_")} TO {MasaStackClickhouseConnection.TraceTable}
$@"CREATE MATERIALIZED VIEW {table.Replace(".",".v_")} TO {table}
AS
SELECT
Timestamp,TraceId,SpanId,ParentSpanId,TraceState,SpanName,SpanKind,ServiceName,toJSONString(ResourceAttributes) AS Resources,
Expand All @@ -199,8 +202,9 @@ TTL toDateTime(Timestamp) + toIntervalDay(30)
mapKeys(SpanAttributes) AS SpanAttributesKeys,
mapValues(SpanAttributes) AS SpanAttributesValues
FROM {MasaStackClickhouseConnection.TraceSourceTable}
{where}
" };
InitTable(MasaStackClickhouseConnection.TraceTable, sql);
InitTable(table, sql);
}

private static void InitMappingTable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ public static PaginatedListBase<TraceResponseDto> QueryTrace(this IDbConnection
{
var (where, parameters, ors) = AppendWhere(query);
var orderBy = AppendOrderBy(query, false);
var countSql = CombineOrs($"select count() as `total` from {MasaStackClickhouseConnection.TraceTable} where {where}", ors);
var countSql = CombineOrs($"select count() as `total` from {MasaStackClickhouseConnection.TraceSpanTable} where {where}", ors);
var total = Convert.ToInt64(ExecuteScalar(connection, $"select sum(`total`) from {countSql}", parameters?.ToArray()));
var start = (query.Page - 1) * query.PageSize;
var result = new PaginatedListBase<TraceResponseDto>() { Total = total, Result = new() };
if (total > 0 && start - total < 0)
{
var querySql = CombineOrs($"select ServiceName,{TIMSTAMP_KEY},TraceId,SpanId,ParentSpanId,TraceState,SpanKind,Duration,SpanName,Spans,Resources from {MasaStackClickhouseConnection.TraceTable} where {where}", ors, orderBy);
var querySql = CombineOrs($"select ServiceName,{TIMSTAMP_KEY},TraceId,SpanId,ParentSpanId,TraceState,SpanKind,Duration,SpanName,Spans,Resources from {MasaStackClickhouseConnection.TraceSpanTable} where {where}", ors, orderBy);
result.Result = Query(connection, $"select * from {querySql} as t limit {start},{query.PageSize}", parameters?.ToArray(), ConvertTraceDto);
}
return result;
Expand Down Expand Up @@ -75,7 +75,14 @@ public static List<MappingResponseDto> GetMapping(this IDbConnection dbConnectio
public static List<TraceResponseDto> GetTraceByTraceId(this IDbConnection connection, string traceId)
{
string where = $"TraceId=@TraceId";
return Query(connection, $"select * from (select {TIMSTAMP_KEY},TraceId,SpanId,ParentSpanId,TraceState,SpanKind,Duration,SpanName,Spans,Resources from {MasaStackClickhouseConnection.TraceTable} where {where}) as t limit 1000", new IDataParameter[] { new ClickHouseParameter { ParameterName = "TraceId", Value = traceId } }, ConvertTraceDto);
return Query(connection,
$@"select * from (
select {TIMSTAMP_KEY},TraceId,SpanId,ParentSpanId,TraceState,SpanKind,Duration,SpanName,Spans,Resources from {MasaStackClickhouseConnection.TraceSpanTable} where {where}
union all
select {TIMSTAMP_KEY},TraceId,SpanId,ParentSpanId,TraceState,SpanKind,Duration,SpanName,Spans,Resources from {MasaStackClickhouseConnection.TraceClientTable} where {where}
) as t
order by {TIMSTAMP_KEY}
limit 1000", new IDataParameter[] { new ClickHouseParameter { ParameterName = "TraceId", Value = traceId } }, ConvertTraceDto);
}

public static string AppendOrderBy(BaseRequestDto query, bool isLog)
Expand Down Expand Up @@ -376,7 +383,7 @@ public static object AggregationQuery(this IDbConnection dbConnection, SimpleAgg
var appendWhere = new StringBuilder();
var name = GetName(requestDto.Name, isLog);
AppendAggtype(requestDto, sql, append, name, out var isScalar);
sql.AppendFormat(" from {0} ", isLog ? MasaStackClickhouseConnection.LogTable : MasaStackClickhouseConnection.TraceTable);
sql.AppendFormat(" from {0} ", isLog ? MasaStackClickhouseConnection.LogTable : MasaStackClickhouseConnection.TraceSpanTable);
var (where, @paremeters, _) = AppendWhere(requestDto, !isLog);
sql.Append($" where {appendWhere} {where}");
sql.Append(append);
Expand Down Expand Up @@ -537,7 +544,7 @@ public static int ConvertInterval(string s)
public static string GetMaxDelayTraceId(this IDbConnection dbConnection, BaseRequestDto requestDto)
{
var (where, parameters, _) = AppendWhere(requestDto);
var text = $"select * from( TraceId from {MasaStackClickhouseConnection.TraceTable} where {where} order by Duration desc) as t limit 1";
var text = $"select * from( TraceId from {MasaStackClickhouseConnection.TraceSpanTable} where {where} order by Duration desc) as t limit 1";
return dbConnection.ExecuteScalar(text, parameters?.ToArray())?.ToString()!;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public sealed class MasaStackClickhouseConnection : ClickHouseConnection

public static string TraceTable { get; private set; }

public static string TraceSpanTable { get; private set; }

public static string TraceClientTable { get; private set; }

public static string MappingTable { get; private set; }

public static TimeZoneInfo TimeZone { get; set; }
Expand Down Expand Up @@ -39,5 +43,7 @@ public MasaStackClickhouseConnection(string connection, string suffix, string? l
TraceSourceTable = $"{database}{traceSourceTable}";
LogSourceTable = $"{database}{logSourceTable}";
MappingTable = $"{database}otel_mapping_{suffix}";
TraceSpanTable = $"{database}{traceSourceTable}_spans_{suffix}";
TraceClientTable = $"{database}{traceSourceTable}_clients_{suffix}";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -150,11 +150,11 @@ private async Task LoadDataAsync()
}
else
{
metricTypeChartData.Avg.EmptyChart = true;
metricTypeChartData.P95.EmptyChart = true;
metricTypeChartData.P99.EmptyChart = true;
throughput.EmptyChart = true;
failed.EmptyChart = true;
metricTypeChartData.Avg.HasChart = false;
metricTypeChartData.P95.HasChart = false;
metricTypeChartData.P99.HasChart = false;
throughput.HasChart = false;
failed.HasChart = false;
}
}

Expand Down Expand Up @@ -211,6 +211,11 @@ private async Task LoadDistributionDataAsync()
var list = data.Latencies?.Select(item => Convert.ToDouble(item.X)).Select(item => Math.Abs(item - data.P95.Value)).ToList();

timeTypeCount.Data = ConvertDistributionChartData(data.Latencies, currentIndex, p95Index).Json;
timeTypeCount.HasChart = true;
}
else
{
timeTypeCount.HasChart = false;
}
timeTypeCount.ChartLoading = false;
}
Expand Down

0 comments on commit 65691ca

Please sign in to comment.