openstack 之 ceilometer: Sample

Sample 采集架构

ceilometer将物理机、虚拟机等资源的使用情况汇总,最终以sample的形式存储到数据库,其采集、存储架构如下:
这里写图片描述
目前有如下三个agent获取Openstack资源监控数据

  1. ceilometer-agent-central:中心采集方式,获取swift、neutron等服务的监控数据
  2. ceilometer-agent-compute:运行在计算节点,获取虚拟机监控数据
  3. ceilometer-agent-ipmi:使用snmp监控ironic物理机

pipeline.yaml

ceilometer 的pipeline.yaml中定义了监控每个监控项采集的频率、处理的方法、抛出的方式,如官方提供的stable/juno pipeline.yaml配置如下:

---
sources:
    - name: meter_source
      interval: 600
      meters:
          - "*"
      sinks:
          - meter_sink
    - name: cpu_source
      interval: 600
      meters:
          - "cpu"
      sinks:
          - cpu_sink
    - name: disk_source
      interval: 600
      meters:
          - "disk.read.bytes"
          - "disk.read.requests"
          - "disk.write.bytes"
          - "disk.write.requests"
          - "disk.device.read.bytes"
          - "disk.device.read.requests"
          - "disk.device.write.bytes"
          - "disk.device.write.requests"
      sinks:
          - disk_sink
    - name: network_source
      interval: 600
      meters:
          - "network.incoming.bytes"
          - "network.incoming.packets"
          - "network.outgoing.bytes"
          - "network.outgoing.packets"
      sinks:
          - network_sink
sinks:
    - name: meter_sink
      transformers:
      publishers:
          - notifier://
    - name: cpu_sink
      transformers:
          - name: "rate_of_change"
            parameters:
                target:
                    name: "cpu_util"
                    unit: "%"
                    type: "gauge"
                    scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))"
      publishers:
          - notifier://
    - name: disk_sink
      transformers:
          - name: "rate_of_change"
            parameters:
                source:
                    map_from:
                        name: "(disk\\.device|disk)\\.(read|write)\\.(bytes|requests)"
                        unit: "(B|request)"
                target:
                    map_to:
                        name: "\\1.\\2.\\3.rate"
                        unit: "\\1/s"
                    type: "gauge"
      publishers:
          - notifier://
    - name: network_sink
      transformers:
          - name: "rate_of_change"
            parameters:
                source:
                   map_from:
                       name: "network\\.(incoming|outgoing)\\.(bytes|packets)"
                       unit: "(B|packet)"
                target:
                    map_to:
                        name: "network.\\1.\\2.rate"
                        unit: "\\1/s"
                    type: "gauge"
      publishers:
          - notifier://
  • 定义了所有的监控项(meter_source),采集的频率是600秒,对采集的数据,不做加工处理,使用notifier发送到消息队列。
  • 定义了cpu使用率(cpu_source),采集频率为600秒,对采集的cpu数据,调用 rate_of_change 方法转换成 cpu_util。
  • 定义了磁盘IO(disk_source),采集频率是600秒,对采集的disk.read.bytes等数据,调用 rate_of_change 方法转换成(disk\\.device|disk)\\.(read|write)\\.(bytes|requests).rate格式。
  • 定义了网络流量(network_source),采集频率600秒,对采集的network.incoming.bytes等数据,调用rate_of_change方法转换成network\\.(incoming|outgoing)\\.(bytes|packets).rate格式。

Transformer & Publisher

数据转换器,事实上,Transfomer的定义是为了方便讲采集的数据做下汇总,目前定义的Transformer有如下几个:

  • TransformerAccumulator:累计meter(sample)项
  • ScalingTransformer:拓展meter(sample)项
  • RateOfChangeTransformer:计算一段时间meter的变化率
  • AggregatorTransformer:汇集具有某一相同属性的meter(sample)再处理
  • ArithmeticTransformer:对一个或多个meter(sample)的某项值做算术运算

对于Publisher,即是sampler的抛出者,抛出方式如下:

  • meter_publisher/meter/rpc:RPCPublisher
  • notifier:SampleNotifierPublisher
  • udp:UDPPublisher
  • file:FilePublisher
  • direct:DirectPublisher
  • kafka:KafkaBrokerPublisher

Storage

存储Sample,数据格式为:

class Sample(object):

    def __init__(self, name, type, unit, volume, user_id, project_id,
                 resource_id, timestamp, resource_metadata, source=None):
        self.name = name
        self.type = type
        self.unit = unit
        self.volume = volume
        self.user_id = user_id
        self.project_id = project_id
        self.resource_id = resource_id
        self.timestamp = timestamp
        self.resource_metadata = resource_metadata
        self.source = source or cfg.CONF.sample_source
        self.id = str(uuid.uuid1())

目前ceilometer支持并实现了如下几种存储格式

  • log:日志文件方式
  • mongodb:mongo数据,默认使用方式
  • mysql:mysql数据库
  • postgresql:postgresql数据库
  • sqlite:sqlite数据库,测试时使用
  • db2:db2 数据库

事实上,在实际开发时,并未使用如上数据库实现,为了方便历史数据查询,可以实现,如influxdb数据库,另外,也可以使用另外一个相关的openstack项目https://github.com/openstack/gnocchi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值