Gravação e visualização de registros de aplicativos, trabalhos e funções

A criação de log pode ajudá-lo a solucionar problemas em IBM Cloud® Code Engine. É possível visualizar os logs usando o console ou a CLI.

Interessado em registro para frotas? Consulte Configuração da observabilidade para frotas e Visualização de registros e dados de monitoramento para frotas.

Registros de escrita

Saiba como escrever logs de forma eficaz em IBM Cloud® Code Engine, incluindo as práticas recomendadas para formatos de log, níveis de gravidade, carimbos de data/hora e manipulação de entradas de várias linhas para logs estruturados e não estruturados.

Considerações sobre como escrever registros

Gravação de logs na saída padrão e no erro

Em Code Engine, os registros de log emitidos pela sua carga de trabalho são coletados somente quando são gravados em stdout ou stderr, seguindo as diretrizes do aplicativo Twelve-Factor, que recomendam tratar os logs como fluxos de eventos em vez de gerenciar arquivos de log. Consulte Criação de aplicativos nativos da nuvem: aplicativos com 12 fatores - Fator 11 - Registros.

O pipeline de registro da plataforma captura e processa automaticamente essa saída, tornando-a disponível para análise e solução de problemas. As linhas de registro gravadas em arquivos no sistema de arquivos efêmeros do contêiner não são ingeridas, mantidas ou expostas por meio da interface de registro. Como resultado, todos os registros armazenados no sistema de arquivos efêmeros são perdidos quando a instância é reiniciada ou encerrada e não estão disponíveis para depuração operacional ou análise da causa raiz.

Devo adicionar registros de data e hora às minhas linhas de registro?

Os registros de log gerados pelas cargas de trabalho do usuário devem evitar a incorporação de suas próprias informações de carimbo de data/hora, pois a infraestrutura do Code Engine captura e padroniza automaticamente os carimbos de data/hora. A inclusão de carimbos de data/hora no nível do aplicativo pode criar inconsistências entre os serviços, especialmente quando as cargas de trabalho são executadas em ambientes distribuídos ou em contêineres, nos quais os relógios do sistema podem variar ou ser diferentes. Confiar nos carimbos de data e hora da plataforma garante formatos de hora uniformes, sequenciamento preciso e correlação confiável com outros logs gerados pelo sistema, o que simplifica a solução de problemas, a auditoria e a observabilidade em toda a implementação.

Como meus níveis de registro são mapeados para a gravidade do IBM Cloud Logs?

O nível de log fornecido em cada registro de log é mapeado para as severidades do site IBM Cloud Logs, conforme descrito em Mapeamento das severidades de log para as severidades do site IBM Cloud Logs. Nas seções a seguir, você saberá mais sobre como os níveis de log são analisados para logs não estruturados e estruturados e quais valores de nível de log são suportados.

E se meus dados de registro tiverem várias linhas?

Para aproveitar os recursos de pesquisa e formatação do IBM Cloud Logs, altere a formatação do registro da seguinte forma.

  • Se as linhas de registro abrangerem várias linhas, altere a forma de formatação e saída dos registros para que fiquem em uma única linha. Use o formato JSONL (consulte Formatos de registro ) para seus registros com IBM Cloud Logs.
  • Seus registros devem estar em conformidade com os limites para IBM Cloud Logs.

formatos de log

Os dados de registro podem ser emitidos em dois formatos comuns: não estruturado e estruturado.

  • Os registros não estruturados são textos de forma livre que são simples de produzir e legíveis por humanos, mas difíceis de analisar de forma consistente para sistemas de back-end. Isso limita a filtragem e a correlação confiáveis.
  • Os logs estruturados codificam os campos em um esquema previsível (por exemplo, JSON), permitindo que os pipelines de log indexem e consultem atributos como IDs de solicitação, IDs de usuário ou metadados específicos de domínio. O site Code Engine oferece suporte a JSON para logs estruturados, o que ajuda a garantir que seus campos personalizados permaneçam legíveis por máquina e facilmente filtráveis em ferramentas de observabilidade.

Se você planeja enriquecer as linhas de registro com informações personalizadas e filtráveis, use o registro estruturado.

Registros não estruturados

Exemplos

Abaixo estão exemplos simples que gravam uma linha de registro não estruturada (texto de forma livre) na saída padrão.

Os exemplos estão publicados no repositório público de amostras Code Engine em https://github.com/IBM/CodeEngine/blob/main/logging/README.md.

Node.js (JavaScript)

console.log('User signup succeeded for account abc123');

Python

print("User signup succeeded for account abc123")

Golang

package main

import (
    "fmt"
)

