使用 Amazon Web Services (AWS) 代理程序监视 Amazon Web Services (AWS)

为了监控由 AWS 管理的服务, Instana 需要从 AWS 的 API(例如 CloudWatch,、 S3 和 X-Ray)收集数据,而这些 API 无法安装主机代理或其他类型的代理。

不过,可以通过特定方式配置 Instana 主机代理,以监控由 AWS 管理的服务。 专门用于监控 AWS 服务的、经过特定配置的主机代理称为 AWS 代理。 建议您将 AWS 代理安装在专用主机上。 此外,请确保每个 AWS 区域中至少有一个 AWS 代理可用。

安装 AWS 代理程序后,可以在受支持的 AWS 服务中获取数据,但您无权访问为服务提供支持的基础结构。

注:
  • 要监控 Amazon Elastic Computing( EC2 )虚拟机、在 AWS 上运行的 Kubernetes 集群(无论是由您自行安装和管理,还是使用 Amazon Elastic Kubernetes Service 管理),或是 Amazon Elastic Container 集群,您需要使用 Instana 主机代理,而不是 AWS 代理。 有关主机代理程序安装步骤的更多信息,请参阅 平台 部分中的主题。
  • 要在 Kubernetes 或 Red Hat OpenShift 集群中监控 AWS ,请勿在集群的每个节点上安装 Instana AWS 代理。 在专用主机上安装 AWS 代理。
  • 迁移至 AWS SDK v2
    1. AWS 已于2025年12月31日正式终止对 AWS SDK( v1 ) 的支持。 Instana 正在将所有 AWS 传感器和发现组件迁移至 AWS SDK v2 ,以确保持续获得安全更新、提升性能,并能使用最新的 AWS 功能。
    2. 要完成迁移,您需要重启或升级 Instana 代理。 该迁移流程旨在实现无缝衔接,不会出现监控缺口,且无需进行任何配置更改。

    有关基于您的部署类型(主机部署、 Docker 或 Kubernetes )的迁移说明的更多信息,请参阅《从 AWS SDK v1 迁移至 AWS SDK v2 》。

受监控的服务

要监控由 AWS 管理的以下服务,请按照 “安装 AWS 代理 ”一节中的说明,安装 Instana AWS 代理:

注:
鉴于 AWS CloudWatch API 的特性,指标检索可能会出现延迟。 显示的指标也会延迟,以确保一致性。 此延迟取决于实际的 AWS 服务和数据的可用性,但通常是 10 分钟左右。

安装 AWS 代理

您可以在 EC2 上或在 ECS 上的 Fargate 上安装 AWS 代理程序。

注:

  • 根据云环境中受监视实体的数量,您可能需要增加主机代理程序的最大可用内存量。 您可以通过将环境变量 AGENT_MAX_MEMMiB 的值设置为大于默认值544来增加代理的内存。 例如,要将代理程序内存设置为 1 GB ,可以设置 AGENT_MAX_MEM=1024M

  • 针对 AWS 帐户和 AWS 区域的组合,仅安装一个 AWS 代理程序。 为 AWS 帐户和 AWS 区域的相同组合安装多个 AWS 代理程序,可能会从 AWS 产生额外的成本,而在使用 Instana 进行监视的质量方面没有额外的好处。

在 EC2 上安装

您可以在 Windows 上安装 AWS 代理,或在 EC2 上安装 Linux。 建议在运行 Linux® 的当前代通用型机器上运行 Instana AWS 代理。例如, m5.large 实例是理想的选择。

