- Metricbeat 参考文档其他版本
- Metricbeat 概述
- 快速入门:安装和配置
- 设置并运行
- 升级 Metricbeat
- Metricbeat 的工作原理
- 配置
- 模块
- 常规设置
- 项目路径
- 配置文件加载
- 输出
- Kerberos
- SSL
- 索引生命周期管理 (ILM)
- Elasticsearch 索引模板
- Kibana 端点
- Kibana 仪表板
- 处理器
- 定义处理器
- add_cloud_metadata
- add_cloudfoundry_metadata
- add_docker_metadata
- add_fields
- add_host_metadata
- add_id
- add_kubernetes_metadata
- add_labels
- add_locale
- add_network_direction
- add_nomad_metadata
- add_observer_metadata
- add_process_metadata
- add_tags
- append
- community_id
- convert
- copy_fields
- decode_base64_field
- decode_duration
- decode_json_fields
- decode_xml
- decode_xml_wineventlog
- decompress_gzip_field
- detect_mime_type
- dissect
- dns
- drop_event
- drop_fields
- extract_array
- fingerprint
- include_fields
- move_fields
- rate_limit
- registered_domain
- rename
- replace
- script
- syslog
- translate_ldap_attribute
- translate_sid
- truncate_fields
- urldecode
- 自动发现
- 内部队列
- 日志
- HTTP 端点
- 正则表达式支持
- 检测
- 功能标志
- metricbeat.reference.yml
- 操作指南
- 模块
- ActiveMQ 模块
- Aerospike 模块
- Airflow 模块
- Apache 模块
- AWS 模块
- AWS Fargate 模块
- Azure 模块
- Beat 模块
- Ceph 模块
- Cloudfoundry 模块
- CockroachDB 模块
- Consul 模块
- Containerd 模块
- Coredns 模块
- Couchbase 模块
- CouchDB 模块
- Docker 模块
- Dropwizard 模块
- Elasticsearch 模块
- Elasticsearch ccr 指标集
- Elasticsearch cluster_stats 指标集
- Elasticsearch enrich 指标集
- Elasticsearch index 指标集
- Elasticsearch index_recovery 指标集
- Elasticsearch index_summary 指标集
- Elasticsearch ingest_pipeline 指标集
- Elasticsearch ml_job 指标集
- Elasticsearch node 指标集
- Elasticsearch node_stats 指标集
- Elasticsearch pending_tasks 指标集
- Elasticsearch shard 指标集
- Enterprise Search 模块
- Envoyproxy 模块
- Etcd 模块
- Google Cloud Platform 模块
- Google Cloud Platform billing 指标集
- Google Cloud Platform carbon 指标集
- Google Cloud Platform compute 指标集
- Google Cloud Platform dataproc 指标集
- Google Cloud Platform firestore 指标集
- Google Cloud Platform gke 指标集
- Google Cloud Platform loadbalancing 指标集
- Google Cloud Platform metrics 指标集
- Google Cloud Platform pubsub 指标集
- Google Cloud Platform storage 指标集
- Golang 模块
- Graphite 模块
- HAProxy 模块
- HTTP 模块
- IBM MQ 模块
- IIS 模块
- Istio 模块
- Jolokia 模块
- Kafka 模块
- Kibana 模块
- Kubernetes 模块
- Kubernetes apiserver 指标集
- Kubernetes container 指标集
- Kubernetes controllermanager 指标集
- Kubernetes event 指标集
- Kubernetes node 指标集
- Kubernetes pod 指标集
- Kubernetes proxy 指标集
- Kubernetes scheduler 指标集
- Kubernetes state_container 指标集
- Kubernetes state_cronjob 指标集
- Kubernetes state_daemonset 指标集
- Kubernetes state_deployment 指标集
- Kubernetes state_job 指标集
- Kubernetes state_node 指标集
- Kubernetes state_persistentvolumeclaim 指标集
- Kubernetes state_pod 指标集
- Kubernetes state_replicaset 指标集
- Kubernetes state_resourcequota 指标集
- Kubernetes state_service 指标集
- Kubernetes state_statefulset 指标集
- Kubernetes state_storageclass 指标集
- Kubernetes system 指标集
- Kubernetes volume 指标集
- KVM 模块
- Linux 模块
- Logstash 模块
- Memcached 模块
- Cisco Meraki 模块
- MongoDB 模块
- MSSQL 模块
- Munin 模块
- MySQL 模块
- NATS 模块
- Nginx 模块
- Openmetrics 模块
- Oracle 模块
- Panw 模块
- PHP_FPM 模块
- PostgreSQL 模块
- Prometheus 模块
- RabbitMQ 模块
- Redis 模块
- Redis Enterprise 模块
- SQL 模块
- Stan 模块
- Statsd 模块
- SyncGateway 模块
- System 模块
- System core 指标集
- System cpu 指标集
- System diskio 指标集
- System entropy 指标集
- System filesystem 指标集
- System fsstat 指标集
- System load 指标集
- System memory 指标集
- System network 指标集
- System network_summary 指标集
- System process 指标集
- System process_summary 指标集
- System raid 指标集
- System service 指标集
- System socket 指标集
- System socket_summary 指标集
- System uptime 指标集
- System users 指标集
- Tomcat 模块
- Traefik 模块
- uWSGI 模块
- vSphere 模块
- Windows 模块
- ZooKeeper 模块
- 导出的字段
- ActiveMQ 字段
- Aerospike 字段
- Airflow 字段
- Apache 字段
- AWS 字段
- AWS Fargate 字段
- Azure 字段
- Beat 字段
- Beat 字段
- Ceph 字段
- 云提供商元数据字段
- Cloudfoundry 字段
- CockroachDB 字段
- 通用字段
- Consul 字段
- Containerd 字段
- Coredns 字段
- Couchbase 字段
- CouchDB 字段
- Docker 字段
- Docker 字段
- Dropwizard 字段
- ECS 字段
- Elasticsearch 字段
- Enterprise Search 字段
- Envoyproxy 字段
- Etcd 字段
- Google Cloud Platform 字段
- Golang 字段
- Graphite 字段
- HAProxy 字段
- 主机字段
- HTTP 字段
- IBM MQ 字段
- IIS 字段
- Istio 字段
- Jolokia 字段
- Jolokia Discovery 自动发现提供程序字段
- Kafka 字段
- Kibana 字段
- Kubernetes 字段
- Kubernetes 字段
- KVM 字段
- Linux 字段
- Logstash 字段
- Memcached 字段
- MongoDB 字段
- MSSQL 字段
- Munin 字段
- MySQL 字段
- NATS 字段
- Nginx 字段
- Openmetrics 字段
- Oracle 字段
- Panw 字段
- PHP_FPM 字段
- PostgreSQL 字段
- 进程字段
- Prometheus 字段
- Prometheus 类型指标字段
- RabbitMQ 字段
- Redis 字段
- Redis Enterprise 字段
- SQL 字段
- Stan 字段
- Statsd 字段
- SyncGateway 字段
- 系统字段
- Tomcat 字段
- Traefik 字段
- uWSGI 字段
- vSphere 字段
- Windows 字段
- ZooKeeper 字段
- 监控
- 安全
- 故障排除
- 获取帮助
- 调试
- 了解已记录的指标
- 常见问题
- FreeBSD 上出现“open /compat/linux/proc: no such file or directory”错误
- Metricbeat 为您未配置的接口收集系统指标
- Metricbeat 使用过多带宽
- 加载配置文件时出错
- 发现意外或未知字符
- Logstash 连接不起作用
- 发布到 Logstash 失败,并显示“connection reset by peer”消息
- @metadata 在 Logstash 中丢失
- 不确定是使用 Logstash 还是 Beats
- SSL 客户端无法连接到 Logstash
- 监控 UI 显示的 Beats 比预期的少
- 仪表板无法找到索引模式
- 由于 MADV 设置导致 RSS 内存使用量过高
- 为 Beats 做出贡献
AWS 模块
编辑AWS 模块
编辑此模块使用 GetMetricData API 定期从 AWS CloudWatch 获取 AWS 服务的监控指标。
默认情况下,所有指标均已启用。
此模块会产生额外的 CloudWatch API 请求 AWS 费用。有关更多详细信息,请参阅 AWS API 请求。
模块特定配置说明
编辑- AWS 凭证
为了进行 AWS API 调用,aws
模块需要 AWS 凭证配置。用户可以使用 AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和/或 AWS_SESSION_TOKEN
,也可以使用共享的 AWS 凭证文件。有关更多详细信息,请参阅 AWS 凭证选项。
如果您使用 AWS CloudWatch 跨账户可观测性,则此处应使用监控账户的凭证,Metricbeat 将从监控账户和链接的源账户收集所有指标。
- regions
此模块还接受可选配置 regions
,以指定要从中查询指标的 AWS 区域。如果配置文件中未设置 regions
参数,则默认情况下,aws
模块将从所有可用的 AWS 区域查询指标。如果指定了 endpoint
,则 regions
将成为必需的配置参数。
- latency
某些 AWS 服务会将监控指标发送到 CloudWatch,处理延迟时间大于 Metricbeat 收集周期。这将导致数据点缺失或 Metricbeat 未收集任何数据点。在这种情况下,请指定一个 latency
参数,以便收集开始时间和结束时间将按给定的延迟量进行偏移。
- data_granularity
AWS CloudWatch 允许通过在查询指标时设置“周期”来定义返回数据点的粒度。有关更多信息,请参阅 MetricDataQuery 参数。
默认情况下,metricbeat 将查询 CloudWatch,并将“周期”设置为 Metricbeat 收集周期。如果您希望为“周期”设置自定义值,请指定一个 data_granularity
参数。通过将 period
和 data_granularity
一起设置,您可以分别控制希望收集指标的频率以及指标必须具有的粒度。
如果您担心由于 Metricbeat 发出的 CloudWatch API 调用而导致成本增加,并且以延迟检索指标作为权衡,则可以考虑设置 data_granularity
并增加 Metricbeat 收集周期。例如,将 data_granularity
设置为当前 period
的值,并将 period
的值加倍,可能会在 GetMetricData API 调用成本方面节省 50%。
- endpoint
大多数 AWS 服务都提供可用于发出请求的区域端点。区域端点的一般语法为 protocol://service-code.region-code.endpoint-code
。某些服务(如 IAM)不支持区域。这些服务的端点不包括区域。在 aws
模块中,endpoint
配置用于设置 endpoint-code
部分,例如 amazonaws.com
、amazonaws.com.cn
、c2s.ic.gov
、sc2s.sgov.gov
。
如果指定了端点,则需要 regions
配置。
- include_linked_accounts
include_linked_accounts
参数用于启用包含来自链接到主监控账户的不同账户的指标。通过将此参数设置为 true,用户可以从通过 CloudWatch 跨账户可观测性链接的多个 AWS 账户收集指标。默认情况下,include_linked_accounts
参数设置为 true,这意味着会收集来自主监控账户和所有链接账户的指标。设置为 false 时,该参数允许 CloudWatch 服务仅检索来自监控账户的指标。
如果您需要从特定的链接账户收集指标,请使用 owning_account
配置。
注意:用户应确保正确设置必要的 IAM 角色和策略,以便将监控账户和源账户链接在一起。有关更多详细信息,请参阅 将监控账户与源账户链接。
- owning_account
此配置与 include_linked_accounts
配置一起工作,并允许从特定的链接账户收集指标。该配置接受有效的账户 ID,并在内部映射到 ListMetrics API 的 OwningAccount
参数。
请注意,应启用 include_linked_accounts
(这是默认值)才能使用此参数。
include_linked_accounts: true owning_account: 111111111111
- tags_filter
要筛选的标签。如果在配置中给定了标签,则仅从具有标签键和标签值与筛选器匹配的资源收集指标。例如,如果在 AWS/ELB
命名空间下将 tags 参数指定为 Organization=Engineering
,则仅从标签名称等于 Organization
且标签值等于 Engineering
的 ELB 收集指标。为了筛选同一键的不同值,请将这些值添加到值数组(请参阅示例)
注意:标签筛选仅适用于在特定于 metricset 的配置中指定了 resource_type
的 metricset。
- module: aws period: 5m endpoint: amazonaws.com.cn regions: cn-north-1 metricsets: - ec2 tags_filter: - key: "Organization" value: ["Engineering", "Product"]
- fips_enabled
强制使用 FIPS 服务端点。有关更多信息,请参阅 AWS 凭证选项。
- module: aws period: 5m fips_enabled: true regions: - us-east-1 - us-east-2 - us-west-1 - us-west-2 metricsets: - ec2
- apigateway_max_results
此配置与 AWS/APIGateway 命名空间一起工作。它定义了每页返回的最大结果数。默认值为 25,最大值为 500。请参阅 GetRestApisInput.Limit
- module: aws period: 10s regions: - us-east-1 metricsets: - cloudwatch metrics: - namespace: "AWS/ApiGateway" resource_type: "apigateway:restapis" apigateway_max_results: 40
aws 模块附带预定义的仪表板。例如

Metricsets
编辑目前,在 aws
模块中,我们有 billing
、cloudwatch
、dynamodb
、ebs
、ec2
、elb
、kinesis
lambda
、mtest
、natgateway
、rds
、s3_daily_storage
、s3_request
、sns
、sqs
、transitgateway
、usage
和 vpn
metricset。
billing
编辑账单指标数据包括 AWS 账户中每个服务的估计费用以及 AWS 账户的估计总费用。估计费用每天计算并多次发送到 CloudWatch。因此,aws 模块配置中的 period
设置为 12h
。
账单 metricset 附带预定义的仪表板

cloudwatch
编辑此 metricset 允许用户使用任何给定的命名空间或具有给定周期的特定实例从 AWS CloudWatch 查询指标。有关将指标发布到 CloudWatch 的 AWS 服务列表,请参阅 发布 CloudWatch 指标的 AWS 服务。
dynamodb
编辑DynamoDB 会定期将指标发送到 CloudWatch,以便更好地监控 Web 应用程序或服务的性能。
dynamodb metricset 附带预定义的仪表板

ebs
编辑对于 AWS EBS 卷中的基本监控,数据在 5 分钟周期内自动提供,且无需付费。这包括 EBS 支持的实例的根设备卷的数据。用户还可以为预配置的 IOPS SSD (io1) 卷启用详细监控,以自动将一分钟指标发送到 CloudWatch。aws 模块配置中的默认周期为 ebs metricset 设置为 5m
。
ebs metricset 附带预定义的仪表板

ec2
编辑默认情况下,Amazon EC2 每 5 分钟向 CloudWatch 发送指标数据。使用这种基本监控,aws 模块配置中的 period
应该大于或等于 300s
。如果 period
设置为小于 300s
,则会多次收集相同的 CloudWatch 指标,这会导致额外的费用,而不会获得更精细的指标。例如,在 美国东部(弗吉尼亚北部)
区域,使用 GetMetricData 请求 1000 个指标的成本为 0.01 美元。有关更多详细信息,请参阅 AWS CloudWatch 定价。为了避免不必要的费用,period
最好设置为 300s
或 300s
的倍数,例如 600s
和 900s
。对于更精细的监控数据,您可以启用实例上的详细监控,以每 1 分钟获取指标。有关如何启用详细监控的说明,请参阅 启用详细监控。启用详细监控后,aws 模块配置中的 period
可以是大于 60s
的任何数字。由于 AWS 以 1 分钟为周期向 CloudWatch 发送指标数据,因此将 Metricbeat 模块 period
设置为小于 60s
将导致额外的 API 请求,这意味着 AWS 上会产生额外费用。为了避免不必要的费用,period
最好设置为 60s
或 60s
的倍数,例如 120s
和 180s
。
ec2 指标集附带一个预定义的仪表板

elb
编辑elb 指标集从经典负载均衡器、应用程序负载均衡器和网络负载均衡器收集 CloudWatch 指标。
只有在请求流经负载均衡器时,这三种弹性负载均衡才会向 CloudWatch 报告指标。如果有请求流经负载均衡器,弹性负载均衡将以 60 秒的间隔测量并发送其指标。如果没有请求流经负载均衡器或某个指标没有数据,则不会报告该指标。因此,aws 模块配置中的 period
设置为 1m
。
elb 指标集附带一个预定义的仪表板

lambda
编辑当调用完成时,Lambda 会为该调用向 CloudWatch 发送一组指标。lambda 指标集的 aws 模块配置中的默认周期设置为 5m
。lambda 指标集附带一个预定义的仪表板

natgateway
编辑CloudWatch 从 NAT 网关收集信息并创建可读的、近乎实时的指标。此指标集使用户能够从 CloudWatch 收集这些指标,以监控和排查 NAT 网关的故障。NAT 网关指标数据以 1 分钟的间隔提供,因此,建议 natgateway
指标集的 period
为 1m
或 1m
的倍数。
rds
编辑建议 rds
指标集的 period
为 60s
或 60s
的倍数,因为 Amazon RDS 每分钟向 Amazon CloudWatch 发送指标和维度。
rds 指标集附带一个预定义的仪表板

