minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Esta é uma continuação do artigo anterior "Elasticsearch: registro ECS do Node.js - Pino”Continuação de. Continuamos o artigo anterior para falar sobre o uso do pacote Winston para direcionar. Node.js O aplicativo gera ECS para combinar com o dia.Este pacote Node.js éregistrador de WinstonUm formatador é fornecido, com Criação de log do Elastic Common Schema (ECS) compatível.combinarBatida de arquivo Remetente, você pode monitorar todos os logs de um só lugar no Elastic Stack. Suporte à versão 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') });
O resultado da execução do código acima é:
Filebeat 7.16+
arquivobeat.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: ~
Filebeat < 7,16
arquivobeat.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 mais informações, veja Referência do 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 .
Execute este script (disponível emaquiobtido) produzirá uma saída de log semelhante à acima.
O formatador é responsável por serializar os dados em JSON, então você não precisa adicionar json Formatador.Além disso, o formatador gera automaticamente o carimbo de data/hora, então você não precisa adicionarcarimbo de data/hora Formatador.
Por padrão, o formatador converte o metacampo err de uma instância Error para Campo ECSError .Por exemploexemplo:
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 });
O tratamento especial do metacampo err pode ser desabilitado através da opção 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 a opção convertReqRes: true, o formatador converterá automaticamente o núcleo do Node.js quando passado como metacampos req e res, respectivamente. solicitar eresposta 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
- }
Isso usará Campos HTTP do ECS Gera um log contendo informações de solicitação e resposta.Por exemploexemplo:
Acima, precisamos acessar http://localhost:3000 Só então você poderá ver as informações do dia mostradas acima.
esse ECS formatador de log comAPM elástico integrado.Se o seu aplicativo Node estiver usandoAgente Node.js Elastic APM, vários campos são incluídos no registro de log para correlacionar o serviço APM ou rastrear e registrar dados:
Por exemplo, execute exemplos/http-com-elastic-apm.js ecurl -i localhost:3000/ Um registro de log contendo o seguinte conteúdo é produzido:
- % 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"
- }
Esses IDs correspondem aos dados de rastreamento relatados pelo agente APM.
A integração com o Elastic APM pode ser explicitamente desabilitada por meio da opção apmIntegration: false, por exemplo:
- const logger = winston.createLogger({
- format: ecsFormat({ apmIntegration: false }),
- // ...
- })
especificação de registro ecs Recomenda-se que os três primeiros campos do registro de log sejam @timestamp, log.level e mensagem. A partir da versão 1.5.0, este formatador não segue esta recomendação. Isso é possível, mas requer a criação de um novo objeto em ecsFields para cada registro de log. Dado que a ordenação dos campos ecs-logging é para facilitar a leitura e não afeta a interoperabilidade, decidiu-se priorizar o desempenho.
Crie um formatador para o Winston que emita o formato de log do ECS.Este é um tratamentoecsFields([opções]) eecsStringify([opções]) formato único. Os dois seguintes são 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()
- ),
- // ...
- });
Crie um formatador para o Winston que converta os campos no objeto de informações de log para o formato de log do ECS.
Crie um formatador para o Winston para stringificar/serializar registros de log para JSON.
Isso é semelhante a logform.json(). Ambos usam o pacote safe-stable-stringify para gerar JSON. Algumas diferenças: