2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tämä on jatkoa edelliselle artikkelille "Elasticsearch: Node.js ECS Logging - PinoJatkamme edellistä artikkelia Winston-paketin käyttämisestä kohdistamiseen Node.js Sovellus luo ECS:n päivän mukaan.Tämä Node.js-paketti onWinston metsuriMukana on muotoilulaite Elastic Common Schema (ECS) -lokikirjaus yhteensopiva.yhdistääFilebeat Sender, voit seurata kaikkia lokeja yhdestä paikasta elastisessa pinossa. Tuki winston 3.x -versiolle >=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') });
Yllä olevan koodin suorittamisen tulos on:
Filebeat 7.16+
filebeat.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
filebeat.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: ~
Katso lisätietoja Filebeat-viittaus。
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 .
Suorita tämä komentosarja (saatavilla osoitteessatässäsaatu) tuottaa yllä olevan kaltaisen lokitulosteen.
Muotoilija on vastuussa tietojen sarjoittamisesta JSON-muotoon, joten sinun ei tarvitse lisätä json Muotoilija.Lisäksi muotoilija luo automaattisesti aikaleiman, joten sinun ei tarvitse lisätäaikaleima Muotoilija.
Oletusarvoisesti muotoilija muuntaa Error-esiintymän err-metakentän muotoon ECSE-virhekenttä .Esimerkiksiesimerkki:
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 });
Err-metakentän erikoiskäsittely voidaan poistaa käytöstä convertErr: false -vaihtoehdolla:
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 });
Käyttämällä convertReqRes: true -vaihtoehtoa muotoilija muuntaa automaattisesti Node.js-ytimen, kun se lähetetään req- ja res-metakenttinä. pyyntö javastaus esine.
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
- }
Tämä käyttää ECS HTTP-kentät Luo lokin, joka sisältää pyyntö- ja vastaustiedot.Esimerkiksiesimerkki:
Ylhäällä meidän on päästävä http://localhost:3000 Vasta sitten näet yllä näkyvät päivätiedot.
Tämä ECS lokiformaatin kanssaElastinen APM integroitu.Jos Node-sovelluksesi käyttääNode.js Elastinen APM-agentti, lokitietueeseen lisätään useita kenttiä APM-palvelun tai jäljitys- ja lokitietojen korreloimiseksi:
Esimerkiksi juosta examples/http-with-elastic-apm.js jacurl -i localhost:3000/ Lokitietue, joka sisältää seuraavan sisällön, luodaan:
- % 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"
- }
Nämä tunnukset vastaavat APM-agentin ilmoittamia seurantatietoja.
Integrointi Elastic APM:n kanssa voidaan poistaa eksplisiittisesti käytöstä apmIntegration: false -vaihtoehdolla, esimerkiksi:
- const logger = winston.createLogger({
- format: ecsFormat({ apmIntegration: false }),
- // ...
- })
ecs-logging eritelmä On suositeltavaa, että lokitietueen kolme ensimmäistä kenttää ovat @timestamp, log.level ja message. Versiosta 1.5.0 alkaen tämä muotoiluohjelma ei noudata tätä suositusta. Tämä on mahdollista, mutta vaatii uuden objektin luomisen ecsFieldsissä jokaiselle lokitietueelle. Koska ecs-lokikenttien järjestys on luettavuuden vuoksi eikä vaikuta yhteentoimivuuteen, suorituskyky päätettiin priorisoida.
Luo winstonille formatteri, joka lähettää ECS-lokimuotoa.Tämä on hoitoaecsFields([valinnat]) jaecsStringify([valinnat]) yksi muoto. Seuraavat kaksi ovat vastaavia:
- 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()
- ),
- // ...
- });
Luo winstonille muotoilija, joka muuntaa lokitietoobjektin kentät ECS-lokimuotoon.
Luo muotoilija winstonille lokitietueiden juunien juunittamiseksi/sarjoittamiseksi JSON-muotoon.
Tämä on samanlainen kuin logform.json(). Molemmat käyttävät safe-stable-stringify-pakettia JSONin luomiseen. Joitakin eroja: