EC2配置Promtail执行Dry-run时出现DescribeInstances错误求助
Promtail EC2服务发现报错:InvalidAction - Could not find operation DescribeInstances for version 2
问题场景
在AML Linux 2实例上配置Promtail 2.7.1,执行以下命令做配置校验时触发错误:
./promtail-linux-amd64 -config.file=./ec2-promtail.yaml --dry-run
错误信息:
return (<ErrorResponse “http://webservices.amazon.com/AWSFault/200. Sender. InvalidAction. <|Message>Could not find operation DescribeInstances for version 2. . | 2bbe..caused by: expected element type but have ” )
环境说明:
- 实例无公网连接,需使用区域STS端点进行IAM角色认证
- AWS角色已配置
DescribeInstances、DescribeAvailabilityZones权限(注意:原描述中的DescribeInstance应为复数,需确认权限配置正确)
错误原因
你在ec2_sd_config里填的endpoint是STS服务的区域端点,但这个字段实际是用来指定EC2服务的区域端点的。Promtail把EC2服务发现需要的DescribeInstances请求发到了STS服务上,而STS根本没有这个API操作,所以返回了InvalidAction错误。
解决方案
修正EC2服务端点配置
把ec2_sd_config中的endpoint从STS地址改为对应区域的EC2服务地址,格式为ec2.<region>.amazonaws.com。启用区域STS端点认证
通过环境变量AWS_STS_REGIONAL_ENDPOINTS=regional让Promtail使用区域STS端点进行角色认证,适配无公网的环境。
修正后的完整配置示例
http_listen_port: 3100 grpc_listen_port: 0 clients: - url: https://loki.dev.fdp.internal/loki/api/v1/push positions: filename: /opt/promtail/positions.yaml scrape_configs: - job_name: ec2-logs ec2_sd_configs: - region: ap-southeast-1 role_arn: arn:aws:iam::xxxxxx:role/promtail_role endpoint: ec2.ap-southeast-1.amazonaws.com # 修正为EC2区域端点 relabel_configs: - source_labels: [__meta_ec2_tag_Name] target_label: name action: replace - source_labels: [__meta_ec2_instance_id] target_label: instance action: replace - source_labels: [__meta_ec2_availability_zone] target_label: zone action: replace - action: replace replacement: /var/log/**.log target_label: __path__ - source_labels: [__meta_ec2_private_dns_name] regex: "(.*)" target_label: __host__
验证命令
执行带环境变量的校验命令:
AWS_STS_REGIONAL_ENDPOINTS=regional ./promtail-linux-amd64 -config.file=./ec2-promtail.yaml --dry-run
如果需要永久生效环境变量,可以将AWS_STS_REGIONAL_ENDPOINTS=regional添加到实例的环境变量配置文件中(比如/etc/profile.d/aws.sh)。
内容的提问来源于stack exchange,提问作者goldilocks
相关产品推荐
相关产品推荐

