À medida que os dados de séries temporais se acumulam, os custos de armazenamento crescem linearmente com o volume. O mecanismo de rollup do Elasticsearch permite agregar dados históricos em resumos compactos por uma fração do custo de armazenamento original, mantendo o suporte a consultas de agregação via Kibana.
Este tutorial apresenta um fluxo de trabalho completo de rollup para dados de monitoramento de tráfego do Logstash: criação de um job de rollup, consulta ao índice de rollup e construção de um painel no Kibana para visualizar as métricas networkoutTraffic e networkinTraffic por ID da instância, com granularidade horária.
Os comandos deste tutorial aplicam-se ao Elasticsearch V7.4. Para comandos da versão V6.x, consulte Getting started with rollups .
Pré-requisitos
Antes de começar, verifique se você possui:
A permissão
manageoumanage_rollup. Para mais detalhes, consulte Security privilegesUma instância do Alibaba Cloud Elasticsearch V7.4 (Standard Edition) em execução. Para criar uma, consulte Create an Alibaba Cloud Elasticsearch cluster
Acesso ao console do Kibana. Para obter instruções, consulte Log on to the Kibana console
Execute todos os comandos de API deste tutorial no console do Kibana.
Contexto
O índice source utilizado neste tutorial segue o padrão monitordata-logstash-sls-*, onde * representa a data no formato YYYY-MM-DD. Um novo índice é criado diariamente.
O mapeamento do índice é:
"monitordata-logstash-sls-2020-04-05" : {
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"__source__" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"disk_type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"host" : {
"type" : "keyword"
},
"instanceId" : {
"type" : "keyword"
},
"metricName" : {
"type" : "keyword"
},
"monitor_type" : {
"type" : "keyword"
},
"networkinTraffic" : {
"type" : "double"
},
"networkoutTraffic" : {
"type" : "double"
},
"node_spec" : {
"type" : "keyword"
},
"node_stats_node_master" : {
"type" : "keyword"
},
"resource_uid" : {
"type" : "keyword"
}
}
}
}
}
Etapa 1: Crie um job de rollup
Um job de rollup define quais índices source agregar, quais campos usar para agrupamento, quais métricas calcular e a frequência de execução.
O job abaixo lê dados de monitordata-logstash-sls-*, agrupa os dados por hora e ID da instância, calcula a soma de cada campo de tráfego e executa a cada 15 minutos.
PUT _rollup/job/ls-monitordata-sls-1h-job1
{
"index_pattern": "monitordata-logstash-sls-*",
"rollup_index": "monitordata-logstash-rollup-1h-1",
"cron": "0 */15 * * * ?",
"page_size" :1000,
"groups" : {
"date_histogram": {
"field": "@timestamp",
"fixed_interval": "1h"
},
"terms": {
"fields": ["instanceId"]
}
},
"metrics": [
{
"field": "networkoutTraffic",
"metrics": ["sum"]
},
{
"field": "networkinTraffic",
"metrics": ["sum"]
}
]
}
Parâmetros:
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
|
|
Sim |
string |
Índice source ou padrão de índice. Aceita caracteres curinga ( |
|
|
Sim |
string |
Índice de destino para os resumos de rollup. Deve ser um nome completo; caracteres curinga não são suportados. |
|
|
Sim |
string |
Frequência de execução do job de rollup. Controla a periodicidade do job, não a granularidade da agregação. |
|
|
Sim |
integer |
Quantidade de resultados de bucket processados por iteração. Valores maiores aceleram o processamento, mas aumentam o uso de memória. |
|
|
Sim |
object |
Defina os campos de agrupamento e os métodos de agregação. |
|
|
Sim |
object |
Agrupa o campo de data em buckets baseados em tempo. |
|
|
Sim |
string |
Campo de data a ser incluído no rollup. |
|
|
Sim |
time unit |
Granularidade da agregação. |
|
|
Não |
object |
Agrupa pelos campos de termo especificados. |
|
|
Sim |
string |
Campos para agrupamento. Aceita tipos de campo |
|
|
Não |
object |
Defina quais campos numéricos serão agregados. |
|
|
Sim |
string |
Campo a ser agregado. |
|
|
Sim |
array |
Operadores de agregação a serem aplicados: |
Para a referência completa de parâmetros, consulte Create rollup jobs API.
Regras de configuração:
index_patternerollup_indexdevem ser diferentes. Seindex_patternfor um caractere curinga que corresponda arollup_index, a API retornará um erro.O mapeamento de
rollup_indexutiliza o tipo object. Definir o mesmo valor deindex_patterncausará um erro.Jobs de rollup suportam apenas agregação de histograma de data, agregação de histograma e agregação de termos. Para mais detalhes, consulte Rollup aggregation limitations.
Etapa 2: Execute o job de rollup e verifique seu status
-
Execute o job de rollup:
POST _rollup/job/ls-monitordata-sls-1h-job1/_start -
Recupere a configuração do job, as estatísticas e o status atual:
GET _rollup/job/ls-monitordata-sls-1h-job1/Para o esquema completo da resposta, consulte Get rollup jobs API. Uma resposta bem-sucedida será semelhante a:
{ ........ "status" : { "job_state" : "indexing", "current_position" : { "@timestamp.date_histogram" : 1586775600000, "instanceId.terms" : "ls-cn-ddddez****" }, "upgraded_doc_id" : true }, "stats" : { "pages_processed" : 3, "documents_processed" : 11472500, "rollups_indexed" : 3000, "trigger_count" : 1, "index_time_in_ms" : 766, "index_total" : 3, "index_failures" : 0, "search_time_in_ms" : 68559, "search_total" : 3, "search_failures" : 0 } }
Etapa 3: Consultar o índice de rollup
Os documentos de rollup possuem uma estrutura interna diferente dos dados brutos. Ao consultar um índice de rollup, o Elasticsearch reescreve sua Query DSL para corresponder ao formato de rollup e restaura o resultado para a estrutura esperada pelo seu cliente.
-
Recupere todos os documentos no índice de rollup:
GET monitordata-logstash-rollup-1h-1/_search { "query": { "match_all": {} } } -
Use
_rollup_searchpara calcular a soma denetworkoutTraffic:GET /monitordata-logstash-rollup-1h-1/_rollup_search { "size": 0, "aggregations": { "sum_temperature": { "sum": { "field": "networkoutTraffic" } } } }
_rollup_search suporta um subconjunto dos recursos de pesquisa padrão:
|
Recurso |
Suporte |
Observações |
|
|
Suportado |
Query DSL com restrições. Tipos suportados: term, terms, range, match_all e consultas compostas (Boolean, boosting, constant score). |
|
|
Suportado |
Parâmetro de agregação padrão. |
|
|
Deve ser |
O rollup funciona apenas com agregações; documentos brutos não são retornados. |
|
|
Não suportado |
— |
Para a lista completa de restrições, consulte Rollup search limitations e Rollup aggregation limitations.
Limitações de consulta:
Especifique apenas um índice de rollup por consulta. Correspondência aproximada (fuzzy match) no nome do índice de rollup não é suportada. Consultas de dados em tempo real aceitam múltiplos índices.
Etapa 4: Crie um padrão de índice de rollup
Antes de visualizar dados de rollup no Kibana, crie um padrão de índice de rollup para que o Kibana reconheça o índice.
Faça login no console do Kibana. Para obter instruções, consulte Log on to the Kibana console.
-
No painel de navegação à esquerda, clique em Management.

Na área Kibana, clique em Index Patterns.
Opcional: Feche a página About index patterns. Pule esta etapa caso já tenha criado um padrão de índice anteriormente.
-
Escolha Create index pattern > Rollup index pattern.

-
No campo Index pattern, insira o nome do índice de rollup (por exemplo,
monitordata-logstash-rollup-1h-1) e clique em Next step.
-
Na lista suspensa Time Filter field name, selecione @timestamp.

Clique em Create index pattern.
Etapa 5: Crie gráficos de monitoramento de tráfego
Crie gráficos de linha para networkinTraffic e networkoutTraffic utilizando o padrão de índice de rollup.
Faça login no console do Kibana. Para obter instruções, consulte Log on to the Kibana console.
-
Crie um gráfico de linha:
No painel de navegação à esquerda, clique em Visualize.

Clique em Create new visualization.
Na caixa de diálogo New Visualization, clique em Line.
Na lista de padrões de índice, selecione o padrão de índice de rollup criado na Etapa 4.
-
Configure as definições de Metrics e Buckets:
Na seção Metrics, clique em
.-
Defina os parâmetros do eixo Y:
Parâmetro
Valor
Aggregation
Sum
Field
networkinTrafficounetworkoutTrafficCustom label
Insira um rótulo para o eixo Y
Na seção Buckets, escolha Add > X-axis.
-
Defina os parâmetros do eixo X:
Parâmetro
Valor
Aggregation
date_histogram(conforme definido emgroupsna Etapa 1)Field
@timestampMinimum interval
Múltiplo inteiro do intervalo de rollup (por exemplo,
2hou3h). O padrão é a granularidade de agregação definida no job de rollup. Clique em Apply Changes
.
Na barra de navegação superior, clique em Save.
Repita as etapas acima para criar um gráfico de medidor (gauge chart).
Etapa 6: Crie um painel de monitoramento de tráfego
-
No painel de navegação à esquerda, clique em Dashboard.

Clique em Create new dashboard.
Na barra de navegação superior, clique em Add.
Na página Add panels, clique em Save na barra de navegação superior.
Feche a página Add panels e clique em Save na barra de navegação superior.
Insira um nome para o painel e clique em Confirm Save. O painel será exibido.
Clique em + Add filter, selecione um item de filtro, configure as condições e clique em Save.