/aliyun-exporter

Prometheus exporter for Alibaba Cloud Monitor

Primary LanguagePythonApache License 2.0Apache-2.0

阿里云 Exporter

license help wanted pypi docker Build Status

阿里云云监控的 Prometheus Exporter.

快速开始

从 0.3.0 版本开始, 项目里提供了一个 docker-compose stack 来从零到一地构建一整套针对阿里云的监控告警系统(当然你也可以继续扩展这套系统来适配自有的IDC以及业务监控).

安装方式:

首先安装好 docker 1.17 以上版本, 安装方式可以自行 GG

接下来运行以下命令:

git clone git@github.com:boringcat/aliyun-exporter.git
cd docker-compose
ALIYUN_ACCESS_ID=YOUR_ACCESS_ID ALIYUN_ACCESS_SECRET=YOUR_ACCESS_KEY docker-compose up

看到各个组件的启动日志基本滚完之后, 就可以访问 localhost:3000 来探索 Grafana 看板了.

更多的配置项请见 Docker Compose

安装

git clone https://github.com/BoringCat/aliyun-exporter.git
cd aliyun-exporter
pip3 install .

使用

首先需要在配置文件中写明阿里云的 Access Key 以及需要拉取的云监控指标,例子如下:

rate_limit: 10
pool_size: 10
cache_metrics: yes
protocol_type: https
credential:
  access_key_id: <YOUR_ACCESS_KEY_ID>
  access_key_secret: <YOUR_ACCESS_KEY_SECRET>
  region_id: <REGION_ID>

metrics:
  acs_ecs_dashboard:
    extra_labels:
      fromInfo: ecs
      keys:
        instanceId: InstanceId
      labels:
        - InstanceName
        - VpcAttributes: InternalIp
    metrics:
      - name: VPC_PublicIP_InternetInRate
      - name: VPC_PublicIP_InternetOutRate
      - name: IntranetInRate
      - name: IntranetOutRate
  acs_mongodb:
  - name: CPUUtilization
    period: 300

info_metrics:
  - ecs
  - rds
  - redis
  - slb
  - elasticsearch
  - logstash
  - mongodb

启动 Exporter

> aliyun-exporter -p 9525 -c aliyun-exporter.yml

访问 localhost:9525/metrics 查看指标抓取是否成功

Docker 镜像

docker run -p 9525:9525 -v $(pwd)/aliyun-exporter.yml:$(pwd)/aliyun-exporter.yml boringcat/aliyun-exporter:0.3.0 -c $(pwd)/aliyun-exporter.yml

Grafana 看板

预配置了一些 Grafana 看板. 见Screenshots

配置

pool_size: 10 # 并发线程池配置. (所有请求共用) 默认值: 10
rate_limit: 5 # 限流配置,每秒请求次数. 默认值: 10
rate_period: 1 # 并发限制间隔
cache_metrics: yes # 是否缓存API结果
protocol_type: https # 请求协议(内网建议http)
credential:
  access_key_id: <YOUR_ACCESS_KEY_ID> # 必填
  access_key_secret: <YOUR_ACCESS_KEY_SECRET> # 必填
  entrypoint: <REGION_ID> # 默认值: 'cn-hangzhou',仅用于选择请求入口,不影响监控获取
  
metrics: # 目标指标配置
  acs_ecs_dashboard: # 必填,云监控中定义的 Project 名字
    extra_labels:   # 选填,为获取的监控指标追加而外的labels
      fromInfo: ecs # 必填,从哪个info指标中获取labels
      keys:         # 必填,监控指标的维度 与 info中的label对应关系,用于匹配资源
        instanceId: InstanceId
      labels:       # 必填,追加到监控指标中的labels,可以使用map重命名
        - InstanceName
        - VpcAttributes: InternalIp
    metrics: # 必填,要拉取的监控项配置
      - name: VPC_PublicIP_InternetInRate # 必填, 云监控中定义的指标名字
        rename: InternetInRate # 选填,定义对应的 Prometheus 指标名字,默认与云监控指标名字一致
        period: 60 # 选填,默认 60
        measure: Average # 选填,响应体中的指标值字段名,默认 'Average'

info_metrics: # 云实例对象信息配置,目前只支持获取这些云产品的信息
  ecs:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域
  rds:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域
  slb:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域
  elasticsearch:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域
  logstash:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域
  redis:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域
  mongodb:
    region_ids:
      - <REGION_ID1>    # 云实例对象所在的区域

提示:

  • 云监控-预设监控项参考 可以查询 Project 与对应的指标
  • 云监控 API 有限流,假如被限流了可以调整限流配置
  • 云监控 API 每月调用量前 500 万次免费,需要计划好用量

假如配置了 50 个指标,再配置 Prometheus 60秒 抓取一次 Exporter,那么 30 天大约会用掉 2,160,000 次请求

特殊的 Project

有一些指标没有在云监控 API 中暴露, 为了保持配置的一致性, 我们定义了一些特殊 Project 来配置这些指标.

所有的特殊 Project:

  • rds_performance: RDS 的详细性能数据, 可选的指标名可以在这里找到: 性能参数表

自监控

cloudmonitor_request_latency_secondscloudmonitor_failed_request_latency_seconds 中记录了对 CloudMonitor API 的调用情况。

每一个 CloudMonitor 指标都有一个对应的 aliyun_{project}_{metric}_up 来表明该指标是否拉取成功。

Docker Compose

./docker-compose 目录下存放了整个 docker-compose stack, 这一套系统包含以下组件:

  • aliyun-exporter (就是本项目): 负责拉取阿里云的监控指标和资源信息
  • Prometheus: 负责存储指标以及计算警报
  • Alertmanager: 负责警报路由和警报通知
  • Grafana: 展现监控看板
  • prometheus-webhook-dingtalk: 为 Alertmanager 集成钉钉消息通知
# 配置 prometheus 的外部地址, 从警报跳转到详情时会用到, 需要外部可访问
export PROMETHEUS_HOST=YOUR_PUBLIC_IP_OR_HOSTNAME
# 配置钉钉机器人的 Token, 可以自行 GG 怎么创建钉钉机器人
export DINGTALK_TOKEN=YOUR_DINGTALK_ROBOT_TOEKN
# 配置阿里云 exporter 需要的验证信息
export ALIYUN_REGION=YOUR_REGION
export ALIYUN_ACCESS_ID=YOUR_ID
export ALIYUN_ACCESS_SECRET=YOUR_SECRET
# 后台运行整套系统
docker-compose up -d

启动后:

  • Grafana 默认监听 3000 端口
  • Alertmanager 默认监听 9093 端口
  • Prometheus 默认监听 9090 端口

启动之后, 预设的警报规则就会开始计算, 因此假如配置正确的话, 你可能会收到一些钉钉报警.

你可以修改 ./docker-compose/{component} 里的配置文件来自由配置各个组件, 有问题可以 GG 或者在 issue 里提问.

假如你自己制定了一些看板和警报规则, 非常欢迎你把它们贡献到项目里!

扩展与高可用

假如机器很多,云监控 API 可能比较慢,这时候可以把指标分拆多个 Exporter 实例中去。

HA 和 Prometheus 本身的 HA 方案一样,就是搭完全相同的两套监控。每套部署一台 Prometheus 加上对应的 Exporter。或者直接交给底下的 PaaS 设施来做 Standby。

部署两套会导致请求量会翻倍,要注意每月 API 调用量

贡献

我们欢迎 PR 或 issue 等任何形式的贡献! 你也可以在 help wanted label 下找到适合开始贡献的 issue!