s3_daily_storage
编辑S3 存储桶的每日存储指标每天报告一次,无需额外费用。由于它们是每日指标,因此建议 s3_daily_storage
指标集的 period
为 86400s
或 86400s
的倍数。
s3_request
编辑请求指标以 1 分钟的间隔提供,但会产生额外费用。s3_request 指标集将提供更精细的数据来跟踪 S3 存储桶的使用情况。可以将 s3_request
指标集的 period
设置为 60s
或 60s
的倍数。但是,由于查询这些指标会产生额外费用,因此建议将 period
设置为 86400s
。用户始终可以将其调整为他们想要的粒度。默认情况下,S3 存储桶未启用请求指标。有关如何为每个 S3 存储桶启用请求指标的说明,请参阅 如何为 S3 配置请求指标。
s3_daily_storage 和 s3_request 指标集附带一个预定义的组合仪表板

sqs
编辑Amazon SQS 队列的 CloudWatch 指标会自动收集并每 5 分钟推送到 CloudWatch,建议 sqs
指标集的 period
为 300s
或 300s
的倍数。
sqs 指标集附带一个预定义的仪表板

transitgateway
编辑只有在请求流经传输网关时,Amazon VPC 才会向 CloudWatch 报告指标。如果有请求流经传输网关,Amazon VPC 将以 60 秒的间隔测量并发送其指标。建议 transitgateway
指标集的 period
为 1m
或 1m
的倍数。
usage
编辑CloudWatch 收集跟踪某些 AWS 资源使用情况的指标。这些指标与 AWS 服务配额相对应。跟踪这些指标有助于主动管理配额。服务配额使用情况指标位于 AWS/Usage 命名空间中,并且每分钟收集一次。因此,使用情况指标集的 aws 模块配置中的 period
设置为 1m
。
usage 指标集附带一个预定义的仪表板

