12 - Metrics - 观察系统的健康指标 (6/6) - 使用 Metricbeat 掌握 Infrastructure 的健康状态 AWS 篇

Metrics - 观察系统的健康指标 系列文章


本篇学习重点

  • Metricbeat 能够收集 AWS 哪些 Metrics
  • 如何使用 Metricbeat 来收集 AWS 的 Metrics
  • 在 Kibana 上有提供哪些方式,能查看 Metricbeats 所收集的 AWS Metrics

先前的几篇文章,我们分别介绍了 Host, Docker, Kubernetes 这几种不同的布署环境中,如何透过 Metricbeat 来掌握 Infrastructure 的健康状态,不过如果是使用像是 AWS 这样的云端服务供应商,Metricbeat 也有提供蛮不错的资讯整合及建立好的 Dashboard,这篇将会针对 AWS 的支援部份来进行介绍。

Metricbeat 在 AWS 环境中,能收集哪些 Metrics

由於使用 AWS 这样的云端服务,大部份我们会使用 SaaS 型式的服务,少部份才会是使用 EC2 当虚拟器,并且自行在里面架设其他的服务,Metricbeat 因此有提供了 AWS module,针对 AWS 的各种服务进行整合,能取得这些服务的监控资讯,甚至可以从 AWS 的 Cloudwatch 取得所有在 AWS 使用的服务所产生并传送到 Cloudwatch 的资讯。

我们这边先列出一些在 AWS 环境中,你可能会要收集 Metrics 的情境,并且对应该用什麽方式来收集:

  • 使用 EC2 虚拟主机: 可以使用 System module 来收进系统 Metrics。
  • 使用 EC2 虚拟主机安装其他的服务: 可以使用其他 Metricbeat 所支援的各种服务的 module,例如:Tomcat, Nginx, Apache, RabbitMQ, Kafka...等。
  • 使用 ECS EC2: 可以使用 Docker module。
  • 使用 ECS Fargate:可 以使用 AWS Fargate module。
  • 使用 EKS: 可以使用 Kubernetes module。
  • 使用 AWS 其他提供的 SaaS 服务,并且是 AWS module 有支援的: 使用 AWS module。
  • 使用 AWS 其他提供的 SaaS 服务,但是 AWS module 没有支援的: 使用 AWS module 里的 Cloudwatch metricset。

对於如何使用 System module、Docker module、Kubernetes module,请参考这系列前面的几篇文章介绍。

Metricbeat AWS Module

接下来我们针对 AWS module 来进行介绍,这边先列出 Metricbeat 有支援的 AWS metricset 有哪些 [1]:

由於 AWS module 针对以上这些 metricset 所收集到的资讯,大部份都有建立好预设的 Dashboard 可以使用,所以这边不一个个带过,请大家有兴趣直接点选上面的连结查看。

Metricbeat AWS Fargate Module

而 AWS Fargate module 所支援的 metricset 就只有单纯的 task_stats ,里面其实就是 Docker stats 的回传资讯,包含以下这些基本的 Metrics:

  • CPU metrics
  • Disk I/O metrics
  • Memory metrics
  • Network metrics
  • Container metadata

使用 Metricbeat 监控 AWS 的 Metrics

接下来我们会举一个简单的例子,尝试使用 Metricbeat 的 AWS module 来收集 metrics。

Credential 的设定方式

首先要能存取 AWS 的服务,就是要先有权限,我们也会需要将对应的 credential 设定给 Metricbeat,指定的方式有几种:

  1. 什麽都没有设定时,Metricbeat 会去抓主机上的 AWS credential profile [2] 设定来使用。

一般在电脑上的 AWS credentail 设定的路径是在 ~/.aws/credentials,设定如下:

# ~/.aws/credentials                                                                                          
[default]
aws_access_key_id = 
aws_secret_access_key = 

另外 region 的设定也是一样,没有特别指定,会抓机器上的预设配置,路径在 ~/.aws/config,设定如下:

# ~/.aws/config                                                                                                                                                                                                                        [default]
region = ap-southeast-1
  1. 直接在 metricbeat.yml 设定档中指定 access_key_idsecret_access_key

最基本的做法,适合测试时使用,但正式环境不建议这样用,你总不会想把这段有 credential 的 config 一起进 git 版控吧?

所以真的要在 config 设定,应该抽离出从环境变数设定,这样的做法也便於使用容器化的布署方式时,将参数带入。

metricbeat.modules:
- module: aws
  period: 5m
  access_key_id: ${AWS_ACCESS_KEY_ID}
  secret_access_key: ${AWS_SECRET_ACCESS_KEY}
  session_token: ${AWS_SESSION_TOKEN}
  metricsets:
    - ec2

如果你使用的时有时效性的 Session Token 的话,AWS_SESSION_TOKEN 也是在这边可以进行设定。

例如:使用 docker 布署 metricbeat 时的 -e AWS_ACCESS_KEY_ID=abcd 这种环境变数指定方式。

docker run -e AWS_ACCESS_KEY_ID=abcd -e AWS_SECRET_ACCESS_KEY=abcd -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" docker.elastic.co/beats/metricbeat:7.15.0 metricbeat -e
  1. 指定 AWS role_arn

role_arn 是针对 AWS IAM role 产生临时性的 credentials 所使用的,有使用 role_arn 时,也要提供 Access Key,或是配合 AWS credential porfile。

例如下面的例子就是使用指定的 role_arn 并且透过 Shared credential file 里面所定义的 credential 来验证身份。

metricbeat.modules:
- module: aws
  period: 5m
  role_arn: arn:aws:iam::123456789012:role/test-mb
  shared_credential_file: /Users/mb/.aws/credentials_backup
  credential_profile_name: test
  metricsets:
    - ec2

这个 credentials_backup 就如我们前面介绍的 ~/.aws/credentials 设定方式是一样的。

启用 AWS Module

接下来,我们就将 Metricbeat AWS module 启用:

./metricbeat enable aws

设定 AWS Module 配置

接着针对我们要收集的 AWS Metrics 来进行对应的配置,以下是 Metricbeat 的 AWS module 启用後的预设配置:

# Module: aws
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/7.x/metricbeat-module-aws.html

- module: aws
  period: 1m
  metricsets:
    - elb
    - kinesis
    - natgateway
    - rds
    - transitgateway
    - usage
    - vpn
- module: aws
  period: 5m
  metricsets:
    - cloudwatch
  metrics:
    - namespace: AWS/EC2
      #name: ["CPUUtilization", "DiskWriteOps"]
      resource_type: ec2:instance
      #dimensions:
      #  - name: InstanceId
      #    value: i-0686946e22cf9494a
      #statistic: ["Average", "Maximum"]
- module: aws
  period: 5m
  metricsets:
    - dynamodb
    - ebs
    - ec2
    - lambda
    - rds
    - sns
    - sqs
- module: aws
  period: 24h
  metricsets:
    - billing
  cost_explorer_config:
    group_by_dimension_keys:
      - "AZ"
      - "INSTANCE_TYPE"
      - "SERVICE"
      - "LINKED_ACCOUNT"
    group_by_tag_keys:
      - "aws:createdBy"
- module: aws
  period: 24h
  metricsets:
    - s3_daily_storage
- module: aws
  period: 1m
  latency: 5m
  metricsets:
    - s3_request

这边要注意到,有些 Metrics 的收集频率会需要较密集,但有些会要较宽松,像是下面这几类 metrics 适合 1 分钟取得一次数据:

- elb
- kinesis
- natgateway
- rds
- transitgateway
- usage
- vpn

其他的部份会依照实际的需求,并参考 metricset 里面的描述说明,像是 s3_daily_storage 就会建议 period 至少要设定 1 天,因为这个值是一天更新一次,另外这个 daily metrics 一天存取一次也不需要额外的费用。

注意:因为 Metricbeat 是透过 CloudWatch API 去取得 AWS 的 Metrics 数据,这部份使用量会要去计算一样,量大的时候也会是一笔费用。

官方文件 - Metricbeat AWS Module - AWS API Requests 里面有个章节就在解释这部份的算法。

启动 Metricbeat

设置完成後,启动 Metricbeat:

./metricbeat -e

接着就可以来查看所收集到的资料了。

在 Kibana 检视 AWS 的 Metrics

Kibana Observability Metrics

在 Kibana Observability 的 Metrics Inventory 中,我们可以从 Show 选择 AWS,里面有四种预先定义好所支援的服务:

  • EC2 Instances
  • S3 Buckets
  • RDS Databases
  • SQS Queue

12-kibana-metrics-aws

针对这些服务,Kibana 也有先预设定义好这些服务较常会看的 Metrics,例如 RDS 会关注的 CPU usageConnectionsQueries executedActive transactions,另外也可以自行从 Add metric 中,选出我们所指定的 metricset 收集的其他数据。

12-kibana-inventory-metrics

其他 Inventory 的使用方式,可以参考先前的文章 09 - Metrics - 观察系统的健康指标 (3) - 使用 Metricbeat 掌握 Infrastructure 的健康状态 Host 篇 的介绍。

Metricbeat 内建的 AWS Dashboard

由於 Metricbeat 预设为 AWS 所建立的 Dashboard 非常的多,如先前介绍 metricset 时所描述,建议大家针对你所指定收集的 metricset,可以先查看是否有预先建立好的 Dashboard,或是从 Kibana Dashbard 中,使用 Metricbeat AWS 关键字进行搜寻。

image-20210927235613649


以上是『Metrics - 观察系统的健康指标』系列的介绍,希望能协助大家对於 Elastic Observability 中针对 Metrics 的部份有更多的了解,针对 Metricbeat 的使用上,其实还有不少值得挖掘的功能以及较进阶的设定配置,建议有兴趣的读者可以从官方的文件深入了解。

参考资料

  1. 官方文件 - Metricbeat AWS module
  2. AWS credential profile

查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!


<<:  27.unity换图片表情

>>:  Day12 - this&Object Prototypes Ch3 Objects - Contents - Existence - Enumeration

17.unity显示/隐藏物件(SetActive)

想要制作一个假背包,利用按钮显示背包,再按下按钮关闭背包。 要使用GameObject.SetAct...

Day01-系列文介绍、规划

前言 大家好我是 Andy,在休息一次的铁人赛後这次又想不开的来报名了XD 有些读者在看我以前写的文...

Excelize 释出 2.6.0 版本,功能强大的 Excel 档案基础库

Excelize 是 Go 语言编写的用於操作 Office Excel 档案基础库,基於 ECM...

更新网格交易机器人

1.新增ENABLE_PREMARKET选项,打开的话可以机器人在收盘的时候会挂单(没实质作用,就是...

并行程序的潜在问题 (三)

在介绍 Mutex lock 与 Spinlock 後,本篇文章同样针对并行程序的 Synchron...