监控 Amazon Web Services ( AWS ) 通过 Amazon Web Services ( AWS ) 代理

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

然而,Instana主机代理可通过特定方式配置,以监控由 AWS.管理的各项服务。 以特定方式设置用于监控 AWS 服务的宿主代理 AWS 称为代理。 建议您将 AWS 代理安装在专用主机上。 此外,请确保每个 AWS 区域至少有一名 AWS 客服人员在线。

安装代理 AWS 后,您可以将数据导入和导出到支持 AWS 的服务中,但无法访问支撑这些服务的基础架构。

注:

  • 要监控运行在 Amazon Elastic Compute Service ( EC2 ECS) 上的虚拟机、由您自行安装管理的 ECS Kubernetes 集群、使用 Amazon Elastic AWS Kubernetes Service Compute Service (ECS) 的集群,或 Amazon Elastic Container Service (ECS) 集群,您需要使用 Instana 主机代理,而非 AWS ECS 代理。 有关主机代理安装步骤的更多信息,请参阅平台部分中的相关主题。

  • 要监控 AWS 单 Kubernetes 节点或 Red Hat OpenShift 集群,请勿在集群的每个节点上安装Instana AWS 代理。 在专用主机上安装 AWS 代理程序。

受监控的服务

要监控由管理的下列 AWS 服务,请按照"安装Instana AWS 代理" 部分 AWS 所述安装Instana代理:

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

安装 AWS 代理

您可以在ECS上安装代理,或在 EC2 Fargate上安装 AWS 代理。

注:

  • 根据您云环境中监控对象的数量,可能需要增加主机代理的可用内存上限。 您可以通过将环境变量 AGENT_MAX_MEM 设置为大于默认值 544 的数值来增加 MiB 代理内存。 例如,要将代理内存设置为 1 GB,可以设置 AGENT_MAX_MEM=1024M.

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

安装在 EC2

您可以在 Windows 或 Linux 上安装该 AWSEC2 代理。 最好在运行. NET 的当前代通用型机器上运行Instana AWSLinux® 代理。例如,. m5.large NET 4.5实例是理想选择。

注意: 若在Windows系统上安装 AWS 代理,即使该Windows机器托管于您的AWS 基础设施中,仍需完成"基础设施 AWS 外部安装"部分中的配置。
  1. 在 Instana 用户界面中,点击更多 > 代理 > 安装代理 > AWS

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

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

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

    #!/bin/bash
    
    curl -o setup_agent.sh https://setup.instana.io/agent
    chmod 700 ./setup_agent.sh
    sudo ./setup_agent.sh -y -a <your-agent-key> -m aws -t dynamic -e <location> -s
     
  4. 启动一台专用 EC2 虚拟机,并将复制的脚本作为 User Data。 有关如何在实例User Data 使用命令的更多信息,请参阅启动 EC2 文档中的《在 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上安装

您可以在 Windows 上安装代理,或在 ECS 上的 Linux Fargate 上 AWS 安装代理。

注意: 若在Windows系统上安装 AWS 代理,即使该Windows机器托管于您的AWS 基础设施中,仍需完成"基础设施 AWS 外部安装"部分中的配置。
  1. 在 Instana 用户界面中,点击更多 > 代理 > 安装代理 > AWS

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

  3. “运行您的 AWS 代理”列表中,选择 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 命名配置文件方法

要监控多个账户,您需要像使用 CLI AWS 那样定义命名配置文件,或手动创建该文件。 必须在正在运行 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"
          }
        ]
      }
     

过滤与标记

注意: 要启用过滤功能,应将 IAM tag:GetResources 权限包含在授予代理 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

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

标签轮询速率

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

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

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

轮询时间间隔

轮询间隔表示代理调用 CloudWatchAWS 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 代理都会调用用于指标收集的 CloudWatchGetMetricData API请求,若请求失败则 GetMetricStatistics 调用此请求作为备用方案。 两个端点每项指标的费用相同(请注意,的备用使用 GetMetricStatistics 不会产生任何额外费用)。 在 AWS CloudWatch 定价页面上可以找到两个端点的详细信息。

下表列出了不同 AWS 代理在轮询间隔为5分钟且亚马逊按 0.01 每1000 CloudWatch 个指标收费时的大致每日成本估算:

AWS 传感器 指标数 每个实例的每日成本
API Gateway 5 - 11 $0.0144 - $0.0317 指标的数量取决于API协议。
AppSync 18 $0.0518
自动缩放 (auto scaling) 13 $0.0374
魔豆 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 指标数量取决于负载均衡器类型和可用区数量。
电子病历 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
时间流 9 $0.0230

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

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

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

故障诊断

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

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

PrivateLinkAWS 提供私有访问通道,可访问托管于该平台的服务,这些服务以 AWS 高可用性和可扩展性方式运行,无需使用公共IP地址,且无需流量穿越互联网。

为所有需要监控 AWS 的服务创建 VPCAWSPrivateLink, 端点。 VPC 端点在子网中提供弹性网络接口,该接口为服务 AWS API 配备了私有 IP 地址,Instana 主机代理可使用该地址。

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