vpn
编辑CloudWatch 从 VPN 服务收集和处理原始数据,并将其转换为可读的、近乎实时的指标,使用户能够更好地了解其 Web 应用程序和服务的性能。
AWS API 请求计数
编辑本节旨在记录 aws
模块中每个指标集调用的 AWS API。这将有助于用户估算使用 aws
模块的成本。
注意:某些 AWS API 需要分页,例如 ListMetrics 和 GetMetricData。计数取决于结果的数量。
ListMetrics 最大页面大小:500,基于 AWS API ListMetrics
GetMetricData 最大页面大小:100,基于 AWS API GetMetricData
AWS API 名称 |
AWS API 计数 |
频率 |
IAM ListAccountAliases |
1 |
启动时一次 |
STS GetCallerIdentity |
1 |
启动时一次 |
EC2 DescribeRegions |
1 |
启动时一次 |
未在配置中指定命名空间的 CloudWatch ListMetrics |
结果总数 / ListMetrics 最大页面大小 |
每个区域每个收集周期 |
在配置中指定了特定命名空间的 CloudWatch ListMetrics |
结果总数 / ListMetrics 最大页面大小 * 唯一命名空间的数量 |
每个区域每个收集周期 |
CloudWatch GetMetricData |
结果总数 / GetMetricData 最大页面大小 |
每个区域每个命名空间每个收集周期 |
billing
、ebs
、elb
、sns
、usage
和 lambda
与 cloudwatch
指标集相同。
AWS 凭证配置
编辑要配置 AWS 凭证,请将凭证放入 Metricbeat 配置中,或使用共享凭证文件,如下面的示例所示。
配置参数
编辑- access_key_id:访问密钥的第一部分。
- secret_access_key:访问密钥的第二部分。
- session_token:使用临时安全凭证时需要。
- credential_profile_name:共享凭证文件中的配置文件名称。
- shared_credential_file:共享凭证文件的目录。
- role_arn:要担任的 AWS IAM 角色。
- external_id:在另一个账户中担任角色时要使用的外部 ID,请参阅 AWS 文档,了解如何使用外部 ID。
-
proxy_url:用于连接到 AWS Web 服务的代理的 URL。语法为
http(s)://<IP/Hostname>:<port>
-
fips_enabled:启用此选项会指示 Metricbeat 使用服务的 FIPS 端点。Metricbeat 使用的所有服务都与 FIPS 兼容,但
tagging
除外,但只有某些区域与 FIPS 兼容。请参阅 https://aws.amazon.com/compliance/fips/ 或相应的服务页面,https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html,以获取 FIPS 端点和区域的完整列表。 - ssl:这指定了 SSL/TLS 配置。如果缺少 ssl 部分,则主机的 CA 将用于 HTTPS 连接。有关更多信息,请参阅 SSL。
- default_region:如果未设置其他区域,则查询的默认区域。大多数 AWS 服务都提供可用于发出请求的区域端点。某些服务(例如 IAM)不支持区域。如果未以任何其他方式(环境变量、凭证或实例配置文件)提供区域,则将使用此处设置的值。
- assume_role.duration:请求的担任角色会话的持续时间。如果未设置,则默认为 15 分钟。AWS 允许的最大会话持续时间在 1 小时到 12 小时之间,具体取决于您的最大会话持续时间策略。
- assume_role.expiry_window:expiry_window 允许在会话过期之前刷新会话。这有利于防止过期的令牌导致请求失败,并出现 ExpiredTokenException。
支持的格式
编辑本节中的示例是指 Metricbeat,但使用 AWS 进行身份验证的凭证选项是相同的,无论使用哪个 Beat。
- 使用
access_key_id
、secret_access_key
和/或session_token
用户可以将凭证放入 Metricbeat 模块配置中,也可以改为使用环境变量 AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和/或 AWS_SESSION_TOKEN
。
如果在 Docker 上运行,则应将这些环境变量添加为 docker 命令的一部分。例如,使用 Metricbeat
$ 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.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
示例 metricbeat.aws.yml
如下所示
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
也可以通过文件添加环境变量。例如
$ cat env.list AWS_ACCESS_KEY_ID=abcd AWS_SECRET_ACCESS_KEY=abcd $ docker run --env-file env.list -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
- 使用
credential_profile_name
和/或shared_credential_file
如果未提供 access_key_id
、secret_access_key
和 role_arn
,则 Metricbeat 将检查 credential_profile_name
。如果为不同的工具或应用程序使用不同的凭证,则可以使用配置文件在同一配置文件中配置多个访问密钥。如果未提供 credential_profile_name
,则将使用默认配置文件。
shared_credential_file
是可选的,用于指定共享凭证文件的目录。如果为空,则将使用默认目录。在 Windows 中,共享凭证文件位于 C:\Users\<您的用户名>\.aws\credentials
。对于 Linux、macOS 或 Unix,该文件位于 ~/.aws/credentials
。作为服务运行时,主路径取决于管理该服务的用户,因此可以使用 shared_credential_file
参数来避免歧义。有关更多详细信息,请参阅 创建共享凭证文件。
- 使用
role_arn
role_arn
用于指定要承担哪个 AWS IAM 角色以生成临时凭证。如果提供了 role_arn
,则 Metricbeat 将检查是否提供了访问密钥。如果没有,Metricbeat 将检查凭证配置文件名称。如果两者都没有提供,则将使用默认凭证配置文件。请确保在凭证配置文件或访问密钥下提供凭证。
如果在 Docker 上运行,则需要通过卷挂载提供凭证文件。例如,使用 Metricbeat
docker run -d --name=metricbeat --user=root --volume="$(pwd)/metricbeat.aws.yml:/usr/share/metricbeat/metricbeat.yml:ro" --volume="/Users/foo/.aws/credentials:/usr/share/metricbeat/credentials:ro" docker.elastic.co/beats/metricbeat:7.11.1 metricbeat -e -E cloud.auth=elastic:1234 -E cloud.id=test-aws:1234
示例 metricbeat.aws.yml
如下所示
metricbeat.modules: - module: aws period: 5m credential_profile_name: elastic-beats shared_credential_file: /usr/share/metricbeat/credentials metricsets: - ec2
-
在 Metricbeat 配置中使用 AWS 凭证
metricbeat.modules: - module: aws period: 300s metricsets: - ec2 access_key_id: '<access_key_id>' secret_access_key: '<secret_access_key>' session_token: '<session_token>'
或
metricbeat.modules: - module: aws period: 300s metricsets: - ec2 access_key_id: '${AWS_ACCESS_KEY_ID:""}' secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}' session_token: '${AWS_SESSION_TOKEN:""}'
-
使用 IAM 角色 ARN
metricbeat.modules: - module: aws period: 300s metricsets: - ec2 role_arn: arn:aws:iam::123456789012:role/test-mb
-
使用共享的 AWS 凭证文件
metricbeat.modules: - module: aws period: 300s metricsets: - ec2 credential_profile_name: test-mb
-
将 IAM 角色 ARN 与共享的 AWS 凭证文件一起使用
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
AWS 凭证类型
编辑可以使用两种不同类型的 AWS 凭证:访问密钥和临时安全凭证。
- 访问密钥
AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
是访问密钥的两个部分。它们是 IAM 用户或 AWS 账户根用户的长期凭证。有关更多详细信息,请参阅 AWS 访问密钥和秘密访问密钥。
- IAM 角色 ARN
IAM 角色是您可以在账户中创建的 IAM 身份,它具有特定的权限,这些权限确定该身份可以在 AWS 中执行的操作和不能执行的操作。角色没有与之关联的标准长期凭证,例如密码或访问密钥。相反,当您承担角色时,它会为您提供角色会话的临时安全凭证。IAM 角色 Amazon 资源名称 (ARN) 可用于指定要承担哪个 AWS IAM 角色以生成临时凭证。有关更多详细信息,请参阅 AssumeRole API 文档。
以下是使用 AWS CLI 为 Metricbeat 设置 IAM 角色的步骤。请将 123456789012
替换为您自己的账户 ID。
步骤 1. 创建 example-policy.json
文件以包含所有权限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetObject", "sqs:ReceiveMessage" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sqs:ChangeMessageVisibility", "Resource": "arn:aws:sqs:us-east-1:123456789012:test-fb-ks" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "sqs:DeleteMessage", "Resource": "arn:aws:sqs:us-east-1:123456789012:test-fb-ks" }, { "Sid": "VisualEditor3", "Effect": "Allow", "Action": [ "sts:AssumeRole", "sqs:ListQueues", "tag:GetResources", "ec2:DescribeInstances", "cloudwatch:GetMetricData", "ec2:DescribeRegions", "iam:ListAccountAliases", "sts:GetCallerIdentity", "cloudwatch:ListMetrics" ], "Resource": "*" } ] }
步骤 2. 使用 aws iam create-policy
命令创建 IAM 策略
$ aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
步骤 3. 创建 JSON 文件 example-role-trust-policy.json
,该文件定义 IAM 角色的信任关系
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" } }
步骤 4. 创建 IAM 角色并附加策略
$ aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json $ aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
完成这些步骤后,IAM 角色 ARN 可用于 Metricbeat aws
模块中的身份验证。
- 临时安全凭证
临时安全凭证具有有限的生命周期,由访问密钥 ID、秘密访问密钥和安全令牌组成,安全令牌通常从 GetSessionToken
返回。启用 MFA 的 IAM 用户在调用 GetSessionToken
时需要提交 MFA 代码。有关更多详细信息,请参阅 临时安全凭证。 sts get-session-token
AWS CLI 可用于生成临时凭证。例如,使用启用 MFA 的情况
aws> sts get-session-token --serial-number arn:aws:iam::1234:mfa/your-email@example.com --token-code 456789 --duration-seconds 129600
由于临时安全凭证是短期的,因此在它们过期后,用户需要生成新的凭证并使用新的凭证修改 aws.yml 配置文件。除非为 Metricbeat 启用了 实时重新加载功能,否则用户需要在更新配置文件后手动重启 Metricbeat,以便继续收集 Cloudwatch 指标。如果在旧凭证过期之前未用新凭证更新配置文件,则会导致数据丢失。对于 Metricbeat,我们建议用户在配置文件中使用访问密钥,以使 aws 模块能够进行 AWS API 调用,而无需频繁生成新的临时凭证和更新配置。
IAM 策略是一个实体,它定义了对 AWS 环境中对象的权限。需要将特定的权限添加到 IAM 用户的策略中,以授权 Metricbeat 收集 AWS 监控指标。请参阅每个指标集下的文档以了解所需的权限。
在 EKS 上运行
编辑- WebIdentity 身份验证流程
请参阅文档以创建服务账户的 IAM 角色:https://docs.aws.amazon.com/eks/latest/userguide/specify-service-account-role.html
创建 IRSA 后,可以使用它来注释 metricbeat
服务账户
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<IRSA_ID> name: metricbeat namespace: kube-system labels: k8s-app: metricbeat
为了启用 WebIdentity 身份验证流程,您需要向 IRSA 添加信任关系
{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/oidc.eks.<REGION>.amazonaws.com/id/<OIDC_PROVIDER_ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.REGION.amazonaws.com/id/<OIDC_PROVIDER_ID>:sub": "system:serviceaccount:kube-system:metricbeat", "oidc.eks.REGION.amazonaws.com/id/<OIDC_PROVIDER_ID>:aud": "sts.amazonaws.com" } } }
在这种情况下,无需向模块配置添加 role_arn
。
AWS 模块支持 模块 中描述的标准配置选项。这是一个配置示例
metricbeat.modules: - module: aws period: 300s credential_profile_name: test-mb metricsets: - ec2 tags_filter: - key: "Organization" value: "Engineering" - module: aws period: 300s credential_profile_name: test-mb metricsets: - sqs regions: - us-west-1 - module: aws period: 86400s metricsets: - s3_request - s3_daily_storage access_key_id: '${AWS_ACCESS_KEY_ID:""}' secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}' session_token: '${AWS_SESSION_TOKEN:""}' - module: aws period: 300s credential_profile_name: test-mb metricsets: - cloudwatch include_linked_accounts: true # owning_account: 111111111111 metrics: - namespace: AWS/EC2 name: ["CPUUtilization"] dimensions: - name: InstanceId value: i-0686946e22cf9494a - namespace: AWS/EBS - namespace: AWS/ELB resource_type: elasticloadbalancing tags: - key: "Organization" value: "Engineering" - module: aws period: 60s credential_profile_name: test-mb tags_filter: - key: "dept" value: "eng" metricsets: - elb - natgateway - rds - transitgateway - usage - vpn - module: aws period: 1m latency: 5m include_linked_accounts: false metricsets: - s3_request
以下指标集可用
On this page