func main() {
    fmt.Println("User signup succeeded for account abc123")
}

Java

package com.ibm.cloud.codeengine.sample;

public class App {
    public static void main(String[] args) {
        System.out.println("User signup succeeded for account abc123");
    }
}

Detecção de nível de registro

Cada registro de log é examinado em busca de palavras-chave para determinar a gravidade. Os valores de gravidade, que são avaliados de forma insensível ao caso, são critical, error, warn, info, debug e verbose.

Se uma linha de log começar com uma palavra-chave de gravidade no formato LEVEL MESSAGE, Code Engine removerá o nível detectado da mensagem de log exibida para que os usuários possam se concentrar no conteúdo principal e ainda filtrar com precisão por gravidade na visualização IBM Cloud Logs. Nesse caso, o valor de gravidade extraído é armazenado no campo de registro de log level. Há suporte para os seguintes níveis de gravidade sem distinção entre maiúsculas e minúsculas: fatal, error, warn, info, debug, e trace. Por exemplo, em Node.js você pode escrever:

// Unstructured log with level prefix
console.log('ERROR Payment service timeout while creating invoice');

Em IBM Cloud Logs, essa entrada aparece com a gravidade Erro e o texto da mensagem "Tempo limite do serviço de pagamento durante a criação da fatura"; você pode então filtrar por Gravidade = Erro para restringir os resultados. Você também pode usar regras de análise e gravidade para personalizar a forma como os níveis são extraídos e combinados em seu ambiente.

A detecção do nível de registro também funciona quando as linhas de registro seguem formatos ligeiramente diferentes, como LEVEL: MESSAGE ou [LEVEL] MESSAGE. No entanto, nesses casos, a palavra-chave level não é removida da mensagem de registro, mesmo que a gravidade ainda esteja classificada corretamente.

Além disso, a lógica de detecção pode inferir um nível de gravidade quando qualquer palavra-chave compatível aparece em qualquer lugar da mensagem, não apenas no início. Por exemplo, a linha de registro:

The payment workflow encountered an unexpected error during validation

Essa linha de registro é classificada como Erro porque a palavra erro aparece no texto da mensagem.

A detecção do nível de registro não considera o fluxo de entrada (stdout ou stderr) para a detecção do nível de registro. Portanto, as mensagens de registro gravadas no erro padrão (stderr) são avaliadas exclusivamente no texto da mensagem. Por exemplo, console.error("Some message") é classificado como Info, embora seja gravado em stderr.

Para cargas de trabalho de função, o nível de registro não é removido da mensagem de registro exibida, mesmo quando é detectado no início da linha de registro no formato LEVEL MESSAGE.

Análise e avaliação de carimbo de data/hora

Não é recomendável adicionar carimbos de data/hora às linhas de registro de aplicativos porque o site Code Engine atribui automaticamente um carimbo de data/hora normalizado quando os registros são ingeridos. Se um registro de data e hora for incluído no início de uma linha de registro, o sistema tentará analisá-lo. Se corresponder a um dos formatos suportados, o carimbo de data/hora será removido da mensagem de registro exibida, de forma semelhante à maneira como os níveis de registro são tratados. Os formatos de registro de data e hora compatíveis incluem:

  • 2026-02-08T20:30:45.123
  • 2026-02-08T20:30:45.123Z
  • 2026-02-08T21:03:45.123456Z
  • 2026-02-08T21:03:45.123456789Z
  • 2026-02-08 21:03:45.123Z
  • 2026-02-08 20:30:45.123

Quando uma linha de registro contém um carimbo de data/hora e um nível de registro no início (por exemplo, TIMESTAMP LEVEL MESSAGE), o pipeline avalia os dois campos. Se ambos corresponderem aos padrões suportados, cada um deles será classificado adequadamente e removido da mensagem de registro renderizada, deixando apenas o corpo da mensagem para facilitar a leitura e a filtragem. Por exemplo, os seguintes formatos são analisados com sucesso:

  • 2026-02-08T21:03:45.123456789Z ERROR Payment service timeout
  • 2026-02-08 20:30:45.123 INFO Starting billing workflow

Nos casos em que um carimbo de data/hora aparece, mas não corresponde aos formatos compatíveis, ele permanece como parte da linha de registro e é tratado como texto normal, mas o restante da mensagem ainda é processado normalmente.

Para cargas de trabalho de função, os carimbos de data/hora não são analisados, avaliados ou removidos das mensagens de registro. Qualquer registro de data e hora incluído nos logs de função permanece como parte da mensagem exibida.

Suporte multilinha

Code Engine suporta entradas de registro com várias linhas. No entanto, ao emitir registros, você deve garantir que os caracteres de nova linha (\n) sejam codificados corretamente (\\n) para que o pipeline de registro possa processar e renderizar corretamente as mensagens de várias linhas. Por exemplo, em Node.js, é possível produzir uma entrada de registro de várias linhas como esta:

console.log("Starting billing workflow...\\nStep 1: Validating input...\\nStep 2: Processing payment...");

Registro de erros

Se a sua carga de trabalho emitir rastreamentos de pilha de erros de várias linhas, use o formato de log JSON estruturado em vez da saída não estruturada do console. Os logs estruturados preservam os campos de várias linhas de forma confiável e garantem que os rastreamentos de pilha sejam agrupados em um único registro de log, o que é abordado na seção Logs estruturados.

Por exemplo, a mensagem de registro a seguir é classificada como Erro porque a palavra-chave "error" aparece na mensagem de registro. No entanto, o rastreamento de pilha fornecido pelo objeto err é renderizado em várias linhas de registro.

try {
  throw new Error("boom!");
} catch (err) {
  console.error("An error occurred", err);
}

Registros estruturados

Exemplos

A seguir, exemplos mínimos de registro estruturado para cada linguagem e tempo de execução que emitem um único JSON com o nível de registro no campo level e a mensagem de registro no campo message.

Os exemplos estão publicados no repositório público de amostras Code Engine em https://github.com/IBM/CodeEngine/blob/main/logging/README.md.

Node.js ( winston )

import winston from "winston";
const { combine, json } = winston.format;

// Create a custom logger
const logger = winston.createLogger({
  level: 'info',
  transports: [new winston.transports.Console()],
  format: combine(json())
});

// Usage
logger.info("User signup succeeded")
logger.error("Payment service timeout")

Python ( Loguru )

from loguru import logger
import sys
import json
import traceback

# Define a custom JSON sink
def json_sink(message):
    record = message.record

    # Base fields: level + message, no timestamp
    payload = {
        "level": record["level"].name,   # e.g., "INFO"
        "message": record["message"],    # rendered message
    }

    # Merge in any bound extra fields as top-level keys
    # (skip reserved keys to avoid accidental overwrite)
    for k, v in record["extra"].items():
        if k not in ("level", "message", "stack"):
            payload[k] = v

    # If an exception is attached, render full stack trace into "stack"
    exc = record["exception"]
    if exc:
        # exc.type, exc.value, exc.traceback are available from Loguru
        stack_text = "".join(traceback.format_exception(exc.type, exc.value, exc.traceback))
        payload["stack"] = stack_text

    # Emit a single JSON line
    sys.stdout.write(json.dumps(payload, ensure_ascii=False) + "\n")
    sys.stdout.flush()


# Remove default handler (which includes timestamp, etc.) and add our custom sink
logger.remove()
logger.add(json_sink, level="DEBUG")  # lowest level you want to capture

# Usage
logger.info("User signup succeeded")
logger.error("Payment service timeout")

Golang ( slog )

package main

import (
    "log/slog"
    "os"
)

func main() {
    handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
        // Remove time and rename msg->message
        ReplaceAttr: func(groups []string, attr slog.Attr) slog.Attr {
            // Drop the time attribute
            if attr.Key == slog.TimeKey {
                return slog.Attr{} // empty => removed
            }
            // Rename msg to message
            if attr.Key == slog.MessageKey {
                return slog.String("message", attr.Value.String())
            }
            return attr
        },
    })
    logger := slog.New(handler)

    // Usage
    logger.Info("User signup succeeded")
    logger.Error("Payment service timeout")
}

Java ( SLF4J e Logback com logstash-logback-encoder )

src/main/resources/logback.xml:

<configuration>
    <appender name="jsonConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <timeZone>UTC</timeZone>
            <fieldNames>
                <timestamp>[ignore]</timestamp>
                <logger>[ignore]</logger>
                <version>[ignore]</version>
                <levelValue>[ignore]</levelValue>
                <threadName>[ignore]</threadName>
            </fieldNames>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="jsonConsoleAppender" />
    </root>
</configuration>

src/main/java/com/ibm/cloud/codeengine/sample/App.java:

package com.ibm.cloud.codeengine.sample;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App {
  private static final Logger logger = LoggerFactory.getLogger(App.class);

  public static void main(String[] args) {
    logger.info("User signup succeeded");
    logger.error("Payment service timeout");
  }
}

Detecção de nível de registro

Cada registro de log é examinado em busca de palavras-chave para determinar a gravidade. Os valores de gravidade, que são avaliados de forma insensível ao caso, são critical, error, warn, info, debug e verbose.

Quando você usa logs estruturados, o Code Engine detecta automaticamente o nível de log quando ele é fornecido em um dos campos a seguir: level, severity, ou logLevel. O valor nesses campos não diferencia maiúsculas de minúsculas, o que significa que entradas como error, ERROR ou Error são mapeadas para a mesma gravidade. Há suporte para os seguintes níveis de gravidade sem distinção entre maiúsculas e minúsculas: critical, error, warn, info, debug, e verbose. Quando um campo compatível está presente e contém um desses valores, o nível de registro é extraído, normalizado e usado para filtragem e categorização na interface do usuário de registros. Por exemplo, as seguintes linhas de registro estruturadas são todas interpretadas corretamente com o nível Error:

{ "level": "error", "message": "Payment service timeout" }
{ "severity": "ERROR", "message": "Failed to connect to database" }
{ "logLevel": "eRrOr", "message": "Workflow aborted" }

Independentemente da capitalização ou do valor de campo específico usado, a plataforma identifica corretamente o nível de registro e o aplica para filtragem, agrupamento e análise em seus dados de registro estruturados.

Avaliação de carimbo de data/hora

Para registros estruturados, os carimbos de data e hora personalizados não são analisados ou avaliados. Qualquer campo de registro de data e hora fornecido por você é tratado exclusivamente como dados de carga útil, enquanto a plataforma sempre aplica seu próprio registro de data e hora de ingestão para ordenação e filtragem.

No exemplo abaixo, o valor "timestamp" é preservado, mas ignorado para o tempo de registro.

{ "level": "INFO", "message": "Processing started", "timestamp": "2026-02-08T20:30:45.123Z" }

Adição de informações adicionais de contexto

Você pode enriquecer os registros estruturados com campos personalizados (por exemplo, requestId, userId, ou metadados específicos do domínio). A seguir, exemplos mínimos de cada pilha usada anteriormente.

Mantenha os campos personalizados concisos e estáveis (por exemplo, IDs, códigos ou pequenos enums) para maximizar a capacidade de filtragem e minimizar a cardinalidade em sua instância de registro.

Node.js ( winston )

logger.debug("A structured log entry that contains an extra key", {
  extra_key: "extra_value",
});

Python ( Loguru )

logger.bind(extra_key="extra_value").debug("A structured log entry that contains an extra key")

Golang ( slog )

logger.Debug("A structured log entry that contains an extra key",
  slog.String("extra_key", "extra_value"),
)

Java ( SLF4J e Logback com logstash-logback-encoder )

logger.atDebug().addKeyValue("extra_key", "extra_value")
                .log("A structured log entry that contains an extra key");

Registro de erros

Para capturar ambos a mensagem de erro e sua rastreamento de pilha em logs estruturados, emita um registro JSON que inclua seus campos padrão (level, message) mais um campo stack (ou similar).

Node.js ( winston )

// Error logging
try {
  throw new Error("boom!");
} catch (err) {
  // The error stack trace is rendered in a single log message (see field stack)
  logger.error("An error occurred", err);
}

Python ( Loguru )

try:
  raise RuntimeError("boom!")
except Exception:
  # logger.exception() automatically attaches the current exception info
  logger.exception("An error occurred")

Golang ( slog )

err := errors.New("boom!")
logger.Error("An error occurred",
    slog.Any("err", err),
    // The error stack trace is rendered in a single log message (see field stack)
    slog.String("stack", string(debug.Stack())),
)

Java ( SLF4J e Logback com logstash-logback-encoder )

try {
    throw new RuntimeException("boom!");
} catch (Exception e) {
    logger.atError()
            .setCause(e) // The error stack trace is rendered in a single log message (see field stack_trace)
            .log("An error occurred");
}

As cargas de trabalho de funções lidam com registros de várias linhas, mas cada caractere de nova linha resulta em uma entrada de registro separada. Ao registrar traços de pilha com estruturas de registro estruturado, talvez seja necessário escapar manualmente dos caracteres de nova linha para garantir que eles sejam renderizados corretamente como uma única entrada de registro.

Campos de registro

