Neste documento, descrevemos como adicionar campos LogEntry indexados ao seu buckets do Cloud Logging para criar a consulta dos dados de registros com mais rapidez.
Visão geral
O desempenho da consulta é essencial para qualquer solução de geração de registros. Conforme as cargas de trabalho escalonar verticalmente os volumes de registro correspondentes aumentarem, indexar os dados de registro mais usados pode reduzir o tempo de consulta.
Para melhorar o desempenho da consulta, o registro de dados indexa automaticamente os seguintes campos LogEntry:
- resource.type
- resource.labels.*
- logName
- severity
- timestamp
- insertId
- operation.id
- trace
- httpRequest.status
- labels.*
- split.uid
Além dos campos que o Logging indexa automaticamente, também pode direcionar um bucket de registros para indexar outros campos LogEntry criando um um índice personalizado para o bucket.
Por exemplo, suponha que suas expressões de consulta geralmente incluam o campo
jsonPayload.request.status
: É possível configurar um índice personalizado para um bucket
que inclui jsonPayload.request.status
; qualquer consulta subsequente
os dados desse bucket fariam referência
Dados jsonPayload.request.status
se a expressão de consulta incluir esse campo.
Usando a Google Cloud CLI ou a API Logging, é possível adicionar opções índices para buckets de registro novos ou atuais. Ao selecionar campos adicionais para incluir no índice personalizado, observe as seguintes limitações:
- É possível adicionar até 20 campos por índice personalizado.
- Depois de configurar ou atualizar o índice personalizado de um bucket, aguarde uma hora para que as mudanças sejam aplicadas às suas consultas. Essa latência garante a correção do resultado da consulta e aceita registros gravados no passado.
- O Logging aplica a indexação personalizada aos dados armazenados em buckets de registro após a criação ou alteração do índice. mudanças na personalização os índices não se aplicam a registros retroativamente.
Antes de começar
Antes de começar a configurar um índice personalizado, faça o seguinte:
Verifique se você está usando a versão mais recente do CLI gcloud. Para mais informações, consulte Como gerenciar componentes da CLI do Google Cloud.
Verifique se você tem um papel do Identity and Access Management com as seguintes permissões:
Para detalhes sobre esses papéis, consulte Controle de acesso com o IAM.
Definir o índice personalizado
Para cada campo adicionado ao índice personalizado de um bloco, você define dois atributos: um caminho de campo e um tipo de campo:
fieldPath
: descreve o caminho específico para o campo LogEntry no seu as entradas de registro. Por exemplo,jsonPayload.req_status
.type
: indica se o campo é do tipo string ou inteiro. O valores possíveis sãoINDEX_TYPE_STRING
eINDEX_TYPE_INTEGER
.
Um índice personalizado pode ser adicionado criando um novo bucket ou atualizar um bucket atual. Para mais informações sobre como configurar buckets, consulte Configurar buckets de registro.
Para configurar um índice personalizado ao criar um bucket, faça o seguinte:
gcloud
Use o
gcloud logging buckets create
e defina a sinalização --index
:
gcloud logging buckets create BUCKET_NAME\ --location=LOCATION\ --description="DESCRIPTION" \ --index=fieldPath=INDEX_FIELD_NAME,type=INDEX_TYPE
Exemplo de comando:
gcloud logging buckets create int_index_test_bucket \ --location=global \ --description="Bucket with integer index" \ --index=fieldPath=jsonPayload.req_status,type=INDEX_TYPE_INTEGER
API
Para criar um bucket, use projects.locations.buckets.create no a API Logging. Prepare os argumentos do método da seguinte maneira:
Defina o parâmetro
parent
como o recurso em que Para criar o bucket:projects/PROJECT_ID/locations/LOCATION
A variável LOCATION refere-se à região em que você quer que seus registros sejam armazenados.
Por exemplo, se você quiser criar um bucket para o projeto
my-project
em na regiãoasia-east2
, o parâmetroparent
ficaria assim isso:projects/my-project/locations/asia-east2
Defina o parâmetro
bucketId
. por exemplo,my-bucket
.No corpo da solicitação
LogBucket
, configure o objeto IndexConfig. para criar o índice personalizado.Chame projects.locations.buckets.create para criar o bucket.
Para atualizar um bucket atual para incluir um índice personalizado, faça o seguinte:
gcloud
Use o comando
gcloud logging buckets update
e defina a flag --add-index
:
gcloud logging buckets update BUCKET_NAME\ --location=LOCATION\ --add-index=fieldPath=INDEX_FIELD_NAME,type=INDEX_TYPE
Exemplo de comando:
gcloud logging buckets update \ int_index_test_bucket \ --location=global \ --add-index=fieldPath=jsonPayload.req_status,type=INDEX_TYPE_INTEGER
API
Use projects.locations.buckets.patch na API Logging. Na LogBucket, configure o objeto IndexConfig para inclua os campos LogEntry que você quer indexar.
Excluir um campo indexado personalizado
Para excluir um campo do índice personalizado de um bucket, faça o seguinte:
gcloud
Use o
gcloud logging buckets update
e defina a flag --remove-indexes
:
gcloud logging buckets update BUCKET_NAME\ --location=LOCATION\ --remove-indexes=INDEX_FIELD_NAME
Exemplo de comando:
gcloud logging buckets update int_index_test_bucket \ --location=global \ --remove-indexes=jsonPayload.req_status
API
Usar projects.locations.buckets.patch na API Logging. No corpo da solicitação do LogBucket, remova os campos LogEntry do objeto IndexConfig.
Atualizar o tipo de dados do campo personalizado indexado
Se você precisar corrigir o tipo de dados de um campo indexado personalizado, faça o seguinte:
gcloud
Use o comando
gcloud logging buckets update
e defina a flag --update-index
:
gcloud logging buckets update BUCKET_NAME\ --location=LOCATION\ --update-index=fieldPath=INDEX_FIELD_NAME,type=INDEX_TYPE
Exemplo de comando:
gcloud logging buckets update \ int_index_test_bucket \ --location=global \ --update-index=fieldPath=jsonPayload.req_status,type=INDEX_TYPE_INTEGER
API
Use projects.locations.buckets.patch na API Logging. Na LogBucket, atualize o objeto IndexConfig para fornecer o tipo de dados correto para um campo LogEntry.
Atualizar o caminho de um campo indexado personalizado
Se você precisar corrigir o caminho de um campo indexado personalizado, faça o seguinte:
gcloud
Use o
gcloud logging buckets update
e defina as sinalizações --remove-indexes
e --update-index
:
gcloud logging buckets update BUCKET_NAME\ --location=LOCATION\ --remove-indexes=OLD_INDEX_FIELD_NAME \ --update-index=fieldPath=NEW_INDEX_FIELD_NAME,type=INDEX_TYPE
Exemplo de comando:
gcloud logging buckets update \ int_index_test_bucket \ --location=global \ --remove-indexes=jsonPayload.req_status_old_path \ --add-index=fieldPath=jsonPayload.req_status_new_path,type=INDEX_TYPE_INTEGER
API
Usar projects.locations.buckets.patch na API Logging. Na LogBucket, atualize o objeto IndexConfig para fornecer o caminho correto para um campo LogEntry.
Listar todos os campos indexados de um bucket
Para listar os detalhes de um bucket, incluindo os campos indexados personalizados, faça o seguinte:
gcloud
Use o comando gcloud logging buckets describe
:
gcloud logging buckets describe BUCKET_NAME\ --location=LOCATION
Exemplo de comando:
gcloud logging buckets describe indexed-bucket \ --location global
API
Use projects.locations.buckets.get na API Logging.
Limpar campos indexados personalizados
Para remover todos os campos indexados personalizados de um bucket, faça o seguinte:
gcloud
Use o
gcloud logging buckets update
e adicione a sinalização --clear-indexes
:
gcloud logging buckets update BUCKET_NAME\ --location=LOCATION\ --clear-indexes
Exemplo de comando:
gcloud logging buckets update \ int_index_test_bucket \ --location=global \ --clear-indexes
API
Usar projects.locations.buckets.patch na API Logging. Na LogBucket, exclua o objeto IndexConfig.
Consultar e visualizar dados indexados
Para consultar os dados incluídos nos campos indexados personalizados, restrinja o escopo das suas consulta ao bucket que contém os campos indexados personalizados e especificar o visualização de registro apropriada:
gcloud
Para ler registros de um bucket de registros, use o
comando gcloud logging read e adicionar uma
LOG_FILTER
para incluir
seus dados indexados:
gcloud logging read LOG_FILTER --bucket=BUCKET_ID --location=LOCATION --view=VIEW_ID
API
Para ler registros de um bucket de registro, use o método
entries.list
. Definir
resourceNames
para especificar o bucket e a visualização de registros apropriados, e
filter
seleciona seus dados indexados.
Para informações detalhadas sobre a sintaxe de filtragem, consulte Linguagem de consulta do Logging.
Indexação e tipos de campo
O modo como você configura a indexação de campo personalizado pode afetar o armazenamento dos registros em buckets de registros e como as consultas são processadas.
No momento da gravação
O Logging tenta usar o índice personalizado nos dados que estão em buckets de registros após a criação do índice.
Os campos indexados são digitados, o que tem implicações para o carimbo de data/hora na entrada de registro. Quando a entrada de registro está no bucket de registros, o campo de registro é avaliado em relação ao tipo de índice usando estas regras:
- Se o tipo de um campo for igual ao do índice, os dados serão adicionados o índice literalmente.
- Se o tipo do campo for diferente do tipo do índice, o
registro tentará forçar o tipo do índice (por
exemplo, número inteiro para string).
- Se a coerção de tipo falhar, os dados não são indexados. Quando o tipo de coerção funcionar, os dados serão indexados.
No momento da consulta
Ativar um índice em um campo muda a forma como você precisa consultar esse campo. Por padrão, o Logging aplica restrições de filtro a campos com base no tipo de dados em cada entrada de registro que está sendo avaliada. Quando a indexação é ativadas, as restrições de filtro em um campo são aplicadas com base no tipo índice. Adicionar um índice a um campo impõe um esquema a ele.
Quando um índice personalizado é configurado para um bucket, os comportamentos da correspondência de esquema serão diferentes quando ambas as condições forem atendidas:
- O tipo de dados de origem para um campo não corresponde ao tipo de índice desse campo.
- O usuário aplica uma restrição nesse campo.
Considere os seguintes payloads JSON:
{"jsonPayload": {"name": "A", "value": 12345}} {"jsonPayload": {"name": "B", "value": "3"}}
Agora aplique este filtro a cada um:
jsonPayload.value > 20
Se o campo jsonPayoad.value
não tiver indexação personalizada,
O Logging aplica a correspondência de tipo flexível:
Para "A", o Logging observa que o valor do "value" chave é realmente um número inteiro, e que a restrição, "20", pode ser convertida em uma inteiro. Em seguida, o Logging avalia
12345 > 20
e retorna "verdadeiro" porque esse é o caso numericamente.Para "B", o Logging observa que o valor do "value" chave é na verdade uma string. Em seguida, ele avalia
"3" > "20"
e retorna "true", já que esse é o caso alfanumérico.
Se o campo jsonPayload.value
estiver incluído no índice personalizado, então
O Logging avalia essa restrição usando o índice em vez do
a lógica comum do Logging. O comportamento muda:
- Se o índice for do tipo string, todas as comparações serão comparações de strings.
- A entrada "A" não corresponde, já que "12345" não é maior que "20" alfanumérico. A entrada "B" corresponde, já que a string "3" é maior do que "20".
- Se o índice for do tipo inteiro, todas as comparações serão feitas com números inteiros.
- A entrada "B" não corresponde, já que "3" não é maior que "20" numericamente. O "A" a entrada corresponde, desde "12345" é maior que "20".
Essa diferença de comportamento é sutil e precisa ser considerada ao definir e usar índices personalizados.
Caso extremo de filtro
Para o índice de tipo inteiro jsonPayload.value
, suponha que um valor de string seja
filtrada:
jsonPayload.value = "hello"
Se não for possível converter o valor da consulta em um tipo de índice, o índice será ignorado.
No entanto, suponha que, para um índice do tipo string, você transmita um valor inteiro:
jsonPayload.value > 50
Nem A nem B correspondem, já que "12345" não corresponde nem "3" é alfanumérica maior de "50".