本文介绍配置ECS类型的Prometheus实例的服务发现,实现监控采集ECS上暴露的Metric指标服务。
前提条件
已创建ECS类型的Prometheus实例,具体操作,请参见Prometheus实例 for ECS。
步骤一:开启ECS服务发现
- 登录ARMS控制台。
- 在左侧导航栏选择 ,进入Prometheus监控的实例列表页面。
- 单击目标Prometheus实例名称。
- 在左侧导航栏单击服务发现,然后单击配置页签。
- 在名称为vpc-ecs-service-discovery的操作列单击
。然后在弹出的提示框中单击开启,开启ECS服务发现。
开启ECS服务发现后,将会开启ECS数据采集。
步骤二:修改ECS服务发现相关配置
- 在名称为vpc-ecs-service-discovery的操作列单击详情。
- 在弹出的Yaml配置对话框中修改metrics_path或者port。如下图所示,若您的服务端口为9090/metrics,只需要修改port值为9090。
(可选)步骤三:检查安全组
如果您无法采集到ECS的监控数据,通常是由于安全组访问规则限制导致,建议您可以按照以下步骤优先检查安全组访问规则。
(可选)步骤四:过滤ECS
如果您的VPC内只有部分ECS提供指标查询服务,并且只需要采集部分ECS的数据,可选择过滤ECS,具体如下。
- 登录ARMS控制台。
- 在左侧导航栏选择 ,进入Prometheus监控的实例列表页面。
- 单击目标Prometheus实例名称。
- 在左侧导航栏单击服务发现,然后单击配置页签。
- 在名称为vpc-ecs-service-discovery的操作列单击详情。
- 在弹出的Yaml配置对话框中输入Prometheus.yaml,然后单击确定。如下所示的代码段是阿里云ECS服务发现配置样例Prometheus.yaml内容,具体请参见样例Prometheus.yaml。
global: scrape_interval: 15s scrape_timeout: 10s evaluation_interval: 30s scrape_configs: - job_name: _aliyun-prom/ecs-sd honor_timestamps: true scrape_interval: 30s scrape_timeout: 10s metrics_path: /metrics scheme: https aliyun_sd_configs: - port: 8888 # 服务发现后的prometheus抓取采集点port user_id: <aliyun userId> # Aliyun用户身份表示id userId, 填写会为discovery target带上__meta_ecs_user_id的label,可不填写 refresh_interval: 30s region_id: cn-hangzhou # 设置获取ECS的regionId access_key: <aliyun ak> # Aliyun鉴权字段AK access_key_secret: <aliyun sk> # Aliyun鉴权字段SK tag_filters: # Aliyun ECS tag filter, 按tagKey tagValue匹配筛选实例 - key: 'testK' values: ['*', 'test1*'] - key: 'testM' values: ['test2*'] # limit: 40 # 从接口取到的最大实例个数限制,不填为获取所有ECS实例 relabel_configs: # 1. 手动设置使用ECS的哪种IP # 默认ECS会按 经典网络公网IP > 经典网络内网IP > VPC网络公网IP > VPC网络内网IP 的顺序查找并赋予此ECS的采集IP,此时的采集点port为aliyun_sd_configs.port设置 # 用户可用过一下relabel设置,手动设置ECS的采集IP - source_labels: [__meta_ecs_public_ip] # 经典网络公网ip __meta_ecs_public_ip # - source_labels: [__meta_ecs_inner_ip] # 经典网络内网ip __meta_ecs_inner_ip # - source_labels: [__meta_ecs_eip] # VPC网络 公网ip __meta_ecs_eip # - source_labels: [__meta_ecs_private_ip] # VPC网络 内网ip __meta_ecs_private_ip regex: (.*) target_label: __address__ replacement: $1:<port> # 注意此处为手动设置relabel时的采集port # 2. 按ECS属性过滤 keep为只保留此条件筛选到的target,drop为过滤掉此条件筛选到的target # __meta_ecs_instance_id 实例id # __meta_ecs_region_id 实例regionId 注意配置中aliyun_sd_configs.region_id决定了获取的ECS的regionId # __meta_ecs_status 实例状态 Running:运行中、Starting:启动中、Stopping:停止中、Stopped:已停止 # __meta_ecs_zone_id 实例区域id # __meta_ecs_network_type 实例网络类型 classic:经典网络、vpc:VPC # __meta_ecs_tag_<TagKey> 实例tag TagKey为tag的名 - source_labels: ["__meta_ecs_instance_id"] regex: ".+" # or other value regex action: keep # keep / drop
例如,若您只需要采集标签名为app,标签值为myNginx的ECS,则可以进行如下配置。
tag_filters: - key: 'app' values: ['myNginx']
(可选)步骤五:指标Relabel
如果您需要在监控采集的数据中获取主机名以及标签信息,可参考如下操作。
- 登录ECS管理控制台,查看ECS的标签信息。
- 登录ARMS控制台。
- 单击目标Prometheus实例名称。
- 在左侧导航栏单击服务发现,然后单击配置页签。
- 在名称为vpc-ecs-service-discovery的操作列单击详情。
- 在弹出的Yaml配置对话框中输入如下Prometheus.yaml,配置需要采集的标签及主机名,然后单击确定。
relabel_configs: - regex: (.*) action: replace source_labels: - __meta_ecs_private_ip replacement: $1:88889 separator: ; target_label: __address__ - regex: (.*) action: replace source_labels: - __meta_ecs_tag_app replacement: $1 separator: ; target_label: tag_app - regex: (.*) action: replace source_labels: - __meta_ecs_instance_name replacement: $1 separator: ; target_label: instance_name
- 查看采集到的监控数据。
- 打开Grafana大盘概览页。
- 在左侧导航栏单击Explore图标。
- 在Explore页面顶部下拉框中选择集群,然后在Metrics输入框中输入PromQL语句,查看采集到的监控数据。