Corrigindo dados do log usando uma regra Substituir
No IBM® Cloud Logs, é possível usar a regra Substituir para mudar a estrutura de log, reparar logs formatados incorretamente, mudar a severidade do log ou mascarar informações.
Antes de Iniciar
As regras de análise são organizadas dentro de Grupos de Regras Cada grupo tem um nome e um conjunto de regras com um relacionamento lógico entre eles.. Os logs são processados de acordo com a ordem do grupo de regras (do início ao
fim) Eles são então processados pela ordem de regras dentro do grupo de regras e de acordo com os operadores lógicos entre eles (AND/OR). As regras ajudam a processar, analisar e reestruturar dados do log para preparar o monitoramento
e a análise. Para obter mais informações, consulte Trabalhando com grupos da regra
Configurando uma regra de substituição
Conclua as etapas a seguir:
-
Clique no ícone Pipeline de dados
> Regras de análise e clique em Novo grupo de regras.
-
Na seção Detalhes, insira Nome do Grupo de Regras e Descrição do Grupo de Regras.
-
Na seção Correspondente de regra, configure os aplicativos, subsistemas e gravidades que definem os logs nos quais aplicar as regras que estão incluídas no grupo de regras
-
Na seção Regras, selecione Substituir
.
-
Insira um nome.
-
Opcionalmente, insira uma descrição.
-
Selecione um campo de origem. Este é o campo no qual o RegEx é aplicado
-
Selecione um campo de destino. Esse é o campo que será preenchido com os resultados da aplicação da expressão RegEx
-
Insira a Expressão regular (RegEx).
-
Insira uma sequência de substituição que substituirá o RegExcorrespondente..
-
Alterne o status para ACTIVE se desejar que a regra seja ativada..
-
-
Inclua grupos de regras adicionais clicando em Incluir regra e selecionando o tipo de regra desejado.. Alterne AND/OR para selecionar como deseja que as regras adicionais sejam processadas.
-
Clique em Criar grupo de regras.
Exemplo: reparando um log JSON formatado incorretamente
Um caso de uso comum para uma regra de substituição é reparar os logs JSON formatados incorretamente
No exemplo a seguir, os logs JSON são enviados com um prefixo de data que quebra o formato JSON e os transforma em logs não estruturados..
RegEx identifica a subsequência e remove a sequência incorreta no log.
O log original é:.
2020-08-07 {“status”:”OK”, “user”:John Smith”, “ops”:”J1”}
O RegEx:
.*{
A sequência para substituir o resultado da avaliação da expressão RegEx é:
{
O log resultante:.
{"status":"OK", "user":"John Smith", "ops":"J1"}
Exemplo: reconstruindo um log com campos aninhados
O exemplo a seguir mostra como usar uma regra de substituição para reconstruir um log com campos aninhados.. Campos aninhados são uma restrição nas regras de extração e análise.
O log original:
{"ops":"G1","user":"John Smith-2125 Sierra Ventura Dr.-Sunnyvale-CA-94054","status":"305"}
O RegEx:
(.*user"):"([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)",([^$]*)
Cada um dos parênteses representa um grupo de captura que pode ser endereçado por $n n=1..7
A sequência de substituição:
$1:{"name":"$2","address":"$3","city":"$4","state":"$5","zip":"$6"},$7
O log resultante;
{
"ops":"G1",
"User":{
"name":"John Smith",
"address":"2125 Sierra Ventura Dr.",
"city":"Sunnyvale",
"state":"CA",
"Zip":"94054"
},
"status":"305"
}
Exemplo: Transformando o campo JSON em sequência (escapado) em um objeto.
A regra inner_json é uma regra de substituição especial que usa um valor de campo em um log JSON que inclui em sequência (escape) JSON e transformá-lo em um objeto.
No exemplo a seguir, o log original é::
{
"server":"opa",
"IBC":"45ML",
"thread":"1201",
"message":"{\"first_name\":\"John\", \"last_name\":\"Smith\", \"userID\":\"AB12345\", \"duration\":45}"
}
A mensagem de campo tem um valor de cadeia que é um JSON legal de escape.
Nossa regra de substituição especial altera o nome do campo do nome original "message" para "inner_json":
O RegEx:
“message”\s*:\s*”{\s*\\”
Esse RegEx identifica uma mensagem de nome de campo com o início do JSON escapado.
A sequência de substituição é:
“inner_json”:”{\”
Este exemplo substitui apenas o nome de campo e nada mais.
O log resultante:.
{
"server":"opa",
"inner_json":{
"first_name":"John" ,
"last_name":"Smith" ,
"userID":"AB12345" ,
"duration":45
}
}