監視 AWS Fargate

Instana 支援具有兩種啟動類型的 AWS Elastic Container Service (ECS): Fargate 和 Elastic Compute Cloud (EC2)。

若要監視在 AWS Fargate 上執行的容器化應用程式,請安裝 Fargate 收集器,如 設定 Instana Fargate 收集器 小節中所述。 您不需要安裝主機代理程式。

如果要將 AWS ECS 與啟動類型 EC2搭配使用,請參閱 在 EC2上的 AWS ECS 中安裝主機代理程式

附註: 不支援 Elastic Kubernetes 服務 (EKS) 上的 AWS Fargate。

設定 Instana Fargate 收集器

為了監視在 AWS Fargate 上執行的應用程式, Instana 使用下列 Fargate 收集器:

設定這些收集器,讓 Instana 開始監視。

Node.js

Node.js Fargate 收集器是透過包含收集器檔案及起始設定 Script 的 Docker 代理程式映像檔層來遞送。

  • 如果您的應用程式是使用 CommonJS來開發,請遵循 CommonJS 小節中的步驟來設定 Node.js Fargate 收集器。

  • 如果您的應用程式是在 ECMAScript 模組中開發,請遵循 ECMAScript 模組 一節中的步驟來設定 Node.js Fargate 收集器。

CommonJS

  1. 將下列行新增至 Dockerfile 最後一個 FROM 子句之後的任何位置:

    COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
    RUN /instana/setup.sh
    ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"
    
  2. 建置容器,並將它推送至您選擇的映像檔儲存庫。

  3. 完成 配置作業定義中說明的配置步驟。

ECMAScript 模組

  1. 將下列行新增至 Dockerfile 最後一個 FROM 子句之後的任何位置:

    COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
    RUN /instana/setup.sh
    ENV NODE_OPTIONS="--experimental-loader=/instana/node_modules/@instana/aws-fargate/esm-loader.mjs"
    
  2. 建置容器,並將它推送至您選擇的映像檔儲存庫。

  3. 完成 配置作業定義中說明的配置步驟。

附註:

  • 如果您使用 多階段建置 (亦即,如果 Dockerfile中有多個 FROM 子句) ,請在 Dockerfile的最後一個 FROM 子句之後新增這些行。
  • 不支援 AWS Fargate 中 Node.js 程序的 自動側寫

版本化

不論現行主要版本為何, icr.io/instana/aws-fargate-nodejs:latest Docker 映像檔都會使用最新可用的映像檔版本。 例如,如果已發行主要版本 4 ,且目前您的映像檔版本是 3 ,則在下一次重建時,如果您使用標籤 :latest,則映像檔會自動更新為第 4 版。

附註: 如果您不想要最新映像檔版本可用,請使用主要映像檔版本 (例如 icr.io/instana/aws-fargate-nodejs:1 (第 1 版)) ,並手動更新至下一個主要版本。

如需相關資訊,請參閱 Node.js 版本化

建置相依關係和原生附加程式

如果您對 Node.js 容器使用最小基本映像檔 (沒有建置原生 Node.js 附加程式所需的套件) ,您可以在 Docker 建置中看到下列警告:

gyp ERR! ...some error message from trying to rebuild native add-ons, for example:
gyp ERR! stack Error: Could not find any Python installation to use
...
Warning: Rebuilding native add-ons for @instana/fargate failed. Monitoring the Fargate tasks will work nonetheless, but you will miss some Node.js metrics (GC metrics, event loop metrics, ...). See https://www.instana.com/docs/ecosystem/aws-fargate/#build-dependencies-and-native-add-ons for details."

日誌訊息暗示 Instana 會監視您的 Node.js Fargate 作業,但它可能遺失某些度量值。 為了避免失去度量值,請在建置期間至少暫時安裝遺漏的作業系統套件。 這些套件可以在最終映像檔中排除。 套件類型及安裝方式視您的發行套件而定。

請參閱下列適用於 Linux Alpine的範例 Dockerfile Snippet:

COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
RUN apk add --no-cache --virtual .gyp \
        build-base \
        python \
    && /instana/setup.sh \
    && apk del .gyp python
ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"

請參閱下列基於 Debian的發行套件範例 (包括 Ubuntu):

COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
RUN apt-get update \
    && apt-get install build-essential \
    && /instana/setup.sh \
    && apt-get remove -y build-essential
ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"

對於使用 yum 套件管理程式 (例如 CentOS 和 RHEL) 的發行套件,請執行下列指令來安裝必要的套件:

RUN yum groupinstall "Development Tools"

從 containers.instana.io 取得 Node.js 層

Docker 層在 IBM 儲存器登錄上公開可用。 您可以從它取得 Node.js Instana Fargate 映像檔層。 或者,您也可以從 containers.instana.io 登錄取得映像檔層。 例如,如果您也搭配使用 Instana Fargate 支援與其他執行時期 (例如 Java ®) ,且映像檔層只適用於已鑑別登錄 containers.instana.io,且您想要一致性,則可以從 containers.instana.io 而非 IBM 容器登錄取得 Node.js 映像檔層。

