使用 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,指定的方式有幾種:
什麼都沒有設定時,Metricbeat 會去抓主機上的 AWS credential profile [2] 設定來使用。
一般在電腦上的 AWS credentail 設定的路徑是在 ~/.aws/credentials
,設定如下:
另外 region 的設定也是一樣,沒有特別指定,會抓機器上的預設配置,路徑在 ~/.aws/config
,設定如下:
直接在
metricbeat.yml
設定檔中指定access_key_id
和secret_access_key
:
最基本的做法,適合測試時使用,但正式環境不建議這樣用,你總不會想把這段有 credential 的 config 一起進 git 版控吧?
所以真的要在 config 設定,應該抽離出從環境變數設定,這樣的做法也便於使用容器化的佈署方式時,將參數帶入。
如果你使用的時有時效性的 Session Token 的話,
AWS_SESSION_TOKEN
也是在這邊可以進行設定。
例如:使用 docker 佈署 metricbeat 時的 -e AWS_ACCESS_KEY_ID=abcd
這種環境變數指定方式。
指定 AWS
role_arn
role_arn
是針對 AWS IAM role 產生臨時性的 credentials 所使用的,有使用 role_arn
時,也要提供 Access Key,或是配合 AWS credential porfile。
例如下面的例子就是使用指定的 role_arn
並且透過 Shared credential file 裡面所定義的 credential 來驗證身份。
這個 credentials_backup
就如我們前面介紹的 ~/.aws/credentials
設定方式是一樣的。
啟用 AWS Module
接下來,我們就將 Metricbeat AWS module 啟用:
設定 AWS Module 配置
接著針對我們要收集的 AWS Metrics 來進行對應的配置,以下是 Metricbeat 的 AWS module 啟用後的預設配置:
這邊要注意到,有些 Metrics 的收集頻率會需要較密集,但有些會要較寬鬆,像是下面這幾類 metrics 適合 1 分鐘取得一次數據:
其他的部份會依照實際的需求,並參考 metricset 裡面的描述說明,像是 s3_daily_storage
就會建議 period
至少要設定 1 天,因為這個值是一天更新一次,另外這個 daily metrics 一天存取一次也不需要額外的費用。
注意:因為 Metricbeat 是透過 CloudWatch API 去取得 AWS 的 Metrics 數據,這部份使用量會要去計算一樣,量大的時候也會是一筆費用。
官方文件 - Metricbeat AWS Module - AWS API Requests 裡面有個章節就在解釋這部份的算法。
啟動 Metricbeat
設置完成後,啟動 Metricbeat:
接著就可以來查看所收集到的資料了。
在 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 收集的其他數據。
其他 Inventory 的使用方式,可以參考先前的文章 09 - Metrics - 觀察系統的健康指標 (3) - 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇 的介紹。
Metricbeat 內建的 AWS Dashboard
由於 Metricbeat 預設為 AWS 所建立的 Dashboard 非常的多,如先前介紹 metricset 時所描述,建議大家針對你所指定收集的 metricset,可以先查看是否有預先建立好的 Dashboard,或是從 Kibana Dashbard 中,使用 Metricbeat AWS
關鍵字進行搜尋。
以上是『Metrics - 觀察系統的健康指標』系列的介紹,希望能協助大家對於 Elastic Observability 中針對 Metrics 的部份有更多的了解,針對 Metricbeat 的使用上,其實還有不少值得挖掘的功能以及較進階的設定配置,建議有興趣的讀者可以從官方的文件深入了解。
參考資料
Last updated