APIs e Microsserviços

25 out, 2016

Aumente o logging com uma política personalizada para IBM DataPower na API Conect assembly

Publicidade

Quando você projetar e desenvolver políticas de integração personalizadas, precisa ser avisado quand0 quaisquer problemas ocorrerem com suas políticas. Ao definir uma política de log personalizada para registrar os valores das variáveis de contexto, você pode ser rapidamente alertado sobre onde as políticas podem não estar funcionando corretamente, assim você pode corrigir eventuais erros.

Este artigo descreve uma política definida pelo usuário para ajudar com o registro e o diagnóstico de erro na ferramenta API Connect assembly. Nessa política, strings personalizadas ou variáveis de contexto podem ser escritas diretamente para os logs IBM DataPower em qualquer ponto durante a execução de uma API. Ao definir essa política, as mensagens podem ser escritas em qualquer nível de prioridade. E, quando você combina a API Connect com a capacidade de DataPower para ouvir seletivamente diferentes prioridades, você obtém o registro e o diagnóstico ainda mais poderosos e simples ao projetar uma API.

Políticas na API Connect

Com a ferramenta API Connect assembly, você pode adicionar transformações e lógica ao comportamento de tempo de execução de suas APIs. Você pode usar o assembly para criar fluxos complexos que apresentam construções lógicas, como os argumentos if e switch. Você também pode criar mecanismos de manipulação de dados, tais como field redaction, JSON-to-XML e mapeamento de entrada e saída. Essas ações são chamadas políticas. Você pode conectá-las e organizá-las arrastando os tiles para o assembly.

figure1

A política writeToDataPowerLog

Para enfrentar os desafios identificados no diagnóstico de erro de log ao usar o assembly, você pode usar uma política definida pelo usuário. Neste artigo, nós usamos e descrevemos a política writeToDatapowerLog (você pode baixar essa política na seção “Download Resoucers” no final deste artigo).

Você importa essa política em API Connect como um arquivo compactado (.zip). O arquivo compactado contém todos os arquivos que são necessários para o DataPower executar a regra de política em tempo de execução, além de um arquivo YAML que descreve os parâmetros de metadados e a política. Nenhuma extração ou manipulação do arquivo é necessária.

Para usar a política, importe o arquivo compactado para a API Connect. Depois de importá-lo, a política é exibida na montagem, como mostrado na parte inferior da figura a seguir, e está pronta para uso.

figure2

Agora você pode arrastar a política para o assembly tantas vezes quanto necessário. Cada instância do tile mantém sua própria configuração distinta. A política usa os dois parâmetros a seguir:

  • logLevel. Esse parâmetro indica o nível de prioridade da mensagem registrada. DataPower tem uma série de níveis de prioridade que variam de info a critical. Os níveis estão disponíveis a partir de uma lista drop-down dentro da configuração da política;
  • Message. Esse parâmetro refere-se à mensagem a ser gravada nos logs do DataPower. Ele suporta completamente as variáveis de contexto de execução do DataPower.

A figura a seguir mostra um exemplo que utiliza duas instâncias separadas da política writeToDatapowerLog.

figure3

As figuras seguintes mostram a configuração no API Connect assembly para ambas as instâncias. A primeira instância (ver figura abaixo) mostra uma mensagem para uma situação crítica.

figure4

A segunda instância (ver figura abaixo) usa o suporte de variável de contexto para registrar o nome da API dentro da mensagem de erro do log.

figure5

Os resultados dessas instâncias na chamada de API são exibidos nos logs do DataPower como mostrado na figura a seguir. Ambas as mensagens mostradas nessa figura foram criadas de acordo com a configuração da política que descrevemos anteriormente. A primeira mensagem na parte superior mostra o nome da API (writetodatapowerlog-api), como expandido a partir do contexto de referência variável $ (api.name). A segunda mensagem na parte inferior é registrada como nível critical, conforme especificado na primeira instância.

figure6

Ambas as mensagens são parte da categoria gatewayscript-user porque a principal regra lógica é descrita usando gatewayscript no DataPower. A seção seguinte mostra uma versão expandida da regra de codificação para a política.

O código gatewayscript

A principal execução da política é construída em volta do seguinte gatewayscript.

function writeToDatapowerLog()
                {
 
    var apic = require('local://isp/policy/apim.custom.js');
    var props = apic.getPolicyProperty(),
        apiName = apic.getContext('api.name'),
        m = props.message;
 
    if (props === undefined) {
        console.error('The policy properties were not retrieved for policy: writeToDatapowerLog.');
        return;
    }
 
    if  (apiName === undefined || apiName === '') {
        console.error('The name of the API for this call could not be determined.');
    }
 
    switch(props.logLevel) {
        case 'info':
            console.info('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'notice':
            console.notice('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'warn':
            console.warn('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'error':
            console.error('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'critical':
            console.critical('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'alert':
            console.alert('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'emerg':
            console.emerg('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'log':
            console.log('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        case
                'trace':
            console.trace('The API: \"' + apiName + '\" has logged the following message: ' + m); break;
        default:
            console.error('The logLevel chosen: ' + props.logLevel + ' was not recognised');
    }
    return;
}
 
writeToDatapowerLog();

Para mais informações, consulte os tópicos implementando sua política e gateways no IBM Knowledge Center.

Conclusão

Este artigo explica uma solução versátil para ajudá-lo a enfrentar os desafios da flexibilidade de registros quando se usa um DataPower em tempo de execução e API Connect assembly. Ao utilizar a política definida pelo usuário, como descrito, você pode customizar uma mensagem de log a um nível de prioridade específico diretamente para os logs do DataPower, com o suporte integral das variáveis de contexto de tempo de execução. Essa solução é poderosa para criar mensagens informativas e úteis para detecção e diagnóstico de erros durante o desenvolvimento, e como um dispositivo de monitoramento em tempo de execução.

***

Chris Phillips faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://www.ibm.com/developerworks/library/mw-1610-phillips-trs/index.html.