若要從 containers.instana.io 登錄取得 Node.js 映像檔層,請完成下列步驟:

  1. 因為 containers.instana.io 登錄需要鑑別,所以在 Docker 建置中使用它之前,請先執行下列指令:

    docker login -u _ -p <your-agent-key> containers.instana.io
    

    將位置保留元 <your-agent-key> 取代為您建置 Docker 映像檔所在系統上的 Instana 代理程式金鑰。

  2. 將下列行新增至 Dockerfile 最後一個 FROM 子句之後的任何位置:

    COPY --from=containers.instana.io/instana/release/aws/fargate/nodejs:latest /instana /instana
    RUN /instana/setup.sh
    ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"
    

.NET Core

在 Fargate 儲存器中提供 .NET Core 追蹤的方式,與任何其他 .NET Core 儲存器化應用程式的方式相同。 您有兩個選項:

在開發期間安裝 NuGet 套件

若要在開發期間安裝 NuGet 套件,您必須在設計時將重新編寫程式及受管理追蹤延伸的 NuGet 套件新增至專案,或在準備容器映像檔時完成下列步驟作為建置的一部分:

  1. 安裝重新編寫程式
  2. 安裝追蹤套件
  3. 配置 .NET Core 作業定義
安裝重新編寫程式

視支援儲存器的 OS 而定,您必須選擇下列其中一個重新編寫程式套件,這些套件是從原生程式碼和目標特定系統程式庫所建置:

安裝追蹤套件

這些套件也會安裝在發行重新編寫程式套件時可用的追蹤套件最新版本。 不過,請新增 .NET Core 的 Instana 追蹤套件 ,以進一步控制您應用程式使用的追蹤套件版本。

配置 .NET Core 作業定義

遵循 配置作業定義中說明的配置步驟,來設定下列環境變數:

  • CORECLR_ENABLE_PROFILING=1
    此設定會啟用 .NET Core 側寫。
  • CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd}
    此設定會設定要使用之側寫程式的 clsid
  • CORECLR_PROFILER_PATH=/app/instana_tracing/CoreProfiler.so
    此設定指向包含側寫程式的程式庫,該側寫程式假設 app 是應用程式的路徑。
  • DOTNET_STARTUP_HOOKS=/app/Instana.Tracing.Core.dll
    此設定會設定自行包含 .NET Core 應用程式的度量收集及支援。

在 Docker 建置中安裝 NuGet 套件

若要在 Docker 容器中安裝 NuGet 套件,請完成下列步驟:

  1. 如果您使用以 Alpine Linux為基礎的容器映像檔,請將第一行取代為使用 Alpine 的適當 NuGet 套件字尾,如下列範例所示。 否則,請使用 Linux

    # after building the project, right before publishing, add the nuget-packages
    RUN dotnet add <project_name>.csproj package Instana.Tracing.Core.Rewriter.<Linux|Alpine> --version <min-version 1.0.56>
    RUN dotnet add <project_name>.csproj package Instana.Tracing.Core --version <min-version 1.1.46>
    RUN dotnet publish -c Release -o out
    
    # where the files will end up
    WORKDIR /app
    COPY --from=publish /src/out .
    
    # set the env-vars as discussed above
    ENV CORECLR_ENABLE_PROFILING=1
    ENV CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd}
    ENV CORECLR_PROFILER_PATH=/app/instana_tracing/CoreProfiler.so
    ENV DOTNET_STARTUP_HOOKS=/app/Instana.Tracing.Core.dll
    
    ... # Other stuff in your Docker image
    
  2. 遵循 配置作業定義中說明的配置步驟。

Go

Go Fargate 收集器包含在 github.com/instana/go-sensor 1.14.0 以及更新版本中。 除了設定 配置作業定義 小節中說明的環境變數之外,此收集器不需要額外配置。 追蹤程式會偵測應用程式是否在 AWS Fargate 上執行,並自動啟動 Fargate 收集器。

Ruby

Ruby Fargate 收集器包含在 github.com/instana/ruby-sensor 1.197.0 以及更新版本中。 此收集器使用 配置作業定義 小節中說明的標準配置。 追蹤程式會偵測應用程式是否在 AWS Fargate 上執行,並自動啟動 Fargate 收集器。

Java

Java ® Fargate 收集器透過包含收集器檔案的 Docker 代理程式映像檔遞送。

containers.instana.io 登錄中提供 Docker 層。 若要從 Docker 登錄取得 Java 映像檔層,請完成下列步驟:

  1. 因為 Docker 登錄需要鑑別,所以請先使用代理程式金鑰登入登錄,然後再使用 Docker 建置中的登錄:

    docker login -u _ -p <your-agent-key> containers.instana.io
    

    將位置保留元 <your-agent-key> 取代為您建置 Docker 映像檔所在系統上的實際 Instana 代理程式金鑰。

  2. 將下列行新增至 Dockerfile 最後一個 FROM 子句之後的任何位置:

    COPY --from=containers.instana.io/instana/release/aws/fargate/jvm:latest /instana /instana
    ENV JAVA_TOOL_OPTIONS="-javaagent:/instana/instana-fargate-collector.jar"
    
  3. 建置容器,並將它推送至您選擇的映像檔儲存庫。

  4. 遵循 配置作業定義一節中說明的配置步驟。

