先前的幾篇文章,我們分別介紹了 Host, Docker, Kubernetes 這幾種不同的佈署環境中,如何透過 Metricbeat 來掌握 Infrastructure 的健康狀態,不過如果是使用像是 AWS 這樣的雲端服務供應商,Metricbeat 也有提供蠻不錯的資訊整合及建立好的 Dashboard,這篇將會針對 AWS 的支援部份來進行介紹。
由於使用 AWS 這樣的雲端服務,大部份我們會使用 SaaS 型式的服務,少部份才會是使用 EC2 當虛擬器,並且自行在裡面架設其他的服務,Metricbeat 因此有提供了 AWS module,針對 AWS 的各種服務進行整合,能取得這些服務的監控資訊,甚至可以從 AWS 的 Cloudwatch 取得所有在 AWS 使用的服務所產生並傳送到 Cloudwatch 的資訊。
我們這邊先列出一些在 AWS 環境中,你可能會要收集 Metrics 的情境,並且對應該用什麼方式來收集:
對於如何使用 System module、Docker module、Kubernetes module,請參考這系列前面的幾篇文章介紹。
接下來我們針對 AWS module 來進行介紹,這邊先列出 Metricbeat 有支援的 AWS metricset 有哪些 [1]:
由於 AWS module 針對以上這些 metricset 所收集到的資訊,大部份都有建立好預設的 Dashboard 可以使用,所以這邊不一個個帶過,請大家有興趣直接點選上面的連結查看。
而 AWS Fargate module 所支援的 metricset 就只有單純的 task_stats
,裡面其實就是 Docker stats 的回傳資訊,包含以下這些基本的 Metrics:
接下來我們會舉一個簡單的例子,嘗試使用 Metricbeat 的 AWS module 來收集 metrics。
首先要能存取 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
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
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
設定方式是一樣的。
接下來,我們就將 Metricbeat AWS module 啟用:
./metricbeat enable aws
接著針對我們要收集的 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 -e
接著就可以來查看所收集到的資料了。
在 Kibana Observability 的 Metrics Inventory 中,我們可以從 Show 選擇 AWS,裡面有四種預先定義好所支援的服務:
針對這些服務,Kibana 也有先預設定義好這些服務較常會看的 Metrics,例如 RDS 會關注的 CPU usage
、 Connections
、Queries executed
、Active transactions
,另外也可以自行從 Add metric 中,選出我們所指定的 metricset 收集的其他數據。
其他 Inventory 的使用方式,可以參考先前的文章 09 - Metrics - 觀察系統的健康指標 (3) - 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇 的介紹。
由於 Metricbeat 預設為 AWS 所建立的 Dashboard 非常的多,如先前介紹 metricset 時所描述,建議大家針對你所指定收集的 metricset,可以先查看是否有預先建立好的 Dashboard,或是從 Kibana Dashbard 中,使用 Metricbeat AWS
關鍵字進行搜尋。
以上是『Metrics - 觀察系統的健康指標』系列的介紹,希望能協助大家對於 Elastic Observability 中針對 Metrics 的部份有更多的了解,針對 Metricbeat 的使用上,其實還有不少值得挖掘的功能以及較進階的設定配置,建議有興趣的讀者可以從官方的文件深入了解。
查看最新 Elasticsearch 或是 Elastic Stack 教育訓練資訊: https://training.onedoggo.com
歡迎追蹤我的 FB 粉絲頁: 喬叔 - Elastic Stack 技術交流
不論是技術分享的文章、公開線上分享、或是實體課程資訊,都會在粉絲頁通知大家哦!