Escritura y visualización de registros de aplicaciones, trabajos y funciones
El registro puede ayudarle a resolver problemas en IBM Cloud® Code Engine. Puede ver los registros mediante la consola o mediante la CLI.
¿Le interesa el registro de flotas? Véase Establecer la observabilidad de las flotas y Visualización de registros y datos de seguimiento de flotas.
Registros de escritura
Aprenda a escribir registros de forma eficaz en IBM Cloud® Code Engine, incluidas las mejores prácticas para formatos de registro, niveles de gravedad, marcas de tiempo y gestión de entradas de varias líneas para registros estructurados y no estructurados.
Consideraciones para la redacción de registros
Escritura de registros en salida estándar y error
En Code Engine, los registros de logs emitidos por su carga de trabajo se recopilan sólo cuando se escriben en stdout o stderr, siguiendo las directrices de la App de Doce Factores que recomiendan tratar los logs
como flujos de eventos en lugar de gestionar archivos de logs. Véase Creación de aplicaciones nativas de la nube: aplicaciones de 12 factores - Factor 11 - Registros.
El canal de registro de la plataforma captura y procesa automáticamente este resultado, poniéndolo a disposición para el análisis y la resolución de problemas. Las líneas de registro escritas en archivos del sistema de archivos efímero del contenedor no se ingieren, persisten ni se exponen a través de la interfaz de registro. Como resultado, cualquier registro almacenado en el sistema de archivos efímero se pierde cuando la instancia se reinicia o finaliza y no está disponible para la depuración operativa o el análisis de la causa raíz.
¿Debo añadir marcas de tiempo a mis líneas de registro?
Los registros de logs generados por las cargas de trabajo de los usuarios deben evitar incrustar su propia información de marca de tiempo porque la infraestructura Code Engine captura y estandariza automáticamente las marcas de tiempo. Incluir marcas de tiempo a nivel de aplicación puede crear incoherencias entre los servicios, especialmente cuando las cargas de trabajo se ejecutan en entornos distribuidos o en contenedores en los que los relojes del sistema pueden variar o diferir. Confiar en las marcas de tiempo de la plataforma garantiza formatos de tiempo uniformes, secuenciación precisa y correlación fiable con otros registros generados por el sistema, lo que simplifica la solución de problemas, la auditoría y la observabilidad en toda la implantación.
¿Cómo se corresponden mis niveles de registro con la gravedad de IBM Cloud Logs?
El nivel de registro proporcionado en cada registro se asigna a las severidades de IBM Cloud Logs como se describe en Asignación de severidades de registro a severidades de IBM Cloud Logs. En las siguientes secciones, aprenderá más sobre cómo se analizan los niveles de registro para registros estructurados y no estructurados y qué valores de nivel de registro son compatibles.
¿Qué pasa si mis datos de registro son multilínea?
Para aprovechar las funciones de búsqueda y formato de IBM Cloud Logs, cambie el formato de su registro de la siguiente manera.
- Si sus líneas de registro abarcan varias líneas, cambie el formato y la salida de sus registros para que estén en una sola línea. Utilice el formato JSONL (véase Formatos de registro ) para sus registros con IBM Cloud Logs.
- Sus troncos deben ajustarse a los límites de IBM Cloud Logs.
formatos de registro
Los datos de registro pueden emitirse en dos formatos comunes: no estructurados y estructurados.
- Los registros desestructurados son textos de formato libre, sencillos de producir y legibles para el ser humano, pero difíciles de analizar de forma coherente para los sistemas backend. Esto limita la fiabilidad del filtrado y la correlación.
- Los registros estructurados codifican los campos en un esquema predecible (por ejemplo, JSON), lo que permite que las canalizaciones de registros indexen y consulten atributos como ID de solicitud, ID de usuario o metadatos específicos del dominio. Code Engine admite JSON para registros estructurados, lo que ayuda a garantizar que sus campos personalizados sigan siendo legibles por máquina y fácilmente filtrables a través de herramientas de observabilidad.
Si tiene previsto enriquecer las líneas de registro con información personalizada y filtrable, utilice el registro estructurado.
Registros no estructurados
Ejemplos
A continuación se muestran ejemplos sencillos que escriben una línea de registro no estructurada (texto de forma libre) en la salida estándar.
Los ejemplos están publicados en el repositorio público de muestras Code Engine en 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");
}
}
Detección del nivel de registro
Cada registro se analiza en busca de palabras clave para determinar la gravedad. Los valores de gravedad, que se evalúan caso por caso, son critical, error, warn, info, debug,
y verbose.
Si una línea de registro comienza con una palabra clave de gravedad en el formato LEVEL MESSAGE, Code Engine elimina el nivel detectado del mensaje de registro mostrado para que los usuarios puedan centrarse en el contenido
principal sin dejar de filtrar con precisión por gravedad en la vista IBM Cloud Logs. En este caso, el valor de gravedad extraído se almacena en el campo de registro level. Se admiten los siguientes niveles de gravedad sin
distinción entre mayúsculas y minúsculas: fatal, error, warn, info, debug, y trace. Por ejemplo, en Node.js podría escribir:
// Unstructured log with level prefix
console.log('ERROR Payment service timeout while creating invoice');
En IBM Cloud Logs, esta entrada aparece con la gravedad Error y el texto del mensaje "Tiempo de espera del servicio de pago al crear la factura "; a continuación, puede filtrar por Gravedad = Error para limitar los resultados. También puede utilizar reglas de análisis sintáctico y de gravedad para adaptar la extracción y la correspondencia de niveles a su entorno.
La detección del nivel de registro también funciona cuando las líneas de registro siguen formatos ligeramente diferentes, como LEVEL: MESSAGE o [LEVEL] MESSAGE. Sin embargo, en estos casos la palabra clave level
no se elimina del mensaje de registro, aunque la gravedad siga estando correctamente clasificada.
Además, la lógica de detección puede inferir un nivel de gravedad cuando cualquier palabra clave admitida aparece en cualquier parte del mensaje, no sólo al principio. Por ejemplo, la línea de registro:
The payment workflow encountered an unexpected error during validation
Esta línea de registro se clasifica como Error porque la palabra error aparece en el texto del mensaje.
La detección del nivel de registro no tiene en cuenta el flujo de entrada (stdout o stderr) para la detección del nivel de registro. Por lo tanto, los mensajes de registro escritos en el error estándar (stderr)
se evalúan únicamente en función del texto del mensaje. Por ejemplo, console.error("Some message") se clasifica como Info, aunque se escribe en stderr.
Para las cargas de trabajo de función, el nivel de registro no se elimina del mensaje de registro mostrado, incluso cuando se detecta al principio de la línea de registro en el formato LEVEL MESSAGE.
Análisis y evaluación de marcas de tiempo
No se recomienda añadir marcas de tiempo a las líneas de registro de la aplicación porque Code Engine asigna automáticamente una marca de tiempo normalizada cuando se ingieren los registros. Si se incluye una marca de tiempo al principio de una línea de registro, el sistema intenta analizarla. Si coincide con uno de los formatos admitidos, la marca de tiempo se elimina del mensaje de registro mostrado, de forma similar a cómo se gestionan los niveles de registro. Los formatos de fecha y hora admitidos son:
2026-02-08T20:30:45.1232026-02-08T20:30:45.123Z2026-02-08T21:03:45.123456Z2026-02-08T21:03:45.123456789Z2026-02-08 21:03:45.123Z2026-02-08 20:30:45.123
Cuando una línea de registro contiene tanto una marca de tiempo como un nivel de registro al principio (por ejemplo, TIMESTAMP LEVEL MESSAGE), el canal evalúa ambos campos. Si ambos coinciden con los patrones
admitidos, cada uno de ellos se clasifica adecuadamente y se elimina del mensaje de registro renderizado, dejando sólo el cuerpo del mensaje para facilitar su lectura y filtrado. Por ejemplo, los siguientes formatos se
analizan correctamente:
2026-02-08T21:03:45.123456789Z ERROR Payment service timeout2026-02-08 20:30:45.123 INFO Starting billing workflow
En los casos en que aparece una marca de tiempo pero no coincide con los formatos admitidos, sigue formando parte de la línea de registro y se trata como texto normal, pero el resto del mensaje se sigue procesando con normalidad.
Para las cargas de trabajo de funciones, las marcas de tiempo no se analizan, evalúan ni eliminan de los mensajes de registro. Cualquier marca de tiempo incluida en los registros de funciones sigue formando parte del mensaje mostrado.
Asistencia multilínea
Code Engine admite entradas de registro de varias líneas. Sin embargo, cuando emita registros, debe asegurarse de que los caracteres de nueva línea (\n) estén codificados correctamente (\\n) para
que el canal de registro pueda procesar y renderizar correctamente los mensajes multilínea. Por ejemplo, en Node.js, puede producir una entrada de registro de varias líneas como ésta:
console.log("Starting billing workflow...\\nStep 1: Validating input...\\nStep 2: Processing payment...");
Registro de errores
Si su carga de trabajo emite trazas de pila de error de varias líneas, utilice el formato de registro JSON estructurado en lugar de la salida de consola no estructurada. Los registros estructurados conservan los campos multilínea de forma fiable y garantizan que las trazas de pila se agrupen en un único registro de registro, lo que se trata en la sección Registros estructurados.
Por ejemplo, el siguiente mensaje de registro se clasifica como Error porque la palabra clave "error" aparece en el mensaje de registro. Sin embargo, el seguimiento de pila que proporciona el objeto
err se muestra en varias líneas de registro.
try {
throw new Error("boom!");
} catch (err) {
console.error("An error occurred", err);
}
Registros estructurados
Ejemplos
Los siguientes son ejemplos mínimos de registro estructurado para cada lenguaje y tiempo de ejecución que emiten un único JSON con el nivel de registro en el campo level y el mensaje de registro en el campo message.
Los ejemplos están publicados en el repositorio público de muestras Code Engine en 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 y Logback con 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");
}
}
Detección del nivel de registro
Cada registro se analiza en busca de palabras clave para determinar la gravedad. Los valores de gravedad, que se evalúan caso por caso, son critical, error, warn, info, debug,
y verbose.
Cuando se utilizan registros estructurados, Code Engine detecta automáticamente el nivel de registro cuando se proporciona en uno de los siguientes campos: level, severity, o logLevel. El valor de estos
campos no distingue entre mayúsculas y minúsculas, lo que significa que entradas como error, ERROR o Error corresponden a la misma gravedad. Se admiten los siguientes niveles de gravedad sin distinción
entre mayúsculas y minúsculas: critical, error, warn, info, debug, y verbose. Cuando un campo compatible está presente y contiene uno de estos valores, se extrae
el nivel de registro, se normaliza y se utiliza para el filtrado y la categorización dentro de la interfaz de usuario de registros. Por ejemplo, las siguientes líneas de registro estructuradas se interpretan correctamente con el nivel
Error:
{ "level": "error", "message": "Payment service timeout" }
{ "severity": "ERROR", "message": "Failed to connect to database" }
{ "logLevel": "eRrOr", "message": "Workflow aborted" }
Independientemente de la capitalización o del valor de campo específico utilizado, la plataforma identifica correctamente el nivel de registro y lo aplica para filtrar, agrupar y analizar sus datos de registro estructurados.
Evaluación del sello de tiempo
En el caso de los registros estructurados, las marcas de tiempo personalizadas no se analizan ni evalúan. Cualquier campo de marca de tiempo que proporcione se trata puramente como datos de carga útil, mientras que la plataforma siempre aplica su propia marca de tiempo de ingestión para ordenar y filtrar.
En el siguiente ejemplo, el valor "timestamp" se conserva pero se ignora para la temporización del registro.
{ "level": "INFO", "message": "Processing started", "timestamp": "2026-02-08T20:30:45.123Z" }
Añadir información contextual adicional
Puede enriquecer los registros estructurados con campos personalizados (por ejemplo, requestId, userId, o metadatos específicos del dominio). A continuación se presentan ejemplos mínimos para cada pila utilizada
anteriormente.
Mantenga los campos personalizados concisos y estables (por ejemplo, IDs, códigos o pequeños enums) para maximizar la filtrabilidad y minimizar la cardinalidad en su instancia 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 y Logback con logstash-logback-encoder )
logger.atDebug().addKeyValue("extra_key", "extra_value")
.log("A structured log entry that contains an extra key");
Registro de errores
Para capturar tanto el mensaje de error como su seguimiento de pila en registros estructurados, emita un registro JSON que incluya sus campos estándar (level, message) más un campo
stack (o 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 y Logback con 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");
}
Las cargas de trabajo funcionales manejan registros multilínea, pero cada carácter de nueva línea da lugar a una entrada de registro independiente. Cuando se registran trazas de pila con marcos de registro estructurados, es posible que tenga que escapar manualmente caracteres de nueva línea para asegurarse de que se representan correctamente como una sola entrada de registro.
Campos de registro
| Nombre de campo | Descripción | Valor de ejemplo |
|---|---|---|
app |
El servicio IBM Cloud que emitió la línea de registro de la plataforma. Para Code Engine, siempre será codeengine. |
codeengine |
tag |
Campo establecido por fluentbit y derivado del ID de entrada establecido en la configuración de fluentbit. | platform.<id>.codeengine |
stream |
El flujo de salida que recibió el registro. | Valores posibles: stdout o stderr |
originator |
Indica si un componente del sistema Code Engine o una carga de trabajo de usuario emitió la línea de registro. | system o user |
resourceGroupId |
Grupo de recursos CRN para el proyecto Code Engine. | <resource group CRN> |
messageKey |
Identificador único opcional legible por humanos para filtrar registros y solucionar problemas. | Cadena definida por el usuario |
codeengine.region |
Región del proyecto Code Engine. | us-south |
codeengine.project |
Nombre del proyecto Code Engine. | Cadena definida por el usuario |
codeengine.projectGuid |
GUID del proyecto Code Engine. | <project GUID> |
codeengine.projectSubdomain |
Espacio de nombres del proyecto Code Engine. | edf5a781 |
codeengine.componentType |
Tipo de componente que emitió la línea de registro. | Valores posibles: app, job, job_run, fleet, function, build, build_run, container |
codeengine.component |
Nombre del componente que emitió la línea de registro. | Cadena definida por el usuario |
codeengine.subcomponentType |
Tipo de subcomponente que emitió la línea de registro. | Valores posibles: app_revision, job_run, fleet_instance, function, build_run, container |
codeengine.subcomponent |
Nombre del subcomponente que emitió la línea de registro. | Cadena definida por el usuario |
codeengine.instanceId |
Nombre del pod (para aplicaciones, trabajos y compilaciones) o ID de instancia de contenedor (para funciones y flotas). | my-app-0001-pod-abcde |
label.Namespace |
En desuso. El nombre del subdominio del proyecto Code Engine. Utilice codeengine.projectSubdomain en su lugar. Este campo se eliminará después del 15 de junio de 2026. |
edf5a781 |
label.Project |
En desuso. El nombre del proyecto Code Engine. Utilice codeengine.project en su lugar. Este campo se eliminará después del 15 de junio de 2026. |
Cadena definida por el usuario |
label.Stream |
En desuso. El flujo de salida que recibió el registro. Utilice stream en su lugar. Este campo se eliminará después del 15 de junio de 2026. |
Valores posibles: stdout o stderr |
level |
Opcional. Define la gravedad del mensaje de registro. Este valor sólo se establece si el nivel de registro puede extraerse de un mensaje de registro no estructurado. Los valores no distinguen entre mayúsculas y minúsculas. | Valores posibles: fatal, error, warn, info, debug, trace |
logtag |
En desuso. Opcional. Indica si la línea de registro recibida es parcial o completa. Este campo no está configurado para cargas de trabajo de función. Este campo se eliminará a partir del 15 de junio de 2026 sin que pueda sustituirse. | Valores posibles: F o P |
message.message |
El mensaje de registro legible por humanos. | Cadena definida por el componente del sistema o el usuario |
message.logSourceCRN |
El CRN del proyecto Code Engine. | <code engine project CRN> |
message.saveServiceCopy |
En desuso. Define si la línea de registro de la plataforma debe copiarse también en los registros del sistema de IBM Cloud® Code Engine. Este campo se eliminará a partir del 15 de junio de 2026 sin que pueda sustituirse. | false |
message.serviceName |
En desuso. El nombre del servicio IBM Cloud que emitió esa línea de registro. Utilice app en su lugar. Este campo se eliminará después del 15 de junio de 2026. |
codeengine |
message._app |
En desuso. El nombre de la instancia (para aplicaciones, trabajos y compilaciones) o el nombre del componente (para funciones). Utilice codeengine.instanceId, codeengine.component, o ambos en
su lugar. Este campo se eliminará después del 15 de junio de 2026. |
my-app-0001-pod-abcde |
message.* |
Opcional. Metainformación útil para que el usuario cree cuadros de mando o alertas. | durationSeconds |
Visualización de registros desde la consola
Cuando se trabaja con aplicaciones, trabajos, funciones o compilaciones de Code Engine en la consola con el registro activado, los registros se reenvían a un servicio de IBM Cloud Logs donde se indexan, lo que permite realizar búsquedas de texto completo en todos los mensajes generados y realizar cómodas consultas basadas en campos específicos.
La instancia IBM Cloud Logs que recibe los registros de la plataforma no tiene por qué estar en la misma región que su proyecto Code Engine, y no es necesario que cree esta instancia antes de trabajar con su componente Code Engine. Puede añadir funciones de registro en cualquier momento desde su aplicación, trabajo, función o página de creación de Code Engine en la consola.
Para generar registros para cualquier servicio de la plataforma, sólo tiene que activar el registro una vez por región, por cuenta.
Consideraciones para ver los registros desde la consola
Si desea utilizar el registro desde la consola, primero debe configurar los registros de la plataforma IBM Cloud Logs para recibir los datos de registro de Code Engine con IBM Cloud Logs Routing. Para comprobar si hay instancias activas en IBM Cloud Logs, consulte el panel de control de Observabilidad.
Revise la información del plan de servicio IBM Cloud Logs al considerar las necesidades de retención, búsqueda y análisis de registros.
Al consultar los datos de registro de las aplicaciones de Code Engine, las ejecuciones de su trabajo o las ejecuciones de su compilación, pueden producirse retrasos antes de que los datos estén disponibles en IBM Cloud Logs. Por ejemplo, los
datos de registro pueden tardar entre 5 y 10 minutos en aparecer en IBM Cloud Logs, especialmente si utiliza el canal de datos Store and search.
Revise la documentación sobre Data Pipelines para conocer las opciones para equilibrar la latencia y el coste de los registros para sus instancias de IBM Cloud Logs.
Cuando se utiliza el registro con la CLI, no es necesario configurar los registros de la plataforma IBM Cloud Logs, ya que el registro de la CLI Code Engine obtiene sus datos de forma diferente.
Las capacidades de registro ofrecidas a través de la CLI son limitadas y deben considerarse sólo para fines de desarrollo. Cuando ejecute cargas de trabajo de producción, utilice siempre una instancia de IBM Cloud Logs, que ofrece funciones de retención, filtrado y búsqueda de registros.
¿Puedo aplicar filtros a los datos de IBM Cloud Logs?
Puede modificar y ampliar el filtro para mostrar los datos de registro a un nivel específico o a un nivel más granular para una revisión de aplicación específica, una ejecución de trabajo o una ejecución de compilación desde la página IBM Cloud Logs, en función de sus necesidades.
-
Si se define
app:"codeengine", sólo se mostrarán los registros de Code Engine. -
Si se define
codeengine.project:'<project_name>', sólo se mostrarán los registros de un proyecto específico. -
Si se define
codeengine.component:'<your_component_name>', sólo se mostrarán los registros del componente especificado (aplicación, trabajo o compilación). Si sus componentes de Code Engine comparten el mismo nombre, el filtro incluye los registros de estos componentes. Por ejemplo:- El filtro
app:"codeengine" AND codeengine.component:"myapp"limita los registros al nivel de aplicaciónmyapp. - El filtro
app:"codeengine" AND codeengine.subcomponent:"myapp\-00002"limita los registros al nivel de revisión de la aplicaciónmyapp-0002. - El filtro
app:"codeengine" AND codeengine.component:"myjob"limita los registros al nivel de trabajo específico demyjob. - El filtro
app:"codeengine" AND codeengine.subcomponent:"myjob\-jobrun\-t6m7l"limita los registros al nivel específico de ejecución del trabajomyjob-jobrun-t6m7l. - El filtro
app:"codeengine" AND codeengine.component:"mybuild"limita los registros al nivel de compilación específico demybuild. - El filtro
app:"codeengine" AND codeengine.subcomponent:"mybuild\-run\-121212"limita los registros al nivel de ejecución específico de la compilaciónmybuild-run-121212.
- El filtro
Para obtener más información sobre la configuración y el inicio del registro en la consola, consulte Visualización de registros de aplicaciones, trabajos o funciones desde la consola.
Visualización de registros de aplicaciones, trabajos o funciones desde la consola
Puedes ver los registros de aplicaciones, trabajos o funciones. Los pasos para ver cualquiera de ellos desde la consola son muy similares.
Tras seleccionar el proyecto con el que desea trabajar, puede añadir funciones de registro desde la página Code Engine Overview o desde una de sus páginas secundarias, como la página Applications, Jobs o Functions; o desde la página específica de su aplicación, trabajo o función. Los siguientes pasos suponen que está trabajando desde una página específica de Code Engine.
- Vaya a una aplicación, trabajo o función que haya creado y desplegado. En la página Proyectos de la consola Code Engine, seleccione su proyecto y, a continuación, seleccione Aplicaciones, Trabajos o Funciones, según proceda. Seleccione la aplicación, tarea o función con la que desea trabajar.
- Si ha creado previamente una instancia de IBM Cloud Logs, haga clic en Logging, para abrir el servicio IBM Cloud Logs.
- Para añadir y configurar las capacidades de registro, complete los siguientes pasos:
- En el menú de opciones Probar aplicación, Enviar trabajo o Probar función, haga clic en Añadir registro para crear la instancia IBM Cloud Logs. Esta acción abre el servicio IBM Cloud Logs.
- Desde el servicio IBM Cloud Logs, cree la instancia de registro. Para confirmar que se ha creado la instancia de registro, compruebe el panel de control de observabilidad.
- En la página de su aplicación, trabajo o función Code Engine, haga clic en Añadir registro en el menú de opciones Probar aplicación, Enviar trabajo o Probar función. Esta vez, seleccione una instancia de IBM Cloud Logs para recibir los registros de la plataforma. Elija la instancia de registro que creó en el paso anterior. Haga clic en Seleccionar. Code Engine requiere registros de plataforma habilitados para recibir datos de registro de Code Engine. Al completar esta acción, Code Engine habilita el registro de la plataforma para usted.
- Ahora que los registros de la plataforma están configurados, desde la página de su aplicación, trabajo o función Code Engine, haga clic en Registro en el menú de opciones Probar aplicación, Enviar trabajo o Probar función para abrir la ventana de registros de la plataforma. Para confirmar que se han establecido los registros de plataforma para la región, consulte el panel de control de observabilidad.
- (opcional) Afine el filtro de su búsqueda, si es necesario.
- Verifique su configuración completando uno de los siguientes pasos:
- Para una aplicación o una función, pruébela: haga clic en Probar aplicación o Probar función según corresponda y, a continuación, haga clic en Enviar solicitud. Para abrir la aplicación o función en una página web, haga clic en Aplicación URL o Función URL. Puede ver los registros de la plataforma de la prueba en la ventana de registros de la plataforma.
- Para un trabajo, ejecútelo: en el área Ejecución de trabajos, haga clic en Enviar trabajo para ejecutar su trabajo. Proporcione los valores de configuración de la ejecución del trabajo o si lo desea puede adoptar los valores predeterminados. Pulse Enviar trabajo para ejecutar el trabajo. Puede ver los registros de la plataforma desde la ejecución del trabajo en la ventana de registros de la plataforma.
Su instancia de IBM Cloud Logs está ahora configurada para que pueda recibir el registro de la plataforma para su aplicación, trabajo o función de Code Engine.
Alternativamente, puede configurar una instancia de IBM Cloud Logs utilizando el panel de control de Observability para crear la instancia y, a continuación, configurando el enrutamiento de los registros de la plataforma.
Visualización de registros de compilación desde la consola
Puede visualizar registros para instancias de ejecución de compilación específicas desde la consola.
- Vaya al panel de control de Code Engine.
- Selecciona un proyecto o crea uno.
- En la página del proyecto, pulse Compilaciones de imágenes.
- En la pestaña Creación de imágenes, haga clic en el nombre de la creación de imágenes para abrir la página de creación de una creación definida, o cree una creación.
- En la página de compilación de la compilación definida, pulse el nombre de la instancia de la ejecución de la compilación en la sección Ejecuciones de compilación. Es posible que tenga que pulsar Enviar compilación para crear una ejecución de compilación. Puede ver los registros de la plataforma desde la ejecución de la compilación en la ventana de registros de la plataforma. Alternativamente, también puede ver la información del registro de construcción para los detalles del paso de construcción desde la página de instancia de ejecución de construcción. Amplíe los pasos de compilación para obtener datos de registro de pasos de compilación específicos. Si lo desea, puede afinar el filtro de su búsqueda.
Visualización de registros con la CLI
Para ver la salida de registro con la CLI, debe tener una instancia en ejecución de su aplicación o trabajo. Si una aplicación se escala a cero o se completa una instancia de ejecución de trabajo, la salida para los parámetros ibmcloud ce app logs y ibmcloud ce jobrun logs no contiene datos de registro. También puede utilizar el servicio IBM Cloud Logs para ver los datos de registro.
Visualización de registros de aplicación con la CLI
Para ver registros de app para una app específica con la CLI, utilice el mandato application logs. Puede visualizar registros de todas las instancias de una aplicación o visualizar registros de una instancia específica de una
aplicación. El mandato app get muestra los detalles de la app, incluidas las instancias de ejecución de la app.
-
Para ver los registros de todas las instancias de la aplicación
myapp, especifique el nombre de la aplicación con la opción--app. Por ejemplo:ibmcloud ce app logs --app myappSalida de ejemplo
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 ver los registros de una instancia específica de la aplicación, especifique el nombre de la instancia específica de la aplicación con la opción
--instance. Por ejemplo:ibmcloud ce app logs --instance myapp-ii18y-2-deployment-7657c5f4f9-dgk5fSalida de ejemplo
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/
Visualización de registros del trabajo con la CLI
Para ver registros para una ejecución de trabajo específica con la CLI, utilice el mandato jobrun logs. Puede visualizar registros de todas las instancias de una ejecución de trabajo o visualizar registros de una instancia específica
de una ejecución de trabajo. El mandato jobrun get muestra detalles sobre la ejecución de trabajo, incluidas las instancias de la ejecución de trabajo.
-
Para ver los registros de todas las instancias de la ejecución del trabajo
testjobrun, especifique el nombre de la ejecución del trabajo con la opción--jobrun. Por ejemplo:ibmcloud ce jobrun logs --jobrun testjobrunSalida de ejemplo
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 ver los registros de la instancia de ejecución del trabajo
testjobrun-1-0, especifique el nombre de una instancia específica de la ejecución del trabajo con la opción--instance. Por ejemplo:ibmcloud ce jobrun logs --instance testjobrun-1-0Salida de ejemplo
Getting logs for job run instance 'testjobrun-1-0'... OK testjobrun-1-0: Hello World!
Visualización de registros de compilación con la CLI
Para ver los registros de compilación para una ejecución de compilación específica con la CLI, utilice el mandato buildrun logs. Puede visualizar registros de todas las instancias de una ejecución de compilación a partir del nombre
de la ejecución de compilación.
Para ver los registros de todas las instancias de la ejecución de compilación de mybuildrun, especifique el nombre de la ejecución de compilación con la opción --name. Por ejemplo:
ibmcloud ce buildrun logs --name mybuildrun
Salida de ejemplo
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"}