Ceilometer后端存储
简介
ceilometer后端存储数据库支持 mysql、mongodb、gnocchi等。控制其后端存储方式的配置文件是 ceilometer.conf
[ceilometer.conf]
[database]
event_connection = ....
metering_connection = ...
后端存储之mysql
要使用 mysql 作为其后端存储,主要步骤如下:
1.修改 ceilometer.conf
$ vim ceilometer.conf
event_connection = mysql+pymysql://ceilometer:PASS@mariadb:3306/ceilometer
metering_connection = mysql+pymysql://ceilometer:PASS@mariadb:3306/ceilometer
格式:mysql+pymysql://:@/
2.mysql 中创建 ceilometer 数据库
$ show databases;
+--------------------+
| Database |
+--------------------+
| ceilometer |
+--------------------+
3.mysql 中创建 ceilometer 用户,并赋予其操作 ceilometer 数据库的权限
$ insert into user(Host, User, Password) values("%", "ceilometer", "CEILOMETER_DB_PASSWD");
$ grant all privileges on ceilometer.* to 'ceilometer'@'%' identified by 'CEILOMETER_DB_PASSWD';
4.mysql 中创建 ceilometer 数据库需要的表
$ show tables;
+----------------------+
| Tables_in_ceilometer |
+----------------------+
| event |
| event_type |
| metadata_bool |
| metadata_float |
| metadata_int |
| metadata_text |
| meter |
| migrate_version |
| resource |
| sample |
| trait_datetime |
| trait_float |
| trait_int |
| trait_text |
+----------------------+
14 rows in set (0.00 sec)
做好以上操作后,ceilometer 收集的数据将存储到 ceilometer 数据库对应的表中
后端存储之 mongodb
ceilometer 虽然支持很多类型的数据库,但其默认的后端存储是 mongodb。其配置流程如下: 1.修改 ceilometer.conf
$ vim ceilometer.conf
event_connection = mongodb://ceilometer:123456@mongodb:27017/ceilometer
metering_connection = mongodb://ceilometer:123456@mongodb:27017/ceilometer
2.mongodb 中创建 ceilometer 数据库,ceilometer 用户以及赋权
$ mongo --host mongodb-master
--eval 'db = db.getSiblingDB("ceilometer");
db.createUser({user: "ceilometer",
pwd: "PASSWD",
roles: [ "readWrite", "dbAdmin" ]})'
3.执行完毕后上述步骤后即可。不需要特意去创建集合(表),ceilometer 在存储数据时会自动处理
# 查看 mongodb 日志
$ vim mongodb.log
2017-02-20T10:30:22.667+0800 [rsSync] replSet initial sync pending
2017-02-20T10:30:22.667+0800 [rsSync] replSet syncing to: 10.20.102.2:27017
2017-02-20T10:30:22.673+0800 [rsSync] build index on: local.replset.minvalid properties: { v: 1, key: { _id: 1 }, name: "_id_", ns: "local.replset.minvalid" }
2017-02-20T10:30:22.673+0800 [rsSync] added index to empty collection
2017-02-20T10:30:22.673+0800 [rsSync] replSet initial sync drop all databases
2017-02-20T10:30:22.673+0800 [rsSync] dropAllDatabasesExceptLocal 1
2017-02-20T10:30:22.673+0800 [rsSync] replSet initial sync clone all databases
2017-02-20T10:30:22.674+0800 [rsSync] replSet initial sync cloning db: admin
2017-02-20T10:30:22.675+0800 [rsSync] replSet initial sync data copy, starting syncup
2017-02-20T10:30:22.678+0800 [rsSync] oplog sync 1 of 3
2017-02-20T10:30:22.679+0800 [rsSync] oplog sync 2 of 3
2017-02-20T10:30:22.679+0800 [rsSync] replSet initial sync building indexes
2017-02-20T10:30:22.679+0800 [rsSync] replSet initial sync cloning indexes for : admin
2017-02-20T10:30:22.679+0800 [rsSync] oplog sync 3 of 3
2017-02-20T10:30:22.680+0800 [rsSync] replSet initial sync finishing up
2017-02-20T10:30:22.701+0800 [rsSync] replSet set minValid=58aa54ad:1
2017-02-20T10:30:22.703+0800 [rsSync] replSet RECOVERING
2017-02-20T10:30:22.703+0800 [rsSync] replSet initial sync done
# mongodb 中验证:此时仅有 用户,还没有 ceilometer 数据库,因为没存入数据
rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY>
rs0:PRIMARY> show collections
system.indexes
system.users
system.version
rs0:PRIMARY>
rs0:PRIMARY> db.system.users.findOne({user: "ceilometer"})
{
"_id" : "ceilometer.ceilometer",
"user" : "ceilometer",
"db" : "ceilometer",
"credentials" : {
"MONGODB-CR" : "1d748d763f575355bdbbe78063ce9ef6"
},
"roles" : [
{
"role" : "readWrite",
"db" : "ceilometer"
},
{
"role" : "dbAdmin",
"db" : "ceilometer"
}
]
}
# 创建镜像资源(glance image-create),让 ceilometer 收集数据存储到 mongodb
rs0:PRIMARY> show dbs;
ceilometer 0.078GB
rs0:PRIMARY> use ceilometer;
switched to db ceilometer
rs0:PRIMARY>
rs0:PRIMARY> show collections;
event
meter
resource
system.indexes
rs0:PRIMARY> db.resource.findOne()
{
"_id" : "3f18e57a-d514-43a5-ae34-1fdaa56e2906",
"source" : "openstack",
"project_id" : "2212062c347d4687b5462d7f7c3003b8",
"user_id" : null,
"first_sample_timestamp" : ISODate("2017-02-23T03:47:08.141Z"),
"last_sample_timestamp" : ISODate("2017-02-23T06:15:31.443Z"),
"metadata" : {
"status" : "active",
"name" : "cirros2",
"tags" : [ ],
"container_format" : "bare",
"created_at" : "2017-02-23T03:47:04Z",
"disk_format" : "qcow2",
"updated_at" : "2017-02-23T03:47:08Z",
"visibility" : "public",
"protected" : false,
"checksum" : "ee1eca47dc88f4879d8a229cc70a07c6",
"min_disk" : 0,
"virtual_size" : null,
"min_ram" : 0
},
"meter" : [
{
"counter_name" : "image.size",
"counter_unit" : "B",
"counter_type" : "gauge"
},
{
"counter_name" : "image",
"counter_unit" : "image",
"counter_type" : "gauge"
}
]
}
后端存储之 gnocchi:用于解决Ceilometer性能问题负责多租户的时间序列化、度量、资源数据库。目前没用过