使用 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
,設定如下:
另外 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
設置完成後,啟動 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 收集的其他數據。
Metricbeat 內建的 AWS Dashboard
由於 Metricbeat 預設為 AWS 所建立的 Dashboard 非常的多,如先前介紹 metricset 時所描述,建議大家針對你所指定收集的 metricset,可以先查看是否有預先建立好的 Dashboard,或是從 Kibana Dashbard 中,使用 Metricbeat AWS
關鍵字進行搜尋。
以上是『Metrics - 觀察系統的健康指標』系列的介紹,希望能協助大家對於 Elastic Observability 中針對 Metrics 的部份有更多的了解,針對 Metricbeat 的使用上,其實還有不少值得挖掘的功能以及較進階的設定配置,建議有興趣的讀者可以從官方的文件深入了解。
參考資料
Last updated