2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
इति पूर्वस्य लेखस्य निरन्तरता " " ।Elasticsearch: Node.js ईसीएस लॉगिंग - पिनो” continuation of. लक्ष्यं कर्तुं विन्स्टन्-सङ्कुलस्य उपयोगस्य विषये चर्चां कर्तुं वयं पूर्वलेखं निरन्तरं कुर्मः नोड.जस अनुप्रयोगः दिवसस्य सङ्गतिं कर्तुं ECS जनयति ।इदं Node.js संकुलम् अस्तिwinston loggerएकः स्वरूपकः प्रदत्तः अस्ति, सह लोचदार सामान्य योजना (ECS) लॉगिंग सुयोग्य।संयोजनसञ्चिकाबीट् प्रेषकः, भवान् Elastic Stack इत्यस्मिन् एकस्मात् स्थानात् सर्वाणि लॉग्स् निरीक्षितुं शक्नोति । समर्थनं winston 3.x संस्करणं >=3.3.3.
- npm install @elastic/ecs-winston-format
- npm install winston
विन्स्टन-लॉगिंग.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') });
उपर्युक्तसङ्केतस्य चालनस्य परिणामः अस्ति :
सञ्चिकाबीट् ७.१६+
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: ~
सञ्चिकाबीट् < 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: ~
अधिकविवरणार्थं पश्यन्तु Filebeat सन्दर्भः。
विन्स्टन-लॉगिंग.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 .
एतत् स्क्रिप्ट् चालयन्तु (अत्र उपलभ्यतेअत्रप्राप्तम्) उपर्युक्तसदृशं log output उत्पादयिष्यति ।
स्वरूपकः JSON मध्ये दत्तांशस्य क्रमाङ्कनस्य उत्तरदायी अस्ति, अतः भवद्भिः योजयितुं आवश्यकता नास्ति ञ्सोन् स्वरूपकम् ।तदतिरिक्तं, स्वरूपकः स्वयमेव समयमुद्रिकां जनयति, अतः भवद्भिः योजयितुं आवश्यकता नास्तिसमयमुद्रिका स्वरूपकम् ।
पूर्वनिर्धारितरूपेण, स्वरूपकः एकस्य Error उदाहरणस्य err मेटाफील्ड् इत्येतत् परिवर्तयति ECSError क्षेत्रम् .उदाहरणतयाउदाहरण:
विन्स्टन-लॉगिंग.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 मेटाफील्ड् इत्यस्य विशेषनियन्त्रणं convertErr: false विकल्पस्य माध्यमेन अक्षमं कर्तुं शक्यते:
विन्स्टन-लॉगिंग.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 });
convertReqRes: true विकल्पस्य उपयोगेन, स्वरूपकः स्वयमेव Node.js कोरं परिवर्तयिष्यति यदा क्रमशः req तथा res मेटाफील्ड् इति रूपेण पारितः भवति । अनुरोधः तथाप्रतिक्रिया वस्तु।
विन्स्टन-लॉगिंग.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
- }
एतेन उपयोगः भविष्यति ECS HTTP क्षेत्राणि अनुरोधप्रतिक्रियासूचनायुक्तं लॉगं जनयति ।उदाहरणतयाउदाहरण:
उपरि अस्माकं प्रवेशः आवश्यकः http://स्थानीयमेजबान:3000 तदा एव उपरि दर्शितं दिवसस्य सूचनां द्रष्टुं शक्नुवन्ति।
अयम् ईसीएस log formatter सहलोचदार ए पी एम एकीकृत।यदि भवतः Node अनुप्रयोगः उपयुज्यतेNode.js लोचदार एपीएम एजेंट, एपीएम सेवा अथवा ट्रेस एण्ड् लॉग् डाटा सहसंबद्धुं लॉग् रिकार्ड् मध्ये अनेकाः क्षेत्राणि योजिताः भवन्ति:
यथा धावतु उदाहरणम्/http-सह-लोचना-apm.js तथाcurl -i स्थानीयमेजबान:3000/ निम्नलिखितसामग्रीयुक्तः लॉग् अभिलेखः उत्पाद्यते ।
- % 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"
- }
एते IDs एपीएम एजेण्टेन प्रतिवेदितैः अनुसरणदत्तांशैः सह मेलम् कुर्वन्ति ।
Elastic APM इत्यनेन सह एकीकरणं apmIntegration: false विकल्पस्य माध्यमेन स्पष्टतया निष्क्रियं कर्तुं शक्यते, उदाहरणार्थं:
- const logger = winston.createLogger({
- format: ecsFormat({ apmIntegration: false }),
- // ...
- })
ecs-logging विनिर्देशः अनुशंसितं यत् log record इत्यस्मिन् प्रथमत्रयक्षेत्राणि @timestamp, log.level, message च भवेयुः । १.५.० संस्करणात् आरभ्य अयं प्रारूपकः एतस्य अनुशंसायाः अनुसरणं न करोति । एतत् सम्भवति परन्तु प्रत्येकस्य log record कृते ecsFields मध्ये नूतनं वस्तु निर्मातुं आवश्यकम् अस्ति । ecs-logging क्षेत्राणां क्रमणं पठनीयतायै भवति, अन्तरक्रियाशीलतां न प्रभावितं करोति इति दृष्ट्वा कार्यप्रदर्शनस्य प्राथमिकताम् अददात् इति निर्णयः कृतः ।
winston कृते एकं स्वरूपकं रचयन्तु यत् ECS logging प्रारूपं उत्सर्जयति ।इति चिकित्साecsFields ([विकल्प]) 1.1. तथाecsStringify ([विकल्प]) 1.1. एक प्रारूप। निम्नलिखितद्वयं तुल्यम् अस्ति : १.
- 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()
- ),
- // ...
- });
winston कृते एकं स्वरूपकं रचयन्तु यत् logging information object इत्यत्र क्षेत्राणि ECS logging format इत्यत्र परिवर्तयति ।
JSON मध्ये log records stringify/serialize कर्तुं winston कृते formatter रचयन्तु ।
इदं logform.json() इत्यस्य सदृशम् अस्ति । तौ JSON उत्पन्नं कर्तुं safe-stable-stringify संकुलस्य उपयोगं कुर्वतः । केचन भेदाः : १.