附註:

  • 如果您使用 多階段建置 (亦即,如果您在 Dockerfile中有多個 FROM 子句) ,請在 Dockerfile 最後一個 FROM 子句之後新增下列幾行。

  • 不支援 AWS Fargate 中 Java 處理程序的 自動側寫

密鑰

Java Fargate 收集器支援刪除密鑰,類似於 主機代理程式

您可以指定密鑰的型樣,即從追蹤及處理程序詳細資料中過濾資料。 視為密鑰的資料不會到達 Instana SaaS 進行處理,因此無法在 Instana 使用者介面中進行分析或使用 API 進行擷取。

密鑰由環境變數 INSTANA_SECRETS 使用下列格式來定義:

<matcher>:<secret>[,<secret>]

matcher 可以是下列其中一個值,並具有所提供密鑰的個別語意:

equals-ignore-case, equals, contains-ignore-case, contains, regex

如果未配置任何密鑰,則會使用預設密鑰。 已啟用下列設定來取得密鑰:

INSTANA_SECRETS=contains-ignore-case:key,password,secret

如果金鑰符合密鑰清單中的項目,則會編寫該值,且不會傳送至 Instana 後端。

基礎架構和平台層次的密碼是程序環境變數。

執行時期的密鑰:

  • JDBC 連線字串
  • HTTP 查詢參數,例如 https://my.domain/accounts/status?account=<secret_1>&user=<secret_2> (針對所有支援的執行時期,請參閱下列支援矩陣)
  • HTTP 矩陣路徑參數,例如 https://my.domain/accounts/account=<secret_1>;user=<secret_1>/status

附註

  • Instana 不支援將 URL 路徑中的任意區段視為密碼。 例如,如果 URL 結構化為 https://my.domain/accounts/<secret>/status。 例如,在 URL 路徑上執行正規表示式以捨棄區段的額外負擔是令人難以負擔的。

  • Instana 不會從儲存程序擷取 SQL 參數。 同樣地,對於任意路徑區段,不會刪除 SQL 查詢中的文字; 請使用參數化查詢。

Java 追蹤 SDK

Java Fargate 收集器支援 Java 追蹤 SDK,類似於代理程式。 不過, Java Fargate 收集器由環境變數 INSTANA_INSTRUMENTATION_SDK_PACKAGES 啟動,而不是由代理程式配置啟動。

有關使用 Java 追蹤 SDK 的詳細資訊,請參閱其 說明文件頁面

INSTANA_INSTRUMENTATION_SDK_PACKAGES 可以包含已啟動 SDK 的 Java 套件名稱清單 (以逗點區隔)。 例如,

INSTANA_INSTRUMENTATION_SDK_PACKAGES=my.first.package,my.second.package

Python

Python Fargate 收集器包含在標準 Instana Python 套件 1.25.0 以及更新版本中。 除了設定 配置作業定義 小節中說明的環境變數之外,收集器不需要額外配置。 套件會偵測應用程式正在 AWS Fargate 上執行,並自動啟動 Fargate 收集器。

配置作業定義

附註:

  • 在 AWS Fargate 上設定所有 Instana 收集器時,通常會提供配置作業定義的指示。

  • 在配置作業定義之前,請確定已根據應用程式所使用執行時期的特定指示來建置儲存器映像檔。

  • 如果您的應用程式是以 .NET Core 為基礎,且您要在開發時期安裝 Instana NuGet 套件,如 在開發期間安裝 NuGet 套件中所述,請確定您已在作業定義中設定 配置 .NET Core 作業定義 中列出的環境變數。

AWS Fargate 上的所有 Instana 收集器都需要一組共用配置值,才能連接及鑑別 Instana 後端。 若要配置作業定義,請完成下列步驟:

  1. 登入 AWS 主控台,然後跳至 ECS。

  2. 在導覽畫面中,按一下 作業定義

  3. 在作業定義配置頁面中,按一下 建立新的修訂 ,以建立作業定義的修訂:

    建立作業定義修訂

  4. 移至 Node.js-based 儲存器的儲存器定義:

    編輯儲存器定義

  5. 將下列兩個環境變數新增至儲存器規格:

    • INSTANA_ENDPOINT_URL: 此環境變數是您的 無伺服器監視端點。 請確定您對以 https://serverless-開頭的地區使用正確的值。
    • INSTANA_AGENT_KEY: 此環境變數是您的 代理程式金鑰

    您也可以移至 Instana 使用者介面,並按一下 其他 > 代理程式 > 安裝 Instana 代理程式 > 平台: "AWS" > 技術 AWS Fargate,以取得這些環境變數的正確值。

    在儲存器中設定環境變數

如需 AWS Fargate 收集器支援之環境型配置的相關資訊,請參閱 一般參照-環境變數