注:
如果您在 Windows 上安装了 AWS 代理,即使 Windows 服务器托管在 AWS 中,您仍需完成“在 AWS 基础设施之外进行安装”一节中的配置。
  1. 在 Instana 用户界面中,点击 “更多” > “代理” > “安装代理 ”>“ AWS ”。

  2. 技术列表中,选择 Instana AWS 传感器

  3. “运行 AWS 代理” 列表中,选择“ Elastic Cloud Compute ( EC2 ) ”(这是默认选项)。

    在脚本中预先填充了您的代理程序密钥和位置,以用作 EC2 上的 User Data。 复制显示的脚本。 该脚本如下所示,只是提供了所有必需的信息:

    #!/bin/bash
    
    curl -o setup_agent.sh https://setup.instana.io/agent
    chmod 700 ./setup_agent.sh
    sudo -E ./setup_agent.sh --assume-yes --agent-key <your-agent-key> --agent-mode aws --agent-type dynamic --endpoint <location> --enable-agent-service
  4. 启动专用 EC2 虚拟机,并将复制的脚本用作 User Data。 有关如何在 EC2 上 User Data 使用 的更多信息,请参阅 Launch 文档中的《在您的 Linux 实例上运行命令》。

  5. IAM 角色 主题的代码块中的配置复制到 IAM_permission.json 文件。 这些配置用于为运行 Instana AWS 代理的 EC2 虚拟机配置所需的 IAM 角色,并使 AWS 代理能够发现和监控您的 AWS 资源。 然后,使用 IAM_permission.json 文件创建 IAM 角色。 如需了解更多信息,请参阅《 创建角色以向 IAM 用户授予权限》。

  6. 要让 IAM 角色执行该 AssumedRole 操作,请 Trust Relationship 按以下方式编辑(在 Instana 界面中显示 trust_relationship.json 为):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
     

    如果代理程序运行在无法访问互联网的 EC2 机器上,请 Trust Relationship 按以下方式编辑:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "ec2.amazonaws.com.cn"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
     

    有关其他必要的配置,请参阅《 设置 STS 区域端点》。

在 ECS 的 Fargate 上进行安装

您可以在 ECS 上的 Fargate 环境中,通过 Windows 或 Linux 安装 AWS 代理。

注:
如果您在 Windows 上安装了 AWS 代理,即使 Windows 服务器托管在 AWS 中,您仍需完成“在 AWS 基础设施之外进行安装”一节中的配置。
  1. 在 Instana 用户界面中,点击 “更多” > “代理” > “安装代理 ”>“ AWS ”。

  2. 技术列表中,选择 Instana AWS 传感器

  3. 运行 AWS Agent on 列表中,选择 Elastic Container Service (ECS)

    任务定义 JSON 模板中会预先为您生成任务定义的 JSON。 下载 JSON 文件,并通过任务定义用户界面的 “使用 JSON 函数进行配置”功能进行配置。

  4. 下载 IAM 权限文件 JSON ,并将一个包含至少下载的 JSON 文件中所列权限的 IAM 角色分配给新的任务定义。

  5. 使用新创建的任务定义的一个实例创建 ECS 服务。

配置

在您的 AWS 基础设施之外进行安装

还可以专用于在 AWS 基础结构外部运行的任何代理程序。 为了实现此目标,需要在 setenv 文件中指定以下环境变量:

  • 在 Linux 上:
    /opt/instana/agent/bin/setenv
  • 在 Windows 上:
    C:\Program Files\Instana\instana-agent\bin\setenv
  • 您希望监视的区域:
    INSTANA_AWS_REGION_CONFIG=
  • 用于访问 AWS 资源的凭证。 这些凭证应该属于一个用户,该用户有权访问 Amazon Web Services IAM 配置部分中已描述的资源。
    AWS_ACCESS_KEY_ID=
    AWS_SECRET_ACCESS_KEY=

代理配置

通过环境变量

要将 AWS 传感器配置为使用代理配置,请在 *instanaAgentDir*/bin/setenv 中指定以下环境变量:

export HTTP_PROXY=
export HTTPS_PROXY=
 
注:
这两个环境变量都必须定义。 在定义后,需要重新引导 Instana 代理程序,才能进行更改。

您可以在该链接中找到有关 HTTP 代理的更多信息。

通过代理 configuration.yaml

要配置 AWS 代理程序以使用代理配置,请添加以下代理程序配置设置:

com.instana.plugin.aws:
  proxy_host: 'example.com' # proxy host name or ip address
  proxy_port: 3128 # proxy port
  proxy_protocol: 'HTTP' # proxy protocol: HTTP or HTTPS
  proxy_username: 'username' # OPTIONAL: proxy username
  proxy_password: 'password' # OPTIONAL: proxy password
  tagging: # proxy setup for AWS Tagging API, used for AWS resource monitoring filtering
    proxy_host: 'example.com' # proxy host name or ip address
    proxy_port: 3128 # proxy port
    proxy_protocol: 'HTTP' # proxy protocol: HTTP or HTTPS
    proxy_username: 'username' # OPTIONAL: proxy username
    proxy_password: 'password' # OPTIONAL: proxy password
 

也可以在单个 AWS 传感器的级别配置代理设置。 在此情况下,先前提及的全局配置将被特定 AWS 传感器配置覆盖。 有关更多信息,请参阅特定 AWS 传感器文档。

设置 STS 区域端点

缺省情况下,Instana 代理程序从 EC2 实例联系全局 STS 端点以收集实例概要文件凭证。 但是,如果 Instana 主机代理运行在无法访问互联网的 EC2 机器上(例如在中国地区),则必须将STS区域端点作为环境变量进行设置,这会指示 Instana 代理使用区域STS端点。

在安装 Instana 代理程序后,在 *instanaAgentDir*/bin/setenv 中指定以下环境变量:

export AWS_STS_REGIONAL_ENDPOINTS=regional
 

启用特定服务的监控

对于每个服务,您需要在各个服务页面上添加所需的许可权,从受监视服务部分链接到这些页面。 要将服务排除在监视之外,请保留相应的许可权。

或者,另一种将服务排除在监视之外的方法是,在 <agent_install_dir>/etc/instana/configuration.yml 中添加相应的已启用标志,如以下各个服务页面中所述。

监控多个 AWS 账户

AWS Instana 代理程序支持来自同一区域中多个 AWS 帐户的监视服务。 目前,有两种方法:使用 AWS 命名概要文件和使用 AWS 安全性令牌服务 (STS)。

注:
在配置 Instana 代理以监控多个 AWS 账户时,应仅使用两种可用方法中的一种。

AWS 命名配置文件方法

若要监控多个账户,您需要像使用 AWS CLI 那样定义命名配置文件,或者手动创建该文件。 必须在正在运行 Instana 代理程序(通常为 root)的用户主目录中创建 .aws/credentials 文件。 AWS CLI 使用凭证文件 ~/.aws/credentials ,如下所示:

[default]
aws_access_key_id = accessKey1
aws_secret_access_key = secretAccessKey1

[profile2]
aws_access_key_id = accessKey2
aws_secret_access_key = secretAccessKey2

[profile3]
aws_access_key_id = accessKey3
aws_secret_access_key = secretAccessKey3
 

每个概要文件都表示 AWS 指定概要文件与 AWS 访问凭证之间的映射。 在安装 AWS 代理程序上,将创建 default AWS 概要文件。 不需要将 default 概要文件添加到 ~/.aws/credentials 文件中。

由 AWS 代理程序使用的其他概要文件必须列示在代理程序配置文件 /opt/instana/agent/etc/instana/configuration.yaml 中,如下所示:

com.instana.plugin.aws:
  profile_names:
    - 'profile2'
    - 'profile3'
 

  • 还可以为特定 AWS 服务在其特定配置中指定多个 AWS 帐户的监视。 为特定服务指定的概要文件的列表将覆盖常规配置。
  • 请确保遵循建议来创建凭证文件。

为避免任何安全威胁,您应为 EC2 实例设置更严格的规则 ,或者创建一个独立的 Instana AWS 用户 ,以此避免将 root 用户的安全凭据添加到 文件 ~/.aws/credentials 中。

AWS STS方法

此方法使用 AWS STS 服务 API 来获取应该由 Instana 代理程序监视的所有其他 AWS 帐户的访问凭证。 在安装代理程序并将其配置为监视缺省帐户后,应遵循 Installation 部分中描述的步骤,通过以下方式提供所有其他 AWS 帐户的 IAM 角色 ARN:

com.instana.plugin.aws:
  role_arns:
    - 'arn:aws:iam::<account_2_id>:role/<role_2_name>'
    - 'arn:aws:iam::<account_3_id>:role/<role_3_name>'
 
注:
还可以为特定 AWS 服务在其特定配置中指定多个 AWS 帐户的监视。 对特定服务改写指定的 IAM 角色的列表,即常规配置。

与指定 ARN 匹配的每个角色还应该包含 Instana AWS 监视所需的 IAM 许可权。 因此,每个角色都应该允许缺省帐户通过按以下方式指定 Trust relationship 策略来执行 sts:AssumeRole

  1. 如果 sts: AssumeRole 是从 AWS 用户上下文完成的 - 在 AWS 基础结构外部安装代理程序时

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<default_account_id>:user/<default_account_username>"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
     
  2. 如果 sts: AssumeRole 是从 IAM 角色上下文完成的 - 在 EC2 上安装代理程序时:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<default_account_id>:role/<default_account_IAM_role_name>"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
     

    同样,也应该允许缺省帐户对所有其他帐户执行 sts:AssumeRole 操作。 可以通过以下方式在用于 Instana 监视的 IAM 角色中指定额外的 IAM 策略来完成此操作:

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            #Instana monitoring policy specifications
          },
          {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::<account_1_id>:role/<role_1_name>",
            "Effect": "Allow"
          },
          {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::<account_2_id>:role/<role_2_name>",
            "Effect": "Allow"
          }
        ]
      }
     

筛选与标记

注:
要启用过滤功能,应 tag:GetResources 将该 IAM 权限包含在授予 AWS 代理的 IAM 权限中。

在启用服务监视后,可以通过修改 AWS 代理程序的代理程序配置文件 /opt/instana/agent/etc/instana/configuration.yaml 来过滤其实例 Instana 将根据 AWS 标记进行监视的实例。

配置文件中的可用选项为:

com.instana.plugin.aws:
  # Comma-separated list of tags in key:value format.
  # Any AWS resource containing at least one of the specified tags is discovered.
  include_tags: ...
  # Comma-separated list of tags in key:value format.
  # Any AWS resource containing at least one of the specified tags is omitted from discovery.
  exclude_tags: ...
  # Exclude untagged AWS resources by setting the flag to `false`
  include_untagged: ...
 

可以定义多个标记(以逗号分隔)。 标记应该是用 : 分隔的一个密钥/值对。 在两个列表(包括和排除)中定义标记时,排除列表具有更高的优先级。 如果不需要过滤服务,那么不应该定义该配置。

Instana 代理会自动监控所有未分配标签的 AWS 资源。 {: note} 若要将未标记的资源排除在监控之外,请将 include_untagged 标志设置为 false

还可以在服务级别上配置过滤。 在此情况下,特定服务的缺省配置将被覆盖。 有关按特定服务进行发现过滤的更多详细信息,请参阅特定服务文档。

标签投票率

要指定 AWS 代理程序轮询受监视 AWS 服务以获取关联标记的频率,请使用 tagged-services-poll-rate 配置属性。 缺省值为 300 秒。 代理程序使用 AWS 服务客户机来轮询标记。

已标记资源的轮询速率配置为:

com.instana.plugin.aws:
  tagged-services-poll-rate: 60 #default 300
 

轮询时间间隔

轮询间隔指 AWS 代理调用 CloudWatch API 的频率。 它可配置为 configuration.yml 文件中的 cloudwatch_period。 缺省值为 300 秒。 最常见的情况是,监视平台使用 5 到 10 分钟的值。

轮询时间间隔可在以下两个级别上配置:

  • 代理程序监视的所有 AWS 服务的代理程序级别:

    com.instana.plugin.aws:
      cloudwatch_period: 300
     
  • 每个 AWS 服务:

    com.instana.plugin.aws.rds:
      cloudwatch_period: 300
     

单个服务的配置将覆盖代理程序级别配置。

CloudWatch 费用

