informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Ini merupakan lanjutan dari artikel sebelumnya"Elasticsearch: Pencatatan ECS Node.js - Pino” kelanjutan dari. Kami melanjutkan artikel sebelumnya untuk membahas tentang penggunaan paket Winston untuk menargetkan Bahasa pemrograman Node.js Aplikasi ini menghasilkan ECS untuk mencocokkan hari itu.Paket Node.js ini adalahpenebang winstonFormatter disediakan, dengan Pencatatan log Elastic Common Schema (ECS). kompatibel.menggabungkanKetukan file Pengirim, Anda dapat memantau semua log dari satu tempat di Elastic Stack. Mendukung versi 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') });
Hasil dari menjalankan kode di atas adalah:
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: ~
Ketukan file < 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: ~
Untuk informasi lebih lanjut, lihat Referensi 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 .
Jalankan skrip ini (tersedia diDi Sinidiperoleh) akan menghasilkan keluaran log yang mirip dengan di atas.
Pemformat bertanggung jawab untuk membuat serial data ke dalam JSON, jadi Anda tidak perlu menambahkannya Bahasa Indonesia: Bahasa Indonesia: json Pemformat.Selain itu, pemformat secara otomatis membuat stempel waktu, jadi Anda tidak perlu menambahkannyacap waktu Pemformat.
Secara default, pemformat mengonversi metafield err dari instance Error menjadi Bidang ECSError .Misalnyacontoh:
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 });
Penanganan khusus terhadap metafield err dapat dinonaktifkan melalui opsi 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 });
Dengan menggunakan opsi convertReqRes: true, pemformat akan secara otomatis mengonversi inti Node.js ketika diteruskan sebagai metafield req dan res. meminta Dantanggapan obyek.
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
- }
Ini akan berguna Bidang HTTP ECS Menghasilkan log yang berisi informasi permintaan dan respons.Misalnyacontoh:
Di atas, kita perlu mengakses http://host lokal:3000 Baru setelah itu Anda dapat melihat informasi hari yang ditunjukkan di atas.
ini ECS pemformat log denganAPM elastis terintegrasi.Jika aplikasi Node Anda menggunakanAgen APM Elastis Node.js, beberapa bidang ditambahkan ke catatan log untuk menghubungkan layanan APM atau melacak dan mencatat data:
Misalnya, lari contoh/http-dengan-elastic-apm.js Danikal -i localhost:3000/ Catatan log yang berisi konten berikut dihasilkan:
- % 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"
- }
ID ini cocok dengan data pelacakan yang dilaporkan oleh agen APM.
Integrasi dengan Elastic APM dapat dinonaktifkan secara eksplisit melalui opsi apmIntegration: false, misalnya:
- const logger = winston.createLogger({
- format: ecsFormat({ apmIntegration: false }),
- // ...
- })
spesifikasi ecs-logging Disarankan agar tiga bidang pertama dalam catatan log adalah @timestamp, log.level, dan pesan. Dimulai dengan versi 1.5.0, pemformat ini tidak mengikuti rekomendasi ini. Hal ini dimungkinkan tetapi memerlukan pembuatan objek baru di ecsFields untuk setiap catatan log. Mengingat bahwa urutan bidang ecs-logging adalah untuk keterbacaan dan tidak mempengaruhi interoperabilitas, maka diputuskan untuk memprioritaskan kinerja.
Buat pemformat untuk winston yang mengeluarkan format logging ECS.Ini adalah pengobatanecsFields([pilihan]) DanecsStringify([pilihan]) format tunggal. Dua berikut ini setara:
- 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()
- ),
- // ...
- });
Buat pemformat untuk winston yang mengonversi bidang pada objek informasi logging ke format logging ECS.
Buat pemformat untuk winston untuk merangkai/membuat serial catatan log ke JSON.
Ini mirip dengan logform.json(). Keduanya menggunakan paket safe-stable-stringify untuk menghasilkan JSON. Beberapa perbedaan: