参考文章:
http://blog.sina.com.cn/s/blog_6de3aa8a0102vgp1.html
http://www.cnblogs.com/multi-task/p/5553830.html
环境:VMware10上安装的Centos7的虚拟机环境,已经安装了mitaka版本的Devstack(含有mitaka版本的Ceilometer)
对接流程概览:对接的过程主要分为:
1 手动创建gnocchi数据库并赋予权限
2 创建gnocchi用户,为gnocchi用户在租户service中赋予admin权限,创建gnocchi服务,创建gnocchi的端点endpoint
3下载gnocchi源代码,安装,生成gnocchi配置文件,生成gnocchi相关表
4修改gnocchi配置文件gnocchi.conf,主要是设置indexer和storage
5修改ceilometer配置文件ceilometer.conf,主要是设置meter_dispatchers为gnocchi,并配置dispatcher_gnocchi
6重新启动ceilometer-collector服务使得collector将收集的数据分发给gnocchi;
依次启动gnocchi-api,gnocchi-statsd,gnocchi-metricd
7验证对接是否成功
作用:创建gnocchi数据库,后面会连接该数据库
执行命令:
mysql CREATE DATABASE gnocchi; grant all privileges on *.* to 'root'@'%' identified by 'pass' with grant option; flush privileges; exit; |
注意:上述root是数据库对应的用户名,密码是pass,需要记录这两个值,后面会在gnocchi.conf配置文件中的[ubdexer]下面的配置如下内容用到
url =mysql+pymysql://root:pass@127.0.0.1/gnocchi?charset=utf8
中的root和pass值是相同的
步骤2参考文章:http://www.cnblogs.com/multi-task/p/5553830.html
2.1创建gnocchi用户,为gnocchi用户在租户service中赋予admin权限
作用:
执行如下命令:
openstack user create --password-prompt gnocchi |
2.2创建gnocchi服务,创建gnocchi的端点endpoint
|
注意:
1 执行这条命令openstack service create --namegnocchi --description "OpenStack Metric" metric
请不要将最后的服务类型metric(红色部分)写成gnocchi,必须写metric,否则出错。
2 执行命令keystone endpoint-create --region RegionOne--service_id $CEILOMETER_SERVICE --publicurl http://$SERVICE_HOST:8041/ --adminurl http://$SERVICE_HOST:8041/ --internalurlhttp://$SERVICE_HOST:8041/
请将$CEILOMETER_SERVICE 替换为执行创建服务命令生成的服务id进行替换
将$SERVICE_HOST替换为 你的控制节点的ip地址
例如我的控制节点ip地址是192.168.192.130,那么我自己执行的命令的例子如下:
keystone endpoint-create--service-id=28a4a2c49191483ab8fdad75817291b0 --region=RegionOne --publicurl=http://192.168.192.130:8041/ --internalurl=http://192.168.192.130:8041/ --adminurl=http://192.168.192.130:8041/
本次采用的是gnocchi2.0的源码进行安装,下面是基于gnocchi2.0的处理
cd /opt/stack git clone https://github.com/openstack/gnocchi.git -b stable/2.0 cd gnocchi python setup.py install tox -e genconfig mkdir /etc/ceilometer cp etc/ceilometer/* /etc/ceilometer/ gnocchi-upgrade |
此处参考文章:http://blog.sina.com.cn/s/blog_6de3aa8a0102vgp1.html
解释:
tox -e genconfig 会分析gnocchi所依赖的东西,并安装依赖项,并会生成gnocchi的配置文件,如gnocchi.conf等
gnocchi-upgrade 会生成gnocchi所需要的表
主要是设置indexer和storage
附上一份修改好的gnocchi.conf文件
[DEFAULT] debug = True verbose = True
[keystone_authtoken] memcached_servers = 192.168.192.130:11211 signing_dir = /var/cache/gnocchi cafile = /opt/stack/data/ca-bundle.pem auth_uri = http://192.168.192.130:5000 project_domain_id = default project_name = service user_domain_id = default password = pass username = gnocchi auth_url = http://192.168.192.130:35357 auth_type = password
[statsd] # 废弃:表明收集线程的用户id , 在已有的project user list中查找不到 # DEPRECATED: User ID to use to identify statsd in Gnocchi (string value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #user_id = <None> user_id = 47408a08-d20e-40bc-a3a3-9582942ed3a2
# 废弃: 表明该收集线程的租户id ,在已有的project list中查找不到 # DEPRECATED: Project ID to use to identify statsd in Gnocchi (string value) # This option is deprecated for removal. # Its value may be silently ignored in the future. #project_id = <None> project_id = 0712a464-ad34-4780-a1e8-c8f1d71b57a9
# 标明收集线程的资源uuid # Resource UUID to use to identify statsd in Gnocchi (unknown value) #resource_id = <None> resource_id = 6ad0aea2-5f16-4621-b7ee-69e391acb6ea
[storage] file_basepath = /opt/stack/data/gnocchi/ driver = file
[indexer] url = mysql+pymysql://root:pass@127.0.0.1/gnocchi?charset=utf8 |
生成部分gnocchi会用到的目录,要生成,否则后面用到这些目录会报错
sudo mkdir /var/cache/gnocchi sudo chown -R stack:root /var/cache/gnocchi sudo mkdir /opt/stack/data/gnocchi/ sudo chown -R stack:root /opt/stack/data/gnocchi/ |
注意:
1 上述配置项中[statsd]
下面的user_id,project_id,resource_id经过验证可以设置为空,但是必须把前面的”#”号去掉,即这种格式
[statsd] user_id = project_id = resource_id = |
这三个配置项其实可以通过如下命令生成,这几个配置项用于后面收集ceilometer通过collecor发出的数据,被gnocchi-statsd守护进程接收
python import uuid; uuid.uuid4() |
2注意[keystone_authtoken]下的
password = pass
username = gnocchi
这两个password这个gnocchi用户对应的密码,也就是执行步骤1,步骤2.1中都用到的密码,因为我之前设置的密码都是pass,所以这里也是pass
主要是设置meter_dispatchers为gnocchi,并配置dispatcher_gnocchi
附上一份完整的ceilometer.conf以做参考
[DEFAULT] debug = True verbose = True notification_topics = notifications rpc_backend = rabbit meter_dispatchers = gnocchi refresh_pipeline_cfg = true pipeline_polling_interval = 20
[oslo_messaging_rabbit] rabbit_userid = stackrabbit rabbit_password = pass rabbit_hosts = 192.168.192.130
[coordination] backend_url = redis://localhost:6379
[compute] workload_partitioning = True
[notification] store_events = True workers = 2 workload_partitioning = True
[cache] backend_argument = redis_expiration_time:600 backend_argument = db:0 backend_argument = distributed_lock:True backend_argument = url:redis://localhost:6379 backend = dogpile.cache.redis
[oslo_policy] policy_file = /etc/ceilometer/policy.json
[service_credentials] auth_url = http://192.168.192.130:5000 region_name = RegionOne password = pass username = ceilometer project_name = service project_domain_id = default user_domain_id = default auth_type = password
[keystone_authtoken] memcached_servers = 192.168.192.130:11211 signing_dir = /var/cache/ceilometer cafile = /opt/stack/data/ca-bundle.pem auth_uri = http://192.168.192.130:5000 project_domain_id = default project_name = service user_domain_id = default password = pass username = ceilometer auth_url = http://192.168.192.130:35357 auth_type = password
[database] metering_connection = mysql+pymysql://root:pass@127.0.0.1/ceilometer?charset=utf8 event_connection = mysql+pymysql://root:pass@127.0.0.1/ceilometer?charset=utf8
[collector] workers = 2
[api] pecan_debug = False
[dispatcher_gnocchi] filter_service_activity = false url = http://192.168.192.130:8041 archive_policy = low
|
注意:
1上述配置文件ceilometer.conf中红色部分即为需要添加的内容,上述中的ip
192.168.192.130
是我的控制节点的ip地址,需要将该ip替换成你们的ip地址
6.1 重新启动ceilometer-collector服务,使得collector将收集的数据分发给gnocchi;
由于我使用的是环境是devstack,通过screen 切换到ceilometer-collector的窗口,按住ctrl + c来终止ceilometer-collector服务后,然后按向上箭头的按键,再次执行该ceilometer-collector启动的命令。
由于在不同的环境下,执行ceilometer-collector重启的命令也不相同,可以尝试下面的命令
systemctl restart openstack-ceilometer-collector systemctl restart ceilometer-collector service openstack-ceilometer-collector restart service ceilometer-collector restart 或者重启整个ceilometer systemctl opensatck-ceilometer |
6.2 依次启动gnocchi-api,gnocchi-statsd,gnocchi-metricd
执行如下命令
/usr/bin/python /usr/bin/gnocchi-api -d -v --config-file /etc/gnocchi/gnocchi.conf & /usr/bin/python /usr/bin/gnocchi-metricd -d -v --config-file /etc/gnocchi/gnocchi.conf & /usr/bin/python /usr/bin/gnocchi-statsd -d -v --config-file /etc/gnocchi/gnocchi.conf & |
由于源码安装,本来gnocchi-api,gnocchi-statsd,gnocchi-metricd这三个进程都是守护的,暂时没有想到如何做成守护,先通过 & 做成后台任务运行,后面会设置变成开机启动
先创建一个实例(云主机),之后执行
gnocchi metric list gnocchi resource list |
如果上述命令有输出,说明应该是对接成功了。
如果没有数据输出,可以检查8041端口是否被监听。
netstat –anpt|grep 8041 |
如果没有8041端口被监听,说明gnocchi-api 应该没有启动成功。需要重新启动。
8.1如果出现无法验证或者keystone相关错误,需要重新启动keystone
systemctl start openstack-keystone systemctl start openstack-keystone.service keystone-all service openstack-keystone start 如果上述命令都无法执行,就参见下面 解决办法:https://ask.openstack.org/en/question/91371/unable-to-start-keystone/ 原因:keystone已经和httpd放在一起了,所以要重启httpd服务 systemctl restart httpd |
8.2如果报错:ToozConnectionError: Error lll connecting to localhost:6379.Connection refused
解决办法:
6379是redis对应端口号,说明redis可能没有启动,可以执行如下命令启动redis
systemctl start redis |
8.3对接排错流程
如果对接过程中执行gnocchi相关命令没有数据产生,可分为3部分来排错。
1) 先确定ceilometer-polling-agent(包含:impi-agent,central-agent,compute-agent)和ceilometer-notification-agent是否正常, 因为它们是产生所有计量数据的来源,查看对应的日志,有什么错,就解决错误
2) 如果确定它们没有问题,接下来就要确定ceilometer-collector是否有问题,ceilometer-collector将经过1)中轮询代理和通知代理经过pipeline处理后的数据发送给收集器ceilometer-collector,经收集器collector通过dispatchers发送给gnocchi处理,确定分发是否出现问题。
3) 如果确定ceilometer-collector没有出现问题,接下来就要排查gnocchi的三个进程是否出现问题,gnocchi-api,gnocchi-statsd,gnocchi-metricd,看是否监听8041端口来确定gnocchi-api是否有问题,看对应storage存储后端是否生成数据来确定其他两个守护进程是否出现问题。