要深入了解 AWS 服务,像 Instana 这样的监视平台必须使用 CloudWatch API。 此 API 由带有基于消费定价的 AWS 提供,并且本文档的目的是提供有关 Instana 如何使用 CloudWatch API 的透明度,以便用户了解对其 AWS 帐单的影响。

CloudWatch 成本受以下因素影响:

  • AWS 服务的受监视实例数
  • 每个 AWS 代理程序收集的度量值数
  • 轮询时间间隔(可配置)

每个 AWS 代理都会调用 GetMetricDataCloudWatch API 请求来收集指标,如果该请求失败,则 GetMetricStatistics 会调用作为备用方案。 这两个端点的每项指标产生的费用相同(请注意,使用 作为备用方案 GetMetricStatistics 不会产生任何额外费用)。 在 AWS CloudWatch 定价页面上可以找到两个端点的详细信息。

下表包含轮询时间间隔为 5 分钟且 Amazon 收费为每 1000 个 CloudWatch 度量值0.01 美元时不同 AWS 代理程序的大致估算每日成本:

AWS 传感器 指标数 每个实例的每日成本
API Gateway 5 - 11 $0.0144 - $0.0317 指标的数量取决于 API 协议。
AppSync 18 $0.0518
Auto Scaling 13 $0.0374
Beanstalk 31 日 $0.0893
CloudFront 13 $0.0374 度量指标的数量取决于相关功能的数量。 例如,表中显示了受监控分布的一个关联函数。
DynamoDB 71 $0.2045
EBS 9 $0.0230
ElastiCache 25 - 39 $0.0720 - $0.1123 指标的数量取决于所使用的引擎。
OpenSearch 12 个月 $0.0346
ELB 5 - 15 $0.0144 - $0.0432 度量指标的数量取决于负载平衡器的类型和可用性区域的数量。
EMR 15 日 $0.0432
IoT 核心 23 单 $0.0662
Kinesis 16 $0.0461
Lambda 21 $0.0605
MQ 22 $0.0634
MSK 37 $0.0844 度量指标的数量取决于集群内代理服务器的数量。 例如,表格显示监控了一个经纪人。
RDS 18 $0.0518
Redshift 17 $0.0490 度量指标的数量取决于集群内节点的数量。 例如,表格显示监控了一个节点。
S3 13 $0.0374
社交媒体 7 $0.0202
SQS 9 $0.0230
Timestream 9 $0.0230

请注意,CloudWatch 不用于 EC2 和轮询标记,因此不会在其中产生任何 CloudWatch 成本。

可以通过增加轮询时间间隔来降低 CloudWatch 成本。 增加轮询时间间隔的缺点是会减少 CloudWatch 的粒度度量值。 每个请求都提供一个度量值,因此在 300 秒时间段内,60 秒和 300 秒的轮询时间间隔之间的差异是 5 个度量值或 1 个度量值。

需要确定缺省轮询时间间隔是否适合您的业务,或者是否对其进行定制,以便在成本和洞察质量之间取得平衡。

故障诊断

无法在物理隔离环境中监控 AWS 服务

如果 Instana 主机代理运行在无法访问互联网的 EC2 机器上,该代理将无法访问 AWS 服务的公共 API,因此无法监控受支持的 AWS 服务。

AWS PrivateLink 以高可用性和可扩展的方式,提供对托管在 AWS 上的服务的私有访问通道,无需使用公共 IP 地址,也无需让流量经过互联网。

要使用 AWS PrivateLink ,请为所有需要监控的 AWS 服务创建一个 VPC端点。 该 VPC 端点在您的子网中提供了一个具有私有 IP 地址的弹性网络接口,用于连接 AWS 服务( API ),该接口可供 Instana 主机代理使用。

注:
对于标记为 API 的 AWS 资源组 (该资源组由 Instana 主机代理用于提供过滤和标记功能),无法使用任何 VPC 端点,且该 API 仅可通过公共 IP 地址访问。 一种可能的解决方案是配置代理 ,以便让 Instana 主机代理能够访问 AWS 资源组标记功能( API )。