目录
1. 前言
由于公司海外用的是aws,在建设prometheus监控告警系统的时候,想通过prometheus <ec2_sd_config>的配置实现自动发现ec2实例,在网上搜了一圈,实在没找到比较通俗易懂带实例的文章,所以打算自己写一个,希望能帮到有需要的人
2. 配置说明
我在上一个文章中说过(prometheus服务自动发现之阿里云ecs_lv2的博客-优快云博客),prometheus官方支持aws及azure自动发现ecs实例,具体可以参考官方文档:配置|普罗 米修斯 (prometheus.io)
<ec2_sd_config>和<azure_sd_config>这两个配置部分的说明,这里主要说说ec2的sd_config配置
EC2 SD 配置允许从 AWS EC2 实例中检索抓取目标。默认情况下使用内网 IP 地址,但可以通过重新标记更改为公网 IP 地址。
在重新标记期间,目标上可以使用以下元标签:
__meta_ec2_ami
:EC2 亚马逊系统映像__meta_ec2_architecture
:实例的体系结构__meta_ec2_availability_zone
:运行实例的可用区__meta_ec2_availability_zone_id
:运行实例的可用区 ID(需要ec2:DescribeAvailabilityZones
)__meta_ec2_instance_id
:EC2 实例 ID__meta_ec2_instance_lifecycle
:EC2 实例的生命周期,仅为“spot”或“scheduleed”实例设置,否则不存在__meta_ec2_instance_state
:EC2 实例的状态__meta_ec2_instance_type
:EC2 实例的类型__meta_ec2_ipv6_addresses
:分配给实例网络接口的 IPv6 地址的逗号分隔列表(如果存在)__meta_ec2_owner_id
:拥有 EC2 实例的 AWS 账户的 ID__meta_ec2_platform
:操作系统平台,在 Windows 服务器上设置为“windows”,否则不存在__meta_ec2_primary_subnet_id
:主网络接口的子网 ID(如果可用)__meta_ec2_private_dns_name
:实例的私有 DNS 名称(如果可用)__meta_ec2_private_ip
:实例的私有 IP 地址(如果存在)__meta_ec2_public_dns_name
:实例的公有 DNS 名称(如果可用)__meta_ec2_public_ip
:实例的公有 IP 地址(如果可用)__meta_ec2_subnet_id
:运行实例的子网 ID 的逗号分隔列表(如果可用)__meta_ec2_tag_<tagkey>
:实例的每个标签值__meta_ec2_vpc_id
:运行实例的 VPC 的 ID(如果可用)
以上是官方文档对元标签的说明,可根据需要使用相应的元标签进行重写。配置部分说明感觉看不懂,下面是我整理的
3. 配置ec2_sd_config
vim /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: aws-ec2-sd
honor_timestamps: true
scrape_interval: 30s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
ec2_sd_configs: # 这里表示使用的发现配置
- port: 9100
refresh_interval: 30s
region: us-west-1 # 抓取的可用区,一个可用区有多个区,如1a/1b/1c,这里只用us-west-1即能抓取可用区下的所有实例
access_key: '******' # api key,不用说了吧
secret_key: '******'
配置后重载prometheus,效果如下
元标签如下
其它的就根据需要自行修改了,关于aws ec2自动发现的配置就到这了,觉得有用点个收藏吧