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 = <None> # 填入你对应的key
# Secret key for Radosgw Admin. (string value)
secret_key = <None> # 填入你对应的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


1
0
   

查看评论

相关内容

    暂无相关文章