Mi informacion de contacto
Correomesophia@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Esta es una continuación del artículo anterior "Elasticsearch: Registro ECS de Node.js - Pino” continuación de Continuamos el artículo anterior para hablar sobre el uso del paquete Winston para apuntar. Node.js La aplicación genera ECS para coincidir con el día.Este paquete Node.js esregistrador winstonSe proporciona un formateador, con Registro de esquema común elástico (ECS) compatible.combinarArchivo Beat Remitente, puede monitorear todos los registros desde un solo lugar en el Elastic Stack. Admite la versión winston 3.x >=3.3.3.
- npm install @elastic/ecs-winston-format
- npm install winston
winston-logging.js
- const winston = require('winston');
- const { ecsFormat } = require('@elastic/ecs-winston-format');
-
- const logger = winston.createLogger({
- format: ecsFormat(/* options */), // 1
- transports: [
- new winston.transports.Console()
- ]
- });
-
- logger.info('hi');
- logger.error('oops there is a problem', { err: new Error('boom') });
El resultado de ejecutar el código anterior es:
Filebeat 7.16+
archivobeat.yml
- filebeat.inputs:
- - type: filestream # 1
- paths: /path/to/logs.json
- parsers:
- - ndjson:
- overwrite_keys: true # 2
- add_error_key: true # 3
- expand_keys: true # 4
-
- processors: // 5
- - add_host_metadata: ~
- - add_cloud_metadata: ~
- - add_docker_metadata: ~
- - add_kubernetes_metadata: ~
Archivo Beat < 7.16
archivobeat.yml
- filebeat.inputs:
- - type: log
- paths: /path/to/logs.json
- json.keys_under_root: true
- json.overwrite_keys: true
- json.add_error_key: true
- json.expand_keys: true
-
- processors:
- - add_host_metadata: ~
- - add_cloud_metadata: ~
- - add_docker_metadata: ~
- - add_kubernetes_metadata: ~
Para más información, ver Referencia de filebeat。
winston-logging.js
- const winston = require('winston');
- const { ecsFormat } = require('@elastic/ecs-winston-format');
-
- const logger = winston.createLogger({
- level: 'info',
- format: ecsFormat(/* options */), // 1
- transports: [
- new winston.transports.Console()
- ]
- });
-
- logger.info('hi');
- logger.error('oops there is a problem', { foo: 'bar' });
node winston-logging.js | jq .
Ejecute este script (disponible enaquíobtenido) producirá una salida de registro similar a la anterior.
El formateador es responsable de serializar los datos en JSON, por lo que no es necesario agregar json Formateador.Además, el formateador genera automáticamente la marca de tiempo, por lo que no es necesario agregarmarca de tiempo Formateador.
De forma predeterminada, el formateador convierte el metacampo err de una instancia de Error en Campo de error ECSEr .Por ejemploejemplo:
winston-logging.js
- const winston = require('winston');
- const { ecsFormat } = require('@elastic/ecs-winston-format');
- const logger = winston.createLogger({
- format: ecsFormat(),
- transports: [
- new winston.transports.Console()
- ]
- });
-
- const myErr = new Error('boom');
- logger.info('oops', { err: myErr });
El manejo especial del metacampo err se puede desactivar mediante la opción convertErr: false:
winston-logging.js
- const winston = require('winston');
- const { ecsFormat } = require('@elastic/ecs-winston-format');
- const logger = winston.createLogger({
- format: ecsFormat({convertErr: false} ),
- transports: [
- new winston.transports.Console()
- ]
- });
-
- const myErr = new Error('boom');
- logger.info('oops', { err: myErr });
Usando la opción convertReqRes: true, el formateador convertirá automáticamente el núcleo de Node.js cuando se pase como metacampos req y res respectivamente. pedido yrespuesta objeto.
winston-logging.js
- const http = require('http');
- const winston = require('winston');
- const { ecsFormat } = require('@elastic/ecs-winston-format');
-
- const logger = winston.createLogger({
- level: 'info',
- format: ecsFormat({ convertReqRes: true }), // 1
- transports: [
- new winston.transports.Console()
- ]
- });
-
- const server = http.createServer(handler);
- server.listen(3000, () => {
- logger.info('listening at http://localhost:3000')
- });
-
- function handler (req, res) {
- res.setHeader('Foo', 'Bar');
- res.end('ok');
- logger.info('handled request', { req, res }); // 2
- }
Esto usará Campos HTTP de ECS Genera un registro que contiene información de solicitud y respuesta.Por ejemploejemplo:
Arriba, necesitamos acceder http://localhost:3000 Sólo entonces podrá ver la información del día que se muestra arriba.
este Sistema de clasificación electrónica formateador de registros conAPM elástica integrado.Si su aplicación Node está utilizandoAgente APM elástico de Node.js, se agregan varios campos al registro para correlacionar el servicio APM o los datos de seguimiento y registro:
Por ejemplo, ejecutar ejemplos/http-con-elastic-apm.js ycurl -i localhost:3000/ Se genera un registro que contiene el siguiente contenido:
- % node examples/http-with-elastic-apm.js | jq .
- ...
- "service.name": "http-with-elastic-apm",
- "service.version": "1.4.0",
- "service.environment": "development",
- "event.dataset": "http-with-elastic-apm"
- "trace.id": "7fd75f0f33ff49aba85d060b46dcad7e",
- "transaction.id": "6c97c7c1b468fa05"
- }
Estos ID coinciden con los datos de seguimiento informados por el agente de APM.
La integración con Elastic APM se puede deshabilitar explícitamente mediante la opción apmIntegration: false, por ejemplo:
- const logger = winston.createLogger({
- format: ecsFormat({ apmIntegration: false }),
- // ...
- })
especificación de registro ecs Se recomienda que los primeros tres campos del registro sean @timestamp, log.level y message. A partir de la versión 1.5.0, este formateador no sigue esta recomendación. Esto es posible pero requiere la creación de un nuevo objeto en ecsFields para cada registro. Dado que el orden de los campos de registro ecs es para facilitar la lectura y no afecta la interoperabilidad, se decidió priorizar el rendimiento.
Cree un formateador para Winston que emita el formato de registro ECS.Este es un tratamientoecsFields([opciones]) yecsStringify([opciones]) formato único. Los dos siguientes son equivalentes:
- const { ecsFormat, ecsFields, ecsStringify } = require('@elastic/ecs-winston-format');
- const winston = require('winston');
-
- const logger = winston.createLogger({
- format: ecsFormat(/* options */),
- // ...
- });
-
- const logger = winston.createLogger({
- format: winston.format.combine(
- ecsFields(/* options */),
- ecsStringify()
- ),
- // ...
- });
Cree un formateador para Winston que convierta los campos del objeto de información de registro al formato de registro ECS.
Cree un formateador para que Winston encadene/serialice registros de registro en JSON.
Esto es similar a logform.json(). Ambos usan el paquete safe-stable-stringify para generar JSON. Algunas diferencias: