喬叔的 Elastic Stack 專業教育訓練
  • 喬叔的 Elastic Stack 專業教育訓練
  • 🧑關於喬叔 (Joe Wu)
  • Elastic 課程公開班
    • 🎯Elasticsearch 基礎實務班
      • 💯學員課後回饋
    • 🆕Elasticsearch 進階運維班
      • 💯學員課後回饋
    • Elasticsearch 進階開發班
    • Elastic Stack 基礎實務班
    • Elastic Observability 基礎實務班
    • 📩課程許願池
  • 技術分享
    • 📗喬叔帶你上手 Elastic Stack
      • 前言
      • Elastic Cloud 如何建立 Deployment
        • ES Node 的種類
        • 配置的選擇
      • Index 建立前你該知道的
        • ES Index 如何被建立
        • ES 的超前佈署 - Dynamic Mapping
        • ES 的超前佈署 - Index Template
        • ES Index 的別名 (Alias)
        • 管理你的 Index - Kibana Index
      • 管理 Index 的 Best Practices
        • Shard 的數量與 Rollover & Shrink API
        • 三溫暖架構 - Hot Warm Cold Architecture
        • Index Lifecycle Management (ILM)
        • Rollup
        • Transform
        • Snapshot Lifecycle Management (SLM)
        • 總結
      • Elastic Cloud 比免費版還多的功能
        • Elastic Stack 的方案比較與銷售方式
        • Centralized Beats Management
        • Centralized Pipeline Management
        • Watcher
        • Elasticsearch Token Service
        • Multi-stack monitoring & Automatic stack issue alerts
      • 向 App Search 學習怎麼用 Elasticsearch
        • 揭開 App Search 的面紗
        • Engine 的 Index Settings 篇
        • Engine 的 Mapping 篇
        • Engine 的 Search 基礎剖析篇
        • Engine 的 Search 進階剖析篇
      • Elasticsearch 的優化技巧
        • Indexing 索引效能優化
        • Searching 搜尋效能優化
        • Index 的儲存空間最佳化
        • Shard 的最佳化管理
      • 完賽心得
    • 📘喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
      • 前言 & 淺談 Observability
      • Elastic 的 Observability 解決方案
      • Uptime - 掌握系統的生命徵象
        • 我們要觀測的生命徵象是什麼?
        • 使用 Heartbeat 收集系統生命徵象數據
        • 透過 Kibana 觀看心電圖及設定警報
        • 使用合成監控 (Synthetics Monitor) 從使用者情境驗證服務的運作狀態
      • Metrics - 觀察系統的健康指標
        • Metrics 與 Metricbeat 的基本介紹
        • 使用 Metricbeat 掌握 Elastic Stack 的健康狀態
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Docker 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Kubernetes 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 AWS 篇
      • Logs - 挖掘系統內部發生的狀況
        • Logs 與 Filebeat 的基本介紹
        • 使用 Filebeat 應該要了解的設計細節與原理
        • 透過 Filebeat 收集 Elastic Stack 中各種服務的細節資訊
        • 透過 Filebeat 收集 Infrastructure 中各種服務的細節資訊
      • Traces - 觀察應用程式的效能瓶頸
        • Elastic APM 基本介紹
        • 使用 APM-Integratoin-Testing 建立 Elastic APM 的模擬環境
        • 如何在 Kibana 使用 APM UI
        • 使用 APM Server 來收集 APM 數據
        • 透過 APM Agents 收集並傳送後端服務運作的記錄
        • 透過真實使用者監控 (RUM, Real User Monitoring) 來改善使用者體驗
      • 建立結構化的 Log
        • Elastic Common Schema 結構化 Log 的規範
        • Elasticsearch Ingest Pipeline 資料 Index 前的轉換好幫手
          • 基本介紹
          • 各種常用的 Processor
          • Enrich 資料與例外處理
      • 有效的使用 Observability 的資料
        • 透過 Machine Learning 發現異常的問題
        • 使用 Kibana Alerts 主動通知異常狀況
        • 資料的生命週期管理
        • 使用 Elastic Observability 追縱及觀察問題的心得
      • 完賽心得
    • 😀Elasticsearch 技術分享小品
      • 🤖Elastic 與 AI
        • Elasticsearch Inference API 讓我們直接在 ES 裡運用 OpenAI Completion API
    • 🎥線上分享
      • 喬叔 Elasticsearch Index 管理與效能優化技巧
      • Elastic Certification 認證經驗分享
    • 🛠️workshop
      • 如何在 Elasticsearch 實現敏捷的資料建模與管理 @ DevOpsDays 2023
        • 工作坊實作內容
      • Elastic Observability 實作體驗坊 @ DevOpsDays 2022
        • 行前準備
        • 工作坊實作內容
      • 當 Elasticsearch 搜尋引擎遇上 AI @ HelloWordDevConference 2024
        • 投影片
        • Elasticsearch 環境準備
        • Google Colab 環境準備
        • 工作坊操作說明
        • ElasticSearch Relevance Engine (ESRE)
    • ⬆️Elastic Stack 版本升級記錄
      • 🔍Elasticsearch
  • 其他專業服務
    • 👩‍🎓企業包班 | 企業內訓
    • 👨‍💼顧問服務
    • 🈺專案合作
    • 🧩Elastic 授權代理
  • 相關連結
    • Facebook 粉絲頁
Powered by GitBook
On this page
  • 本篇學習重點
  • Metricbeat 在 AWS 環境中,能收集哪些 Metrics
  • Metricbeat AWS Module
  • Metricbeat AWS Fargate Module
  • 使用 Metricbeat 監控 AWS 的 Metrics
  • Credential 的設定方式
  • 啟用 AWS Module
  • 設定 AWS Module 配置
  • 啟動 Metricbeat
  • 在 Kibana 檢視 AWS 的 Metrics
  • Kibana Observability Metrics
  • Metricbeat 內建的 AWS Dashboard
  • 參考資料
  1. 技術分享
  2. 喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
  3. Metrics - 觀察系統的健康指標

使用 Metricbeat 掌握 Infrastructure 的健康狀態 AWS 篇

本篇學習重點

  • 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,指定的方式有幾種:

一般在電腦上的 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_id 和 secret_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

設置完成後,啟動 Metricbeat:

./metricbeat -e

接著就可以來查看所收集到的資料了。

在 Kibana 檢視 AWS 的 Metrics

Kibana Observability Metrics

在 Kibana Observability 的 Metrics Inventory 中,我們可以從 Show 選擇 AWS,裡面有四種預先定義好所支援的服務:

  • EC2 Instances

  • S3 Buckets

  • RDS Databases

  • SQS Queue

針對這些服務,Kibana 也有先預設定義好這些服務較常會看的 Metrics,例如 RDS 會關注的 CPU usage、 Connections、Queries executed、Active transactions,另外也可以自行從 Add metric 中,選出我們所指定的 metricset 收集的其他數據。

Metricbeat 內建的 AWS Dashboard

由於 Metricbeat 預設為 AWS 所建立的 Dashboard 非常的多,如先前介紹 metricset 時所描述,建議大家針對你所指定收集的 metricset,可以先查看是否有預先建立好的 Dashboard,或是從 Kibana Dashbard 中,使用 Metricbeat AWS 關鍵字進行搜尋。


以上是『Metrics - 觀察系統的健康指標』系列的介紹,希望能協助大家對於 Elastic Observability 中針對 Metrics 的部份有更多的了解,針對 Metricbeat 的使用上,其實還有不少值得挖掘的功能以及較進階的設定配置,建議有興趣的讀者可以從官方的文件深入了解。

參考資料

Previous使用 Metricbeat 掌握 Infrastructure 的健康狀態 Kubernetes 篇NextLogs - 挖掘系統內部發生的狀況

Last updated 2 years ago

什麼都沒有設定時,Metricbeat 會去抓主機上的 [2] 設定來使用。

裡面有個章節就在解釋這部份的算法。

12-kibana-metrics-aws
12-kibana-inventory-metrics

其他 Inventory 的使用方式,可以參考先前的文章 的介紹。

image-20210927235613649

📘
billing
cloudwatch
dynamodb
ebs
ec2
elb
kinesis
lambda
natgateway
rds
s3_daily_storage
s3_request
sns
sqs
transitgateway
usage
vpn
AWS credential profile
官方文件 - Metricbeat AWS Module - AWS API Requests
09 - Metrics - 觀察系統的健康指標 (3) - 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇
官方文件 - Metricbeat AWS module
AWS credential profile