O Simple Log Service acelera consultas PromQL por meio de cache global e computação concorrente.
Como funciona
O cache global e a computação concorrente funcionam da seguinte maneira:
Cache global
Por padrão, o mecanismo de consulta do Prometheus não armazena resultados em cache. Cada consulta recalcula todos os dados, o que degrada o desempenho em grandes conjuntos de dados e longos intervalos de tempo. O cache global reutiliza resultados parciais de consultas idênticas anteriores (mesma instrução PromQL e mesmo valor de step). Os resultados armazenados cobrem o intervalo de tempo sobreposto; apenas os intervalos sem cache são recalculados.
O cache global alinha o intervalo de tempo da consulta (início/fim) a múltiplos inteiros do parâmetro step, o que aumenta a taxa de acerto do cache. Os resultados da consulta são atualizados no cache após a conclusão de cada consulta.
Resultados incompletos ou fora do intervalo de tempo armazenado não entram no cache, preservando a integridade dos dados.
Computação concorrente
Consultas padrão do Prometheus executam em uma única corrotina em um servidor, tornando-se lentas para grandes volumes de séries temporais, longos intervalos de tempo ou lógicas complexas. O Simple Log Service estende o mecanismo do Prometheus para dividir consultas PromQL por intervalo de tempo ou por série temporal, distribuindo-as entre vários servidores e melhorando o desempenho de 2x a 10x.
-
Divisão por intervalo de tempo
Exemplo: uma consulta de 12 horas divide-se em 6 subconsultas com intervalos de 2 horas. Todas as 6 subconsultas executam simultaneamente e os resultados são mesclados.
query: sum(metric) interval: 12h step: 2m -
Divisão por série temporal
Exemplo: uma métrica com 500.000 séries temporais e 10 tarefas concorrentes executa 10 tarefas paralelas de 50.000 séries temporais cada e, em seguida, mescla os resultados.
O mecanismo de séries temporais do SLS identifica automaticamente as consultas PromQL elegíveis para computação concorrente e as distribui entre os nós.
A computação concorrente beneficia consultas com longos intervalos de tempo ou grande número de séries temporais. Para pequenos volumes de dados, ela pode degradar o desempenho. Utilize o modo HTTP FormValue para configurar a computação concorrente por consulta.
A agregação sem
without()(equivalente abyem todos os rótulos) gera ganhos mínimos de desempenho, pois os resultados intermediários quase não são reduzidos. Com muitas séries temporais, o desempenho pode até piorar. A agregação combyem múltiplos rótulos também apresenta melhoria limitada.
Parâmetros
Configure os parâmetros de aceleração de consulta no modo MetricsConfig ou HTTP FormValue.
|
Categoria |
Parâmetro |
Descrição |
MetricsConfig |
FormValue |
Descrição |
|
parallel_config (parâmetros de computação concorrente) |
enable |
Ativa a computação concorrente. Desativado por padrão. |
Suportado |
Suportado |
Divide uma consulta em subconsultas distribuídas entre nós de computação secundários. Os resultados são agregados no nó principal. |
|
mode |
Modo de computação concorrente. Valores válidos:
|
Suportado |
Não suportado |
Modo auto ou static. Para o modo static, consulte o suporte técnico do Simple Log Service. |
|
|
timePieceInterval |
Intervalo de divisão de tempo em segundos. Valores válidos: 3600 a 2592000. Padrão: 21600 (6 horas). |
Suportado |
Suportado |
Intervalo de divisão de tempo em segundos. No console, especifique um valor em horas inteiras. |
|
|
timePieceCount |
Número de subconsultas após a divisão baseada em tempo. Valores válidos: 1 a 16. Padrão: 8. |
Suportado |
Suportado |
Quantidade de subconsultas geradas pela divisão temporal. |
|
|
totalParallelCount |
Total de tarefas concorrentes para divisão de séries temporais. Valores válidos: 2 a 64. Padrão: 8. |
Suportado |
Suportado |
Total de tarefas para divisão de séries temporais. Exemplo: uma métrica com 5 milhões de séries temporais e totalParallelCount=10 executa 10 tarefas de 500.000 séries temporais cada. |
|
|
parallelCountPerHost |
Tarefas concorrentes por servidor. Valores válidos: 1 a 8. Padrão: 2. |
Suportado |
Suportado |
Número de tarefas de divisão de séries temporais atribuídas a cada servidor. |
|
|
query_cache_config (parâmetros de cache global) |
enable |
Ativa o cache global. Desativado por padrão. |
Suportado |
Suportado |
Reutiliza resultados parciais de consultas idênticas anteriores. |
Modo MetricsConfig
O MetricsConfig é um parâmetro por Metricstore configurável pelo console do Simple Log Service ou por SDKs. As alterações entram em vigor após 3 minutos.
Console
Na página Metricstore Attribute, execute as seguintes operações. Para mais informações sobre como acessar a página Metricstore Attribute, consulte Modificar um metricstore.
Modos de computação concorrente:
No modo auto, o Simple Log Service estima o nível de concorrência com base no volume de dados de consultas idênticas recentes.
No modo static, configure a concorrência manualmente. Consulte o suporte técnico do Simple Log Service antes de usar o modo static.

SDK
Utilize o SDK for Java do Simple Log Service para modificar o MetricsConfig no formato JSON. Exemplo:
{
"parallel_config": {
"enable": true,
"mode": "static",
"parallel_count_per_host": 2,
"time_piece_count": 8,
"time_piece_interval": 21600,
"total_parallel_count": 8
},
"query_cache_config": {
"enable": true
}
}
A tabela a seguir mapeia os parâmetros de aceleração de consulta para os campos JSON do MetricsConfig e chaves FormValue.
|
Categoria |
Parâmetro |
MetricsConfig |
FormValue |
|
|
parallel_config |
enable |
enable |
x-sls-parallel-enable |
|
|
mode |
mode |
Nenhum |
||
|
timePieceInterval |
time_piece_interval |
x-sls-parallel-time-piece-interval |
||
|
timePieceCount |
time_piece_count |
x-sls-parallel-time-piece-count |
||
|
totalParallelCount |
total_parallel_count |
x-sls-parallel-count |
||
|
parallelCountPerHost |
parallel_count_per_host |
x-sls-parallel-count-per-host |
||
|
query_cache_config |
enable |
enable |
x-sls-global-cache-enable |
|
Modo HTTP FormValue
No modo HTTP FormValue, as configurações de aceleração de consulta aplicam-se apenas à solicitação atual. Para mais informações sobre a API HTTP relacionada ao Metricstore, consulte APIs de consulta de métricas de séries temporais.
Exemplos:
Cache global
Adicione x-sls-global-cache-enable=true para ativar o cache global.
https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range?query=sum(up)&start=1690876800&end=1690877800&step=10&x-sls-global-cache-enable=true
Computação concorrente
Adicione x-sls-parallel-enable=true&x-sls-parallel-count=16 para ativar a computação concorrente e definir o grau de concorrência como 16.
https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range?query=sum(up)&start=1690876800&end=1690877800&step=10&x-sls-parallel-enable=true&x-sls-parallel-count=16