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: 停用核心 httphttps 模組的檢測,以追蹤送出的 HTTP (S) 呼叫 (結束程式)。
  • httpServer: 停用核心 httphttps 模組的設備測試,以追蹤送入的 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 檔中的 nameversion 屬性。 若要自訂服務名稱,您可以配置 serviceName 內容。

require('@instana/collector')({
  serviceName: 'shop'
});

您也可以透過設定環境變數 INSTANA_SERVICE_NAME來配置自訂服務名稱。

Kafka 追蹤相關性標頭

您可以配置 Node.js 追蹤器與環境變數 INSTANA_KAFKA_HEADER_FORMAT搭配使用之 Kafka 追蹤相關性標頭的格式。 有效值為 binarystringboth。 您也可以使用 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 的嚴重性「警告」問題。

請注意,由於未處理的拒絕,未將拒絕承諾時正在進行的呼叫標示為錯誤。 原因有二:

  1. 未處理的拒絕不會在 Node.js 運行環境中造成錯誤。 即使在處理要求期間發生未處理的拒絕,仍然可以順利處理要求。
  2. 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 設為 debuginfowarnerror,來配置記載層次。 最後,將 INSTANA_DEBUG 設為任何非空字串會將記載層次設為 debug

請注意,預設記載層次是 info。 如果您看到非預期的 Instana 相關除錯日誌 (包括 "name":"@instana/collector""level":20在內的日誌行) ,請檢查您是否已在配置中設定要除錯的記載層次,如上述所示,或者是否已設定 INSTANA_LOG_LEVEL=debugINSTANA_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.jsevent-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

另請參閱