Ceilometer原理及介绍

Ceilometer原理及介绍

ceilometer的几个概念

ceilometer 主要有下面几个概念:

meter 是ceilometer定义的监控项,诸如内存占用,网络IO,磁盘IO等等 sample 是每个采集时间点上meter对应的值 statistics 一般是统计学上某个周期内,meter对应的值(平均值之类) resource 是被监控的资源对象,这个可以是一台虚拟机,一台物理机或者一块云硬盘 alarm 是ceilometer的告警机制,你可以通过阈值或者组合条件告警,并设置告警时触发的action

Meter

资源使用的某个计量项,它的属性包括:名称(name)、单位 (unit)、类型 (cumulative:累计值,delta:变化值、gauge:离散或者波动值)以及对应的资源属性等。

Sample

某时刻某个 resource 的某个 meter 的值。Sample 的收集有区间概念,即收集数据的时间间隔。它的属性出了meter属性外,还有 timestampe(采样时间)和 Volume (采样值)。

Statistics

一个时间段(Period)内的 samples 聚合值,包括计数(Count)、最大(Max)、最小(Min)、平均 (Avg)、求和(Sum)等。例如:

这里的Period表示当前该查询的区间,使用 -p 参数指定 需要注意的是,你可以使用 ”-q“ 指定统计的目标范围。当不指定的时候,表示对当前租户(tenant)内的所有虚机的 sample 做统计。比如指定 resource_id 来只统计某一个虚机: ceilometer statistics -m cpu_util -p 60 -q resource_id=d7ce68d4-3d58-404c-85a6-f9c19fe9d96c。

ceilometer组成部分

ceilometer组成部分:

1.控制节点。

Central Agent: 调用OpenStack其它组件api采集指标 Notification Agent:接收其它组件主动上报的通知消息 Collector:基于AMQP接收消息,并记录到DataStore API:运行在管理节点,提供接口访问Data Store

2.计算机点。

Compute Agent:采集本节点性能指标

ceilometer监控项

Ceilometer原生支持的监控指标有很多,考虑到消息服务器和数据库的压力,根据项目需要,只保留需要的指标,其它默认裁剪。同时,扩展了部分指标。

1.虚拟机

cpu:cpu使用时间cpu_util:cpu使用率vcpus:使用vcpu数量disk.total.size:磁盘总大小memory:内存总大小memory.usage:内存使用大小disk.read.bytes:磁盘读字节数disk.read.bytes.rate:磁盘读速率disk.write.bytes:磁盘写字节数disk.write.bytes.rate:磁盘写速率network.incoming.bytes:网络incoming字节数network.incoming.bytes:网络incoming字节数network.incoming.bytes.rate:网络incoming速率network.outgoing.bytes:网络outgoing字节数network.outgoing.bytes.rate:网络outgoing速率

2.物理机

compute.node.cpu.percent:cpu利用率compute.node.disk.total:磁盘总大小compute.node.disk.used:磁盘使用大小compute.node.memory.total:内存总大小compute.node.memory.used:内存使用大小compute.node.disk.read.bytes:磁盘读字节数compute.node.disk.read.bytes.rate:磁盘读速率compute.node.disk.write.bytes:磁盘写字节数compute.node.disk.write.bytes.rate:磁盘写速率compute.node.network.incoming.bytes:网络incoming字节数compute.node.network.incoming.bytes.rate:网络incoming速率compute.node.network.outgoing.bytes:网络outgoing字节数compute.node.network.outgoing.bytes.rate:网络outgoing速率compute.node.network.bandwidth:物理网卡带宽

ceilometer收集数据的方式

OpenStack原始数据的收集方式有两种:

一种是通过ceilometer polling agent主动轮询方式,调用相应插件获取性能数据;

另一种是各openstack核心组件主动向消息队列上报自身的性能数据。这两种收集方式都将原始数据发送到消息队列。

ceilometer notification agent监听该消息队列,并将这些原始数据按照一定规则转换成sample和event,再发布到配置的目的端。可配的发布方式包括direct、notifier、udp、kafka和file。

ceilometer collector是可选服务,它从notification消息队列中消费sample和event消息,然后将数据dispatch到配置的目的端:database、file、http、gnocchi,该目的端可以同时配置多项。Ceilometer的逻辑框架如下图所示:

ceilometer监控项

nova

如果想统计虚拟机的一些信息,需要做以下更改:

配置项 默认值 配置项所属group 配置文件 原因 instance_usage_audit=True false [DEFAULT] nova.conf nova默认不会周期性通知所有已知实例的情况,所以如果需要周期获得这些审计信息需要打开它 instance_usage_audit_period=hour month [DEFAULT] nova.conf 上面开启了周期性通知的信息,这里就是周期性通知的时间间隔 notify_on_state_change=vm_and_task_state None [DEFAULT] nova.conf 虚拟主机的状态发生变化的时候,nova也会往消息队列里面发送消息,但是需要配置这个配置项 notification_driver=messagingv2 [] [DEFAULT] nova.conf nova发送notifications信息的驱动

因为对CPU的一些特定资源的监控需要在nova里面打开相应的支持,所以需要配置nova的配置文件,设置compute_monitors添加一个ComputeDriverCPUMonitor,如下:

# cat /etc/nova/nova.conf

[DEFAULT]

...

compute_monitors = ["ComputeDriverCPUMonitor","cpu.virt_driver","numa_mem_bw.virt_driver"]

...

# 重启nova-compute服务

# /usr/bin/python /usr/bin/nova-compute

cinder

如果想要获取一些存储的信息,需要做一下更改:

配置项 默认值 配置项所属group 配置文件 原因 driver = messagingv2 [] [oslo_messaging_notifications] cinder.conf cinder发送notifications信息的驱动 control_exchange = cinder [DEFAULT] cinder.conf cinder的messaging的topic

ceph

根据官方的说明,我们需要进行如下的配置:

...

[client.radosgw.gateway]

rgw enable usage log = true

...

对ceilometer的配置: 配置针对radosgw的access_key和secret_key

[rgw_admin_credentials]

#

# From ceilometer

#

# Access key for Radosgw Admin. (string value)

access_key = # 填入你对应的key

# Secret key for Radosgw Admin. (string value)

secret_key = # 填入你对应的key

Neutron

Havana 版本中添加了收集 Neutron Bandwidth samples的功能。与 Ceilometer 其他采集方式不同的是,bandwidth 的采集是通过 neutron-meter-agent 收集,然后 push 到 oslo-messaging,ceilometer-agent-notification通过监听消息队列来收取bandwidth信息。

其实现是在 L3 router 层次来收集数据,因此需要操作员配置 IP 范围以及设置标签(label)。比如,我们加两个标签,一个表示内部网络流量,另一个表示外部网络流量。每个标签会计量一定IP范围内的流量。然后,每个标签的带宽的测量数据会被发到 MQ,然后被 Ceilometer 收集到。 注意:需要先安装openstack-neutron-metering-agent

yum install -y openstack-neutron-metering-agent

neutron.conf中还需要做一下更改:

[DEFAULT]

service_plugins = metering

重启网络服务: systemctl restart neutron-server

修改/etc/neutron/metering_agent.ini:

[DEFAULT]

# Show debugging output in log (sets DEBUG log level output)

debug = True

driver = neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver

# Interval between two metering measures

measure_interval = 30

# Interval between two metering reports

report_interval = 300

interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

use_namespaces = True

重启网络服务: systemctl start neutron-metadata-agent 关于neutron配置更为详细信息,参考网站

ceilometer 常用cli命令

获取所有的meters

ceilometer meter-list

查询某种监控资源

ceilometer sample-list -m cpu

查询某个监控资源

ceilometer meter-list --query user=xxxx

查询某种监控资源并且限定条件

ceilometer sample-list --meter cpu -q 'resource_id=921903ea-ccda-4eda-b86e-7d44f3aa71c2;timestamp<2015-1

查询某种资源的统计信息

ceilometer sample-list -m cache.miss

ceilometer statistics --meter cpu_util

查询现在所有的alarm

ceilometer alarm-list

创建一个alarm

ceilometer alarm-threshold-create --name cache --description 'instance running hot' --meter-name cache --threshold 60.0 --comparison-operator gt --statistic avg --period 600 --evaluation-periods 3 --alarm-action 'log://' --query resource_id=INSTANCE_ID

更新某个alarm的阈值

ceilometer alarm-update --threshold 75 -a ALARM_ID

查询某个alarm的历史更改

ceilometer alarm-history -a ALARM_ID

将某个alarm置为无效

ceilometer alarm-update --enabled False -a ALARM_ID

删除一个alarm

ceilometer alarm-delete -a ALARM_ID

得到某个alarm的状态

ceilometer alarm-state-get ALARM_ID

置某个alarm的状态

ceilometer alarm-state-set --state ok(alarm) –a ALARM-ID

查看单个alarm的详细信息

ceilometer alarm-show ALARM-ID

查看单个alarm的状态

ceilometer alarm-state-get -a alarm-id

ceilometer快速安装

puppet-openstack-integration项目可以快速部署openstack all-in-one环境,github链接:puppet-openstack-integration

部署请参考文章: openstack-all-in-one30分钟快速搭建

ceilometer.conf配置

下面是用puppet-openstack-integration 跑出来的 all-in-one环境ceilometer配置如下:

[DEFAULT]

polling_namespaces=central,compute,ipmi

meter_dispatchers=gnocchi

event_dispatchers=gnocchi

http_timeout=600

debug=True

verbose=True

log_dir=/var/log/ceilometer

rpc_backend=rabbit

notification_topics=notifications

[api]

port=8777

host=0.0.0.0

[central]

[collector]

udp_address=0.0.0.0

udp_port=4952

workers=1

batch_size=100

[compute]

[coordination]

[cors]

[cors.subdomain]

[database]

metering_time_to_live=86400

event_time_to_live=86400

connection=mysql+pymysql://ceilometer:ceilometer@127.0.0.1/ceilometer?charset=utf8

metering_connection = mongodb://ceilometer:ceilometer@127.0.0.1:27017/ceilometer

[dispatcher_file]

[dispatcher_gnocchi]

filter_project = services

filter_service_activity = False

resources_definition_file = gnocchi_resources.yaml

[event]

[exchange_control]

[hardware]

[ipmi]

[keystone_authtoken]

auth_uri=http://127.0.0.1:5000/

admin_tenant_name=services

admin_user=ceilometer

admin_password=a_big_secret

identity_uri=http://127.0.0.1:35357/

[matchmaker_redis]

[meter]

[notification]

ack_on_event_error=True

store_events=False

workers=2

[oslo_concurrency]

[oslo_messaging_amqp]

[oslo_messaging_notifications]

[oslo_messaging_rabbit]

rabbit_host=127.0.0.1

rabbit_port=5672

rabbit_hosts=127.0.0.1:5672

rabbit_use_ssl=False

rabbit_userid=ceilometer

rabbit_password=an_even_bigger_secret

rabbit_virtual_host=/

rabbit_ha_queues=False

heartbeat_timeout_threshold=0

heartbeat_rate=2

[oslo_policy]

[polling]

[publisher]

metering_secret=secrete

[publisher_notifier]

[rgw_admin_credentials]

[service_credentials]

auth_type=password

auth_url=http://127.0.0.1:5000/

project_name=services

project_domain_name=Default

username=ceilometer

user_domain_name=Default

password=a_big_secret

[service_types]

[storage]

[vmware]

[xenapi]

Ceilometer组成

1、控制节点。

1) Central Agent: 调用OpenStack其它组件api采集指标 2) Notification Agent:接收其它组件主动上报的通知消息 3) Collector:基于AMQP接收消息,并记录到DataStore 4) API:运行在管理节点,提供接口访问Data Store 5) Alarm Evaluator:根据用户设置的告警条件进行告警评估 6) Alarm Notifier:告警通知(Http callback/ LOG) 7) Mend:非原生服务,TECS扩展,定时清理历史数据 2、计算机点。 1) Compute Agent:采集本节点性能指标 注:如果是合一节点,则运行所有服务。

Ceilometer支持的监控指标

Ceilometer原生支持的监控指标有很多,考虑到消息服务器和数据库的压力,根据项目需要,只保留需要的指标,其它默认裁剪。同时,扩展了部分指标。

1、虚拟机。 1) cpu:cpu使用时间 2) cpu_util:cpu使用率 3) vcpus:使用vcpu数量 4) disk.total.size:磁盘总大小 5) memory:内存总大小 6) memory.usage:内存使用大小 7) disk.read.bytes:磁盘读字节数 8) disk.read.bytes.rate:磁盘读速率 9) disk.write.bytes:磁盘写字节数 10) disk.write.bytes.rate:磁盘写速率 11) network.incoming.bytes:网络incoming字节数 12) network.incoming.bytes.rate:网络incoming速率 13) network.outgoing.bytes:网络outgoing字节数 14) network.outgoing.bytes.rate:网络outgoing速率 2、物理机。 1) compute.node.cpu.percent:cpu利用率 2) compute.node.disk.total:磁盘总大小 3) compute.node.disk.used:磁盘使用大小 4) compute.node.memory.total:内存总大小 5) compute.node.memory.used:内存使用大小 6) compute.node.disk.read.bytes:磁盘读字节数 7) compute.node.disk.read.bytes.rate:磁盘读速率 8) compute.node.disk.write.bytes:磁盘写字节数 9) compute.node.disk.write.bytes.rate:磁盘写速率 10) compute.node.network.incoming.bytes:网络incoming字节数 11) compute.node.network.incoming.bytes.rate:网络incoming速率 12) compute.node.network.outgoing.bytes:网络outgoing字节数 13) compute.node.network.outgoing.bytes.rate:网络outgoing速率 14) compute.node.network.bandwidth:物理网卡带宽

Ceilometer常用配置

1、后端数据库。

/etc/ceilometer/ceilometer.conf connection=mongodb://127.0.0.1:27017/ceilometer 2、指标采集周期。 /etc/ceilometer/pipeline.yaml 注:该文件只配置Ceilometer主动抓取的指标采集周期,其它组件上报的指标由各组件决定采集周期。 3、历史数据清理。 1) 数据定时清理时长。 # Period of clear expired data cycle, should be >= 600 #db_expire_interval= db_expire_interval=1800 2) 历史数据保留时长。 # Number of seconds that samples are kept in the database for # (<= 0 means forever). (integer value) #time_to_live=-1 time_to_live=1800


相关推荐

被蜜蜂、马蜂蛰伤怎么办?6大处理方法能救命!
cf手游斯泰尔天使多少钱 斯泰尔天使多少钻石
美团优选一夜关停18省!亏不动了? 美团 优选突然关闭全国多地业务,引发广泛关注。通俗来说,这次调整的核心原因就是:亏太多钱,而且未来也看不到赚钱的希望,甚...
蓝冰洞参团体验-冰岛最美艳的冬色
沙县一个穷村靠卖小吃致富:村庄焕然一新,村民南闯北赚钱
蜜桃熟了