Elasticsearch:Node.js ECS 日志記錄 - Morgan

這是之前系列文章:

  • Elasticsearch:Node.js ECS 日志記錄 - Pino

  • Elasticsearch:Node.js ECS 日志記錄 - Winston

中的第三篇文章。在今天的文章中,我將描述如何使用 Morgan 包針對 Node.js 應用進行日子記錄。此 Morgan Node.js 軟件包為 morgan 日志中間件(通常與 Express 一起使用)提供了一個格式化程序,與 Elastic Common Schema (ECS) 日志記錄兼容。結合 Filebeat 發送器,你可以在 Elastic Stack 中的一處監控所有日志。

設置

安裝

npm install @elastic/ecs-morgan-format
npm install morgan

配置

morgan-logging.js

const app = require('express')();
const morgan = require('morgan');
const { ecsFormat } = require('@elastic/ecs-morgan-format');app.use(morgan(ecsFormat(/* options */)));  // 1// ...
app.get('/', function (req, res) {res.send('hello, world!');
})
app.listen(3000);
  • 將 ECS 格式化程序傳遞給 morgan()。

配置 Filebeat

收集 ECS 格式化的日志的最佳方式是使用 Filebeat:

Filebeat 7.16+

filebeat.yml

filebeat.inputs:
- type: filestream   # 1paths: /path/to/logs.jsonparsers:- ndjson:overwrite_keys: true # 2add_error_key: true  # 3expand_keys: true    # 4processors: # 5- add_host_metadata: ~- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~
  1. 使用文件流輸入從活動日志文件中讀取行。
  2. 如果發生沖突,解碼的 JSON 對象的值將覆蓋 Filebeat 通常添加的字段(type、source、offset 等)。
  3. 如果發生 JSON 解組錯誤,Filebeat 將添加 “error.message” 和 “error.type: json” 鍵。
  4. Filebeat 將遞歸地從解碼的 JSON 中去掉點鍵,并將其擴展為分層對象結構。
  5. 處理器可增強您的數據。請參閱 processor 以了解更多信息。

Filebeat < 7.16

filebeat.yml

filebeat.inputs:
- type: logpaths: /path/to/logs.jsonjson.keys_under_root: truejson.overwrite_keys: truejson.add_error_key: truejson.expand_keys: trueprocessors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~

有關更多信息,請參閱 Filebeat 參考。

使用方法

morgan-logging.js

const app = require('express')();
const morgan = require('morgan');
const { ecsFormat } = require('@elastic/ecs-morgan-format');app.use(morgan(ecsFormat(/* options */)));  // 1app.get('/', function (req, res) {res.send('hello, world!');
})
app.get('/error', function (req, res, next) {next(new Error('boom'));
})app.listen(3000)
  1. 請參閱下面的可用選項。

運行上面的應用,并訪問 http://localhost:3000。

npm install express
$ pwd
/Users/liuxg/nodejs/nodejs-logs
$ ls
morgan-logging.js  pino-logging.js    winston-logging.js
$ node morgan-logging.js | jq .

運行此腳本(完整示例在這里)并發出請求(通過 curl -i localhost:3000/)將產生類似于以上內容的日志輸出。

Format 選項

你可以傳遞任何通常傳遞給 morgan() 的格式參數,日志 “message” 字段將使用指定的格式。默認為 combined。

const app = require('express')();
const morgan = require('morgan');
const { ecsFormat } = require('@elastic/ecs-morgan-format');app.use(morgan(ecsFormat({ format: 'tiny' })));  // 1
// ...
  1. 如果 “format” 是你使用的唯一選項,你可以將其作為 ecsFormat('tiny') 傳遞。

log.level

如果響應代碼 >= 500,log.level 字段將為 “error”,否則為 “info”。例如,再次運行 examples/express.js,curl -i localhost:3000/error 將產生:

% node examples/express.js | jq .
{"@timestamp": "2021-01-18T17:52:12.810Z","log.level": "error","message": "::1 - - [18/Jan/2021:17:52:12 +0000] \"GET /error HTTP/1.1\" 500 1416 \"-\" \"curl/7.64.1\"","http": {"response": {"status_code": 500,...

使用 APM 進行日志關聯

此 ECS 日志格式化程序與 Elastic APM 集成。如果你的 Node 應用正在使用 Node.js Elastic APM Agent,則會將多個字段添加到日志記錄中,以關聯 APM 服務或跟蹤和日志數據:

  • 當前跟蹤跨度時調用的日志語句(例如 logger.info(...))將包括跟蹤字段?—?trace.id、transaction.id。
  • 由 APM 代理確定或在 APM 代理上配置的多個服務標識符字段允許在 Kibana 中的服務和日志之間進行交叉鏈接?—?service.name、service.version、service.environment、service.node.name。
  • event.dataset 在 Elastic Observability 應用中啟用日志率異常檢測。

例如,運行 examples/express-with-apm.js 和 curl -i localhost:3000/ 會產生包含以下內容的日志記錄:

% node examples/express-with-apm.js | jq .
{// The same fields as before, plus:"service.name": "express-with-elastic-apm","service.version": "1.1.0","service.environment": "development","event.dataset": "express-with-elastic-apm","trace.id": "116d46f667a7600deed9c41fa015f7de","transaction.id": "b84fb72d7bf42866"
}

這些 ID 與 APM 代理報告的跟蹤數據相匹配。

可以通過 apmIntegration: false 選項明確禁用與 Elastic APM 的集成,例如:

app.use(morgan(ecsFormat({ apmIntegration: false })));

參考

ecsFormat([options])

  • options {type-object} 支持以下選項:
    • format {type-string} 格式名稱(例如 combined)、格式函數(例如 morgan.combined)或格式字符串(例如 :method :url :status)。這用于格式化“message”字段。默認值?morgan.combined。
    • convertErr {type-boolean} 是否將記錄的錯誤字段轉換為 ECS 錯誤字段。默認值:true。
    • apmIntegration {type-boolean} 是否啟用 APM 代理集成。默認值:true。
    • serviceName {type-string} “service.name”值。如果指定,則覆蓋來自活動 APM 代理的任何值。
    • serviceVersion {type-string} “service.version”值。如果指定,則覆蓋來自活動 APM 代理的任何值。
    • serviceEnvironment {type-string} “service.environment”值。如果指定,則將覆蓋來自活動 APM 代理的任何值。
    • serviceNodeName {type-string} “service.node.name” 值。如果指定,則將覆蓋來自活動 APM 代理的任何值。
    • eventDataset {type-string} “event.dataset” 值。如果指定,則將覆蓋使用 ${serviceVersion} 的默認設置。

為 morgan 創建以 ECS 日志記錄格式發出的格式化程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42924.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

包裝器 std::function

使用前&#xff0c;包頭文件&#xff1a;#include <functional> std::function 是 C標準庫 中的一個通用函數包裝器&#xff1b; 它可以儲存、復制、調用任何可調用的對象&#xff0c;包括&#xff1a;函數指針、成員函數、綁定的成員函數、lambda表達式、仿函數等。 1…

Selenium Grid- 讓自動化分布式執行變得可能

什么是 Selenium Grid&#xff1f; Selenium Grid 是 Selenium 的三大組件之一&#xff0c;允許用戶同時在不同的機器和系統上測試不同瀏覽器。 也就是說 Selenium Grid 支持分布式的測試執行。它可以讓你的測試用例在一個分布式的執行環境中運行。 由上圖可見&#xff0c;測試…

linux:基礎知識及命令[圖表]

lsof:查找文件 普通文件、目錄、進程&#xff08;/proc&#xff09;、輸入輸出設備&#xff08;/dev&#xff09;、網絡字節流socket、鏈接文件、管道文件 基本用法 lsof&#xff1a;列出所有打開的文件。lsof /path/to/file&#xff1a;列出打開指定文件的所有進程。lsof -…

大話光學原理:4.散射:瑞利、拉曼、米氏和布里淵

這是一縷柔和的光&#xff0c;在空氣的舞臺上輕盈地跳躍。它悠然自得&#xff0c;在寧靜的空間中緩緩前行。然而&#xff0c;一片細薄透明的介質擋住了它的腳步&#xff0c;它毫無預兆地撞上了這片障礙。在這短暫的接觸中&#xff0c;它被分解成無數微小的粒子&#xff0c;被迫…

增強現實(AR)與虛擬現實(VR)的區別?

隨著科技的飛速發展&#xff0c;增強現實&#xff08;AR&#xff09;與虛擬現實&#xff08;VR&#xff09;技術在各個領域展現出巨大的潛力和應用前景。這兩種技術雖然在體驗和實現方式上有所不同&#xff0c;但都為用戶提供了全新的感知體驗。本文將詳細解析AR和VR的概念、區…

機器視覺/自然語言/生成式人工智能綜合應用實驗平臺-實訓平臺-教學平臺

AIGC是人工智能1.0時代進入2.0時代的重要標志&#xff0c;MIT 科技評論也將Al合成數據列為2022年十大突破性技術之一&#xff0c;甚至將生成性Al(Generative Al) 稱為是AI領域過去十年最具前景的進展。同時&#xff0c;AIGC領域崗位需求數量暴漲。高校方面在人工智能專業與機器…

javascript 處理###分隔的字符串

在 JavaScript 中&#xff0c;可以使用 split 方法將字符串按 ### 分隔成數組。以下是一個示例代碼&#xff0c;展示了如何處理由 ### 分隔的字符串&#xff1a; 示例代碼 // 示例字符串 let str "part1###part2###part3###part4";// 使用 split 方法按 ### 分隔字…

DEJA_VU3D - Cesium功能集 之 122-體元渲染(官方Voxels)

前言 編寫這個專欄主要目的是對工作之中基于Cesium實現過的功能進行整合,有自己琢磨實現的,也有參考其他大神后整理實現的,初步算了算現在有差不多實現小140個左右的功能,后續也會不斷的追加,工作原因可能無法像以前那樣周更2-3篇,但是閑下來還是會不定期的更新,Cesium…

tensorflow張量生成以及常用函數

張量tensor&#xff1a;多維數組&#xff08;列表&#xff09; 階&#xff1a;張量的維數 維數 階 名字 例子 0-D 0 標量 scalar s 1&#xff0c; 2&#xff0c; 3 1-D 1 向量 vector…

How do I format markdown chatgpt response in tkinter frame python?

題意&#xff1a;怎樣在Tkinter框架中使用Python來格式化Markdown格式的ChatGPT響應&#xff1f; 問題背景&#xff1a; Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…

Python數據分析-天氣類型預測分析

一、研究背景 近年來&#xff0c;隨著全球氣候變化的加劇&#xff0c;天氣預報和氣象預測變得越來越重要。準確的天氣預測不僅能夠幫助人們做好日常生活的安排&#xff0c;還能在農業生產、防災減災等方面起到關鍵作用。隨著大數據技術和機器學習算法的快速發展&#xff0c;利…

科普文:深入理解負載均衡(四層負載均衡、七層負載均衡)

概敘 網絡模型&#xff1a;OSI七層模型、TCP/IP四層模型、現實的五層模型 應用層&#xff1a;對軟件提供接口以使程序能使用網絡服務&#xff0c;如事務處理程序、文件傳送協議和網絡管理等。&#xff08;HTTP、Telnet、FTP、SMTP&#xff09; 表示層&#xff1a;程序和網絡之…

基于vue的地圖特效(飛線和標注)

這段代碼的主要功能是在頁面加載完成后&#xff0c;初始化一個 echarts 地圖圖表&#xff0c;并配置了相關的地理數據、散點數據、線條數據以及樣式效果&#xff0c;最后在指定的 div 元素中進行展示。 需要再vue中的框架實現&#xff0c;不能單獨直接運行。 標注 type: effe…

Python30 使用Gensim庫實現Word2Vec對文本進行處理

1.Word2Vec Word2Vec 是一種將詞語表示為向量的技術&#xff0c;能夠捕捉詞語之間的語義關系。它由 Google 的 Tomas Mikolov 等人在 2013 年提出&#xff0c;廣泛應用于自然語言處理任務中。其核心概念主要包括&#xff1a; 詞嵌入&#xff08;Word Embeddings&#xff09; …

使用昇騰芯片進行多卡訓推時使用hccl_tools.py為npu分配ip報錯問題解決辦法

目錄 問題描述問題產生原因解決辦法最終執行并驗證參考網站命令擴展 問題描述 昇騰芯片&#xff08;910b/310p等&#xff09;進行多卡訓練或者推理時需要先獲取并配置每張npu的ip信息&#xff0c;因此需要執行類似下面問題&#xff1a; python mindformers/tools/hccl_tools.…

[AI 大模型] Meta LLaMA-2

文章目錄 [AI 大模型] Meta LLaMA-2簡介模型架構發展新技術和優勢示例 [AI 大模型] Meta LLaMA-2 簡介 Meta LLaMA-2 是 Meta 推出的第二代開源大型語言模型&#xff08;LLM&#xff09;&#xff0c;旨在為研究和商業應用提供強大的自然語言處理能力。 LLaMA-2 系列模型包括從…

Python實現串口通信(Python+Stm32)詳解

Python實現串口通信&#xff08;PythonStm32&#xff09;詳解 引言 在現代的嵌入式系統開發和自動化控制中&#xff0c;串口通信是一種非常常見的通信方式。Python作為一種易于學習且功能強大的編程語言&#xff0c;結合Stm32微控制器&#xff0c;能夠實現高效、靈活的串口通…

Python29 Tensorflow的基本知識和使用

1. TensorFlow TensorFlow 是一個開源的機器學習框架&#xff0c;由 Google Brain 團隊開發。它用于數據流圖的計算&#xff0c;尤其擅長深度學習任務。在 TensorFlow 中&#xff0c;數據流圖&#xff08;Data Flow Graph&#xff09;是其核心概念之一&#xff0c;它定義了計算…

Blackbox AI : 全新的人工智能編碼助手 您的高效AI開發全能助手

&#x1f3ac; 鴿芷咕&#xff1a;個人主頁 &#x1f525; 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想&#xff0c;就是為了理想的生活! 引入 提起AI 智能編碼助手&#xff0c;相信到了如今大家都不陌生。其對我們開發的代碼時的效率有顯著的提升&#xff0c;可以說…

效果驚人!LivePortrait開源數字人技術,讓靜態照片生動起來

不得了了,快手已經不是眾人所知的那個短視頻娛樂平臺了。 可靈AI視頻的風口尚未過去,又推出了LivePortrait--開源的數字人項目。LivePortrait讓你的照片動起來,合成逼真的動態人像視頻,阿里通義EMO不再是唯一選擇。 讓圖像動起來 LivePortrait 主要提供了對眼睛和嘴唇動作的…