Node.js 收集器配置
在大部分使用案例中,只要使用 require('@instana/collector')(); 來起始設定 Instana Node.js 收集器,並保留預設配置選項即可。 您也可以在起始設定 Instana Node.js 收集器時傳入配置物件:
require('@instana/collector')({
// configuration options, see as follows
});
此外,您可以透過環境變數來配置 Node.js 收集器。
代理程式通訊
代理程式主機
收集器會嘗試透過 IP 127.0.0.1 與 Instana 代理程式通訊,並作為透過主機預設閘道的撤回。 如果代理程式在其中一個 IP 下無法使用,您可以使用 agentHost 選項來使用自訂 IP。
require('@instana/collector')({
agentHost: '::1' // use IPv6 to contact via localhost
});
或利用環境變數。
require('@instana/collector')({
agentHost: process.env.HOST_IP
});
如果未配置, Instana 收集器會尋找稱為 INSTANA_AGENT_HOST 的環境變數,並使用此環境變數中定義的內容來與代理程式進行通訊。 如果沒有此類環境變數,則會嘗試先在 localhost 上聯絡代理程式,然後在預設閘道上聯絡代理程式。
代理程式埠
收集器會嘗試透過埠 42699與 Instana 代理程式進行通訊。 如果埠已變更,您可以使用 agentPort 選項來變更埠。
require('@instana/collector')({
agentPort: 42699
});
如果未配置, Instana 收集器會尋找稱為 INSTANA_AGENT_PORT 的環境變數,並使用此環境變數中定義的內容來與代理程式進行通訊。 如果沒有此類環境變數,則會撤回至預設埠 42699。
Kubernetes & OpenShift
如果 Node.js 應用程式及 Instana 代理程式在 Kubernetes 叢集裡執行,請檢查 Kubernetes 網路存取權 上的說明文件,以取得此設定中必要配置的相關資訊。
追蹤
依預設會啟用追蹤特性。 若要停用它,請將下列選項傳遞至起始設定功能:
require('@instana/collector')({
tracing: {
enabled: false
}
});
您也可以透過設定環境變數 INSTANA_DISABLE_TRACING=true來停用追蹤。
當停用追蹤時,您既無法使用追蹤 SDK ,也無法使用 OpenTracing API ,而且也會停用自動追蹤。 將無聲自動忽略使用 SDK 或 OpenTracing 的呼叫。
停用自動追蹤
依預設也會啟用自動追蹤。 若只要停用自動追蹤 (保留透過 SDK 或 openTracing 啟用的手動追蹤) ,請將下列選項傳遞至起始設定功能:
require('@instana/collector')({
tracing: {
automaticTracingEnabled: false
}
});
最後,您可以透過設定環境變數 INSTANA_DISABLE_AUTO_INSTR=true來停用自動追蹤。
停用自動追蹤時,您仍然可以使用 SDK 或 OpenTracing API 來手動建立文字段。
停用 OpenTelemetry 整合
依預設會啟用 Opentelemery 整合 。 若要停用整合,請將下列選項傳遞至起始設定功能:
require('@instana/collector')({
tracing: {
useOpentelemetry: false
}
});
此外,您可以將 INSTANA_DISABLE_USE_OPENTELEMETRY 變數設為 true,以停用 OpenTelemetry 整合。 如需相關資訊,請參閱 Instana 環境變數。
擷取堆疊追蹤
依預設,收集器會針對每個擷取的結束跨距擷取最後十個呼叫站台。 此值可以視需要增加及減少。 (請注意,不會收集 HTTP 項目跨距的堆疊追蹤資料-它們只會顯示 Node.js 核心程式碼。) 使用 0 值來停用堆疊追蹤擷取。
require('@instana/collector')({
tracing: {
stackTraceLength: 10
}
});
您也可以設定環境變數 INSTANA_STACK_TRACE_LENGTH來配置堆疊追蹤長度。
配置自訂 package.json 路徑
Instana 收集器會嘗試在專案內尋找主要 package.json 檔,以擷取重要資訊,例如您應用程式的名稱。 如果您需要為 package.json 檔案定義自訂路徑,或者如果收集器找不到該檔案,則可以使用名為 packageJsonPath的配置選項。
require('@instana/collector')({
packageJsonPath: 'absolute/path/to/package.json'
});
您也可以透過設定 INSTANA_PACKAGE_JSON_PATH 環境變數,來配置 package.json 檔案的路徑。
停用個別追蹤程式
自: 1.80.0
您可以停用個別追蹤檢測。 這只應該在特殊情況下使用或用於疑難排解。
require('@instana/collector')({
tracing: {
disabledTracers: ['graphql', 'grpc']
}
});
或者,您也可以將環境變數 INSTANA_DISABLED_TRACERS 設為您要停用的追蹤程式清單 (以逗點區隔) 來保存:
INSTANA_DISABLED_TRACERS=graphql,grpc
可能的值 (不區分大小寫):
amqp: 停用 RabbitMQ/amqp 追蹤之amqplib套件的檢測。bunyan: 針對 Bunyan 警告/錯誤日誌訊息收集,停用bunyan套件的檢測。db2: 停用 IBM DB2 追蹤之ibm_db套件的檢測。couchbase: 停用couchbase套件的檢測,以進行 Couchbase 追蹤。elasticsearchLegacy: 停用elasticsearch套件的檢測,以進行 Elasticsearch 追蹤 (舊式用戶端)。elasticsearchModern: 停用@elastic/elasticsearch套件的檢測,以進行 Elasticsearch 追蹤 (現代用戶端)。express: 停用 Express 路徑範本集合的express套件檢測。fastify: 針對 Fastify 路徑範本集合,停用fastify套件的檢測。graphql: 停用套件graphql和@apollo\/gateway的檢測,以進行 GraphQL 追蹤。grpc: 停用grpc套件的檢測,以進行 gRPC 追蹤。grpcjs: 停用@grpc/grpc-js套件的檢測,以進行 JavaScript gRPC 追蹤。hapi: 針對 Hapi 的路徑範本集合,停用@hapi/call套件的檢測。httpClient: 停用核心http和https模組的檢測,以追蹤送出的 HTTP (S) 呼叫 (結束程式)。httpServer: 停用核心http和https模組的設備測試,以追蹤送入的 HTTP (S) 呼叫 (項目)。ioredis: 停用ioredis套件的檢測以進行 Redis 追蹤 (另請參閱選項redis)。kafkaJs: 停用對kafkajs套件進行檢測以進行 Kafka 追蹤 (另請參閱選項kafkaNode)。kafkaNode: 停用對kafka-node套件進行檢測以進行 Kafka 追蹤 (另請參閱選項kafaJs)。koa: 停用 Koa 路徑範本集合的koa-router套件檢測。log4js: 停用log4js套件的檢測,以進行警告/錯誤日誌訊息收集。mongodb: 停用mongodb/mongodb-core套件的檢測,以進行 MongoDB 追蹤。mssql: 停用mssql套件的檢測,以進行 MSSQL 追蹤。mysql: 停用mysql及 `mysql2' 套件的檢測,以進行 MySQL 追蹤。natsStreaming: 停用node-nats-streaming套件的檢測,以進行 NATS 串流 (但不是 NATS) 追蹤 (另請參閱選項nats)。nats: 停用nats套件的檢測,以進行 NATS (但不是 NATS 串流) 追蹤 (另請參閱選項natsStreaming)。pgNative: 停用pg-native套件的檢測以進行 PostgreSQL 追蹤 (另請參閱選項pg)。pg: 停用pg套件的檢測,以進行 PostgreSQL 追蹤 (另請參閱選項pgNative)。pino: 停用pino套件的檢測,以進行警告/錯誤日誌訊息收集。redis: 停用redis套件的檢測以進行 Redis 追蹤 (另請參閱選項ioredis)。winston: 停用winston套件的檢測,以進行警告/錯誤日誌訊息收集。
服務命名
服務是 Instana 內的中心概念。 呼叫、跨距及追蹤會與服務密切相關。 依預設, Node.js 收集器會使用主要 package.json 檔中的 name 及 version 屬性。 若要自訂服務名稱,您可以配置 serviceName 內容。
require('@instana/collector')({
serviceName: 'shop'
});
您也可以透過設定環境變數 INSTANA_SERVICE_NAME來配置自訂服務名稱。
Kafka 追蹤相關性標頭
您可以配置 Node.js 追蹤器與環境變數 INSTANA_KAFKA_HEADER_FORMAT搭配使用之 Kafka 追蹤相關性標頭的格式。 有效值為 binary、 string或 both。 您也可以使用 INSTANA_KAFKA_TRACE_CORRELATION=false完全停用 Kafka 追蹤相關性,但不建議這樣做。
這兩個選項也可以在應用程式碼中配置,如下所示:
require('@instana/collector')({
tracing: {
kafka: {
// valid options: 'binary', 'string', or 'both'
headerFormat: 'string',
// valid options: true or false
traceCorrelation: true
}
}
});
另一個替代方案是在 Instana 主機代理程式層次配置 Kafka 追蹤相關性選項。
如需相關資訊,請參閱 Kafka 標頭移轉。
設定處理程序名稱
使用環境變數 INSTANA_PROCESS_NAME ,為代表 Node.js 程序的基礎架構實體設定自訂標籤。
報告未處理的 Promise 拒絕
Instana Node.js 收集器可以將 未處理的承諾拒絕 報告為 Instana 的問題。 未處理的承諾拒絕是指已拒絕但尚未定義拒絕處理程式的承諾 (亦即,承諾鏈沒有 .catch(...))。
依預設會停用此功能。 如果已啟用,且偵測到未處理的承諾拒絕,則會報告為對 Instana 的嚴重性「警告」問題。
請注意,由於未處理的拒絕,未將拒絕承諾時正在進行的呼叫標示為錯誤。 原因有二:
- 未處理的拒絕不會在 Node.js 運行環境中造成錯誤。 即使在處理要求期間發生未處理的拒絕,仍然可以順利處理要求。
- Node.js 執行時期無法偵測未處理的拒絕 在特定呼叫的環境定義中。 事實上,只有在稍後當相關聯的承諾即將被垃圾回收時,才會偵測到未處理的拒絕。 此時,觸發未處理拒絕的要求已完成且已回應。
可以使用選項 reportUnhandledPromiseRejections來啟用此功能,如下所示:
require('@instana/collector')({
reportUnhandledPromiseRejections: true
});
從 Node.js 12.0.0開始,有一個指令行旗標 --unhandled-rejections 可控制如何處理未處理的承諾拒絕。 --unhandled-rejections=strict不支援報告未處理的拒絕,因為在此模式中, Node.js 會將未處理的拒絕轉換為未處理的異常狀況。
記載
記載層次配置
如果您想要變更預設記載層次,您可以透過下列方式來配置:
require('@instana/collector')({
level: 'debug'
});
您也可以將環境變數 INSTANA_LOG_LEVEL 設為 debug、 info、 warn 或 error,來配置記載層次。 最後,將 INSTANA_DEBUG 設為任何非空字串會將記載層次設為 debug。
請注意,預設記載層次是 info。 如果您看到非預期的 Instana 相關除錯日誌 (包括 "name":"@instana/collector" 和 "level":20在內的日誌行) ,請檢查您是否已在配置中設定要除錯的記載層次,如上述所示,或者是否已設定 INSTANA_LOG_LEVEL=debug 或 INSTANA_DEBUG 。 如果您提供自己的日誌程式 (請參閱如下所示) ,則會根據需要負責設定日誌程式上的記載層次。
自訂 (母項) 日誌程式
請參閱 設定日誌程式。
AutoProfile™
自: 1.98.1。 至少需要 Node.js 6.4.0
此特性目前處於測試版測試階段。
起始設定收集器時啟用 AutoProfile™ add autoProfile: true 選項。
require('@instana/collector')({
autoProfile: true
});
您也可以將環境變數 INSTANA_AUTO_PROFILE 設為 true ,以啟用 AutoProfile™ 。
自動聚集短結束呼叫
自: 1.108.0。
The Node.js tracer supports 自動聚集 of very short (< 10 ms), high frequency database calls. 這有助於在快速連續執行這類呼叫的情況下,將追蹤的效能額外負擔維持在最低。 目前此功能是接受且需要明確啟用。 它將成為其中一個後續版本中的預設行為。
若要立即啟用它,可以使用下列三種方法中的任何一種:
- 設定環境變數
INSTANA_SPANBATCHING_ENABLED=true。 - 使用程式碼內配置:
require('@instana/collector')({ tracing: { spanBatchingEnabled: true } }); - 將此新增至代理程式的
configuration.yaml:com.instana.plugin.nodejs: span-batching-enabled: true
請注意,當行為依預設變成開啟時,將會忽略這些配置選項。
由於此特性的運作方式,啟用此選項可能會影響端點擷取,從而變更對部分低延遲資料庫端點的呼叫數。
停用撤回至預先建置的原生附加程式
如果在 npm install 指令執行時未順利安裝 原生附加程式相依關係 (例如 gcstats.js 和 event-loop-stats ) ,套件 @instana/collector 會自動嘗試使用符合作業系統 Node.js 版本及 libc 變式的預先建置二進位檔。 此功能僅在 x64 Linux上可用。 您可以設定 INSTANA_COPY_PRECOMPILED_NATIVE_ADDONS=false來停用它。
完整配置參照
以下是所有可能的配置值及其預設值:
{
agentHost: '127.0.0.1',
agentPort: 42699,
serviceName: null,
packageJsonPath: null,
// the log level:
level: 'info',
tracing: {
enabled: true,
automaticTracingEnabled: true,
// Spans are batched and sent to the agent once every second, or if ${forceTransmissionStartingAt} spans have been collected (whichever happens earlier)
forceTransmissionStartingAt: 500,
// If more than ${maxBufferedSpans} have been buffered and the collector has not been able to send them to the agent, it will start to drop spans to avoid causing memory issues.
maxBufferedSpans: 1000,
http: {
// This is usually configured at the agent level (configuration.yaml).
extraHttpHeadersToCapture: []
},
// How many stack trace frames are to be captured. Can also be 0 to disable collecting stack traces.
stackTraceLength: 10,
// To disable individual tracing plug-ins.
disabledTracers: [],
// Can also be configured at the agent level (configuration.yaml).
spanBatchingEnabled: false
},
metrics: {
timeBetweenHealthcheckCalls: 3000
},
// This is usually configured at the agent level (configuration.yaml).
secrets: {
matcherMode: 'contains-ignore-case',
keywords: ['key', 'pass', 'secret']
},
autoProfile: false
}
下列是 Node.js 收集器支援的所有環境變數清單:
| 環境變數 | 對等配置選項 |
|---|---|
INSTANA_AGENT_HOST |
config.agentHost |
INSTANA_AGENT_PORT |
config.agentPort |
INSTANA_SERVICE_NAME |
config.serviceName |
INSTANA_PACKAGE_JSON_PATH |
config.packageJsonPath |
INSTANA_PROCESS_NAME |
– |
INSTANA_DISABLE_TRACING=true |
config.tracing.enabled = false |
INSTANA_DISABLE_AUTO_INSTR=true |
config.tracing.automaticTracingEnabled = false |
INSTANA_DISABLED_TRACERS |
config.tracing.disabledTracers |
INSTANA_STACK_TRACE_LENGTH |
config.tracing.stackTraceLength |
INSTANA_LOG_LEVEL |
config.level |
INSTANA_DEBUG |
config.level = debug |
INSTANA_AUTO_PROFILE=true |
config.autoProfile = true |
INSTANA_SPANBATCHING_ENABLED=true |
config.tracing.spanBatchingEnabled = true |
INSTANA_TRACE_IMMEDIATELY=true |
config.tracing.activateImmediately = true |
INSTANA_COPY_PRECOMPILED_NATIVE_ADDONS |
– |