Code Engine campos de registro.
Nome do campo Descrição Valor de exemplo
app O serviço IBM Cloud que emitiu a linha de registro da plataforma. Para Code Engine, isso sempre será codeengine. codeengine
tag Campo definido pelo fluentbit e derivado da ID de entrada definida na configuração do fluentbit. platform.<id>.codeengine
stream O fluxo de saída que recebeu o registro de log. Valores possíveis: stdout ou stderr
originator Indica se um componente do sistema Code Engine ou uma carga de trabalho do usuário emitiu a linha de registro. system ou user
resourceGroupId CRN do grupo de recursos para o projeto Code Engine. <resource group CRN>
messageKey Identificador opcional exclusivo e legível por humanos para filtragem de registros e solução de problemas. Cadeia de caracteres definida pelo usuário
codeengine.region Região do projeto Code Engine. us-south
codeengine.project Nome do projeto Code Engine. Cadeia de caracteres definida pelo usuário
codeengine.projectGuid GUID do projeto Code Engine. <project GUID>
codeengine.projectSubdomain Namespace do projeto Code Engine. edf5a781
codeengine.componentType Tipo de componente que emitiu a linha de registro. Valores possíveis: app, job, job_run, fleet, function, build, build_run, container
codeengine.component Nome do componente que emitiu a linha de registro. Cadeia de caracteres definida pelo usuário
codeengine.subcomponentType Tipo de subcomponente que emitiu a linha de registro. Valores possíveis: app_revision, job_run, fleet_instance, function, build_run, container
codeengine.subcomponent Nome do subcomponente que emitiu a linha de registro. Cadeia de caracteres definida pelo usuário
codeengine.instanceId Nome do pod (para aplicativos, trabalhos e compilações) ou ID da instância do contêiner (para funções e frotas). my-app-0001-pod-abcde
label.Namespace Descontinuado. O nome do subdomínio do projeto Code Engine. Em vez disso, use codeengine.projectSubdomain. Esse campo será removido após 15 de junho de 2026. edf5a781
label.Project Descontinuado. O nome do projeto Code Engine. Em vez disso, use codeengine.project. Esse campo será removido após 15 de junho de 2026. Cadeia de caracteres definida pelo usuário
label.Stream Descontinuado. O fluxo de saída que recebeu o registro de log. Em vez disso, use stream. Esse campo será removido após 15 de junho de 2026. Valores possíveis: stdout ou stderr
level Opcional. Define a gravidade da mensagem de registro. Esse valor só é definido se o nível de registro puder ser extraído de uma mensagem de registro não estruturada. Os valores não diferenciam maiúsculas de minúsculas. Valores possíveis: fatal, error, warn, info, debug, trace
logtag Descontinuado. Opcional. Indica se a linha de registro recebida é uma linha de registro parcial ou total. Esse campo não é definido para cargas de trabalho de função. Esse campo será removido após 15 de junho de 2026, sem substituição. Valores possíveis: F ou P
message.message A mensagem de registro legível por humanos. String definida pelo componente do sistema ou pelo usuário
message.logSourceCRN O CRN do projeto Code Engine. <code engine project CRN>
message.saveServiceCopy Descontinuado. Define se a linha de registro da plataforma também deve ser copiada para os registros do sistema do IBM Cloud® Code Engine. Esse campo será removido após 15 de junho de 2026, sem substituição. false
message.serviceName Descontinuado. O nome do serviço IBM Cloud que emitiu essa linha de registro. Em vez disso, use app. Esse campo será removido após 15 de junho de 2026. codeengine
message._app Descontinuado. O nome da instância (para aplicativos, trabalhos e compilações) ou o nome do componente (para funções). Em vez disso, use codeengine.instanceId, codeengine.component, ou ambos. Esse campo será removido após 15 de junho de 2026. my-app-0001-pod-abcde
message.* Opcional. Meta-informações úteis para o usuário criar painéis ou alertas. durationSeconds

Visualizando logs por meio do console

Quando você trabalha com aplicativos, trabalhos, funções ou compilações do Code Engine no console com o registro ativado, os registros são encaminhados para um serviço IBM Cloud Logs onde são indexados, permitindo a pesquisa de texto completo em todas as mensagens geradas e a consulta conveniente com base em campos específicos.

A instância IBM Cloud Logs que recebe os logs da plataforma não precisa estar na mesma região que o projeto Code Engine, e não é necessário criar essa instância antes de trabalhar com o componente Code Engine. É possível adicionar recursos de registro a qualquer momento a partir do aplicativo Code Engine, trabalho, função ou página de compilação no console.

Para gerar logs para qualquer serviço da plataforma, basta ativar o registro uma vez por região, por conta.

Considerações sobre a visualização de logs no console

Quando quiser usar o registro em log do console, primeiro configure os logs da plataforma IBM Cloud Logs para receber os dados de registro do Code Engine com o IBM Cloud Logs Routing. Para verificar se há instâncias ativas do IBM Cloud Logs, consulte o painel do Observability.

Analise as informações do plano de serviço IBM Cloud Logs ao considerar as necessidades de retenção, pesquisa e análise de registros.

Quando você visualiza dados de registro para aplicativos Code Engine, execuções do seu trabalho ou execuções da sua compilação, podem ocorrer atrasos antes que os dados estejam disponíveis em IBM Cloud Logs. Por exemplo, pode levar cerca de 5 a 10 minutos para que os dados de registro sejam exibidos em IBM Cloud Logs, especialmente se você estiver usando o pipeline de dados Store and search.

Consulte a documentação sobre Data Pipelines para saber mais sobre as opções para equilibrar a latência e o custo do registro para suas instâncias do IBM Cloud Logs.

Ao usar o registro em log com a CLI, não é necessário configurar os registros da plataforma IBM Cloud Logs, pois o registro em log da CLI Code Engine obtém os dados de forma diferente.

Os recursos de registro oferecidos pela CLI são limitados e devem ser considerados apenas para fins de desenvolvimento. Ao executar cargas de trabalho de produção, use sempre uma instância do IBM Cloud Logs, que oferece recursos de retenção, filtro e pesquisa de logs.

Posso aplicar filtros nos dados do site IBM Cloud Logs?

Você pode modificar e definir o escopo do filtro para exibir dados de log em um nível específico ou em um nível mais granular para uma revisão específica do aplicativo, execução de trabalho ou execução de compilação na página IBM Cloud Logs, com base em suas necessidades.

  • Se app:"codeengine" estiver definido, somente os registros de Code Engine serão exibidos.

  • Se codeengine.project:'<project_name>' for definido, somente os registros de um projeto específico serão exibidos.

  • Se codeengine.component:'<your_component_name>' for definido, somente os registros do componente especificado (aplicativo, trabalho ou compilação) serão exibidos. Se os componentes do site Code Engine tiverem o mesmo nome, o filtro incluirá os logs desses componentes. Por exemplo,

    • O filtro app:"codeengine" AND codeengine.component:"myapp" limita os logs ao nível do aplicativo myapp.
    • O filtro app:"codeengine" AND codeengine.subcomponent:"myapp\-00002" limita os logs ao nível de revisão do aplicativo myapp-0002.
    • O filtro app:"codeengine" AND codeengine.component:"myjob" restringe os logs ao nível específico do trabalho myjob.
    • O filtro app:"codeengine" AND codeengine.subcomponent:"myjob\-jobrun\-t6m7l" restringe os logs ao nível de execução do trabalho myjob-jobrun-t6m7l específico.
    • O filtro app:"codeengine" AND codeengine.component:"mybuild" restringe os logs ao nível de compilação específico do mybuild.
    • O filtro app:"codeengine" AND codeengine.subcomponent:"mybuild\-run\-121212" restringe os logs ao nível de execução de compilação mybuild-run-121212 específico.

Para obter mais informações sobre como configurar e iniciar o registro em log no console, consulte Visualização de logs de aplicativos, trabalhos ou funções no console.

Visualização de logs de aplicativos, trabalhos ou funções no console

É possível visualizar os registros de aplicativos, trabalhos ou funções. As etapas para visualizar qualquer um desses itens no console são muito semelhantes.

Depois de selecionar o projeto com o qual deseja trabalhar, você pode adicionar recursos de registro na página Code Engine Overview (Visão geral) ou em uma de suas páginas secundárias, como a página Applications (Aplicativos ), Jobs (Trabalhos ) ou Functions (Funções ), ou na página específica do seu aplicativo, trabalho ou função. As etapas a seguir pressupõem que você esteja trabalhando em uma página específica do site Code Engine.

  1. Vá para um aplicativo, trabalho ou função que você criou e implantou. Na página Projects (Projetos) do console Code Engine, selecione o projeto e, em seguida, selecione Applications (Aplicativos ), Jobs (Trabalhos ) ou Functions (Funções ), conforme apropriado. Selecione o aplicativo, o trabalho ou a função com a qual você deseja trabalhar.
  2. Se você tiver criado anteriormente uma instância do IBM Cloud Logs, clique em Logging (Registro ) para abrir o serviço IBM Cloud Logs.
  3. Para adicionar e configurar recursos de registro, conclua as etapas a seguir:
    1. No menu de opções Test application (Aplicativo de teste ), Submit job (Enviar trabalho ) ou Test function (Testar função ), clique em Add logging (Adicionar registro) para criar a instância IBM Cloud Logs. Esta ação abre o serviço IBM Cloud Logs.
    2. No serviço IBM Cloud Logs, crie sua instância de criação de log. Para confirmar que sua instância de criação de log foi criada, verifique o Painel de visibilidade.
    3. Na página do aplicativo, trabalho ou função Code Engine, clique em Add logging (Adicionar registro) no menu de opções Test application (Aplicativo de teste ), Submit job (Enviar trabalho ) ou Test function (Função de teste ). Dessa vez, selecione uma instância do IBM Cloud Logs para receber os registros da plataforma. Escolha a instância de registro que você criou na etapa anterior. Clique em Select (Selecionar ). O site Code Engine exige que os registros da plataforma estejam ativados para receber os dados de registro do site Code Engine. Ao concluir essa ação, o site Code Engine ativa o registro em log da plataforma para você.
  4. Agora que os logs da plataforma estão configurados, na página do aplicativo, trabalho ou função Code Engine, clique em Logging no menu de opções Test application (Aplicativo de teste ), Submit job (Enviar trabalho ) ou Test function (Função de teste ) para abrir a janela de logs da plataforma. Para confirmar se os logs de plataforma estão configurados para sua região, verifique o Painel de visibilidade.
  5. (opcional) Refine o filtro para sua pesquisa, se necessário.
  6. Verifique sua configuração executando uma das etapas a seguir:
    • Para um aplicativo ou uma função, teste-o: clique em Testar aplicativo ou Testar função, conforme apropriado, e clique em Enviar solicitação. Para abrir o aplicativo ou a função em uma página da Web, clique em Application URL ou Function URL. É possível visualizar os logs da plataforma do teste na janela de logs da plataforma.
    • Para um trabalho, execute-o: na área de execução do trabalho, clique em Submit job (Enviar trabalho ) para executar o trabalho. Forneça os valores de configuração de execução da tarefa ou use os valores padrão. Clique em Enviar tarefa para executá-la. É possível visualizar os logs da plataforma a partir da execução do trabalho na janela de logs da plataforma.

Sua instância IBM Cloud Logs agora está configurada para receber o registro de plataforma do seu aplicativo, trabalho ou função Code Engine.

Como alternativa, você pode configurar uma instância do IBM Cloud Logs usando o painel do Observability para criar a instância e, em seguida, configurando o roteamento de logs da plataforma.

Visualizando logs de construção a partir do console

É possível exibir logs para instâncias específicas de execução de construção a partir do console.

  1. Acesse o painel da Code Engine.
  2. Selecione um projeto ou crie um.
  3. Na página de projeto, clique em Construções de imagem.
  4. Na guia Image build (Construção de imagem ), clique no nome de sua construção de imagem para abrir a página de construção de uma construção definida ou crie uma construção.
  5. A partir da página de construção para sua construção definida, clique no nome da instância de sua execução de construção na seção Execuções de construção. Poderá ser necessário clicar em Enviar construção para criar uma execução de construção. É possível visualizar os logs da plataforma a partir da execução da compilação na janela de logs da plataforma. Como alternativa, também é possível visualizar as informações do registro de compilação para os detalhes da etapa de compilação na página da instância de execução de compilação. Expanda as etapas de compilação para obter dados de registro específicos da etapa de compilação. Opcionalmente, você pode refinar o filtro para sua pesquisa, se necessário.

Visualizando logs com a CLI

Para visualizar a saída de registro com a CLI, você deve ter uma instância em execução do seu aplicativo ou trabalho. Se um aplicativo for dimensionado para zero ou se uma instância de execução de trabalho for concluída, a saída para os atributos ibmcloud ce app logs e ibmcloud ce jobrun logs não terá dados de registro. Como alternativa, você pode usar o serviço IBM Cloud Logs para visualizar os dados de registro.

Visualizando logs do aplicativo com a CLI

Para visualizar os logs do app para um app específico com a CLI, use o comando application logs. É possível exibir logs de todas as instâncias de um app ou de uma instância específica de um app. O comando app get exibe detalhes sobre o seu app, incluindo as instâncias em execução do app.

  • Para exibir os logs de todas as instâncias do aplicativo myapp, especifique o nome do aplicativo com a opção --app. Por exemplo:

    ibmcloud ce app logs --app myapp
    

    Exemplo de saída

    Getting logs for all instances of application 'myapp'...
    OK
    
    myapp-ii18y-2-deployment-7657c5f4f9-dgk5f:
    Server running at http://0.0.0.0:8080/
    
  • Para exibir os logs de uma instância específica do aplicativo, especifique o nome da instância específica do aplicativo com a opção --instance. Por exemplo:

    ibmcloud ce app logs --instance myapp-ii18y-2-deployment-7657c5f4f9-dgk5f
    

    Exemplo de saída

    Getting logs for application instance 'myapp-a5yp2-2-deployment-65766594d4-hj6c5'...
    OK
    
    myapp-a5yp2-2-deployment-65766594d4-hj6c5:
    Server running at http://0.0.0.0:8080/
    

Visualizando logs da tarefa com a CLI

Para visualizar logs para uma execução da tarefa específica com a CLI, use o comando jobrun logs. É possível exibir logs de todas as instâncias de uma execução de tarefa ou exibir logs de uma instância específica de uma execução de tarefa. O comando jobrun get exibe detalhes sobre a sua execução da tarefa, incluindo as instâncias da execução da tarefa.

  • Para exibir os registros de todas as instâncias da execução do trabalho testjobrun, especifique o nome da execução do trabalho com a opção --jobrun. Por exemplo:

    ibmcloud ce jobrun logs --jobrun testjobrun
    

    Exemplo de saída

    Getting jobrun 'testjobrun'...
    Getting instances of jobrun 'testjobrun'...
    Getting logs for all instances of job run 'testjobrun'...
    OK
    
    testjobrun-1-0:
    Hello World!
    
    testjobrun-2-0:
    Hello World!
    
    testjobrun-3-0:
    Hello World!
    
    testjobrun-4-0:
    Hello World!
    
    testjobrun-5-0:
    Hello World!
    
  • Para visualizar os registros da instância de execução do trabalho testjobrun-1-0, especifique o nome de uma instância específica da execução do trabalho com a opção --instance. Por exemplo:

    ibmcloud ce jobrun logs --instance testjobrun-1-0
    

    Exemplo de saída

    Getting logs for job run instance 'testjobrun-1-0'...
    OK
    
    testjobrun-1-0:
    Hello World!
    

Visualizando logs de construção com a CLI

Para visualizar logs de compilação para uma execução de compilação específica com a CLI, use o comando buildrun logs. É possível exibir logs de todas as instâncias de uma execução de compilação com base no nome da execução de compilação.

Para visualizar os registros de todas as instâncias da execução de compilação mybuildrun, especifique o nome da execução de compilação com a opção --name. Por exemplo:

ibmcloud ce buildrun logs --name mybuildrun

Exemplo de saída

Getting build run 'mybuildrun'...
Getting instances of build run 'mybuildrun'...
Getting logs for build run 'mybuildrun'...
OK

mybuildrun-zg5rj-pod-z5gzb/step-git-source-source-r9fcf:
{"level":"info","ts":1614363665.8331757,"caller":"git/git.go:169","msg":"Successfully cloned https://github.com/IBM/CodeEngine @ 8b514ce871e50d67cfea3e344b90cade4bd26e90 (grafted, HEAD, origin/main) in path /workspace/source"}
{"level":"info","ts":1614363666.82988,"caller":"git/git.go:207","msg":"Successfully initialized and updated submodules in path /workspace/source"}

mybuildrun-zg5rj-pod-z5gzb/step-build-and-push:
INFO[0002] Retrieving image manifest node:12-alpine
INFO[0002] Retrieving image node:12-alpine
INFO[0003] Retrieving image manifest node:12-alpine
INFO[0003] Retrieving image node:12-alpine
INFO[0003] Built cross stage deps: map[]
INFO[0003] Retrieving image manifest node:12-alpine
INFO[0003] Retrieving image node:12-alpine
INFO[0004] Retrieving image manifest node:12-alpine
INFO[0004] Retrieving image node:12-alpine
INFO[0004] Executing 0 build triggers
INFO[0004] Unpacking rootfs as cmd RUN npm install requires it.
INFO[0008] RUN npm install
INFO[0008] Taking snapshot of full filesystem...
INFO[0010] cmd: /bin/sh
INFO[0010] args: [-c npm install]
INFO[0010] Running: [/bin/sh -c npm install]
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#2 No description
npm WARN !invalid#2 No repository field.
npm WARN !invalid#2 No README data
npm WARN !invalid#2 No license field.

up to date in 0.267s
found 0 vulnerabilities

INFO[0011] Taking snapshot of full filesystem...
INFO[0011] COPY server.js .
INFO[0011] Taking snapshot of files...
INFO[0011] EXPOSE 8080
INFO[0011] cmd: EXPOSE
INFO[0011] Adding exposed port: 8080/tcp
INFO[0011] CMD [ "node", "server.js" ]

mybuildrun-zg5rj-pod-z5gzb/step-image-digest-exporter-ngl6j:
2021/02/26 18:21:02 warning: unsuccessful cred copy: ".docker" from "/tekton/creds" to "/tekton/home": unable to open destination: open /tekton/home/.docker/config.json: permission denied
{"severity":"INFO","timestamp":"2021-02-26T18:21:26.372494581Z","caller":"logging/config.go:116","message":"Successfully created the logger."}
{"severity":"INFO","timestamp":"2021-02-26T18:21:26.372621756Z","caller":"logging/config.go:117","message":"Logging level set to: info"}