当前位置: 首页 > 工具软件 > Gnocchi > 使用案例 >

Gnocchi: 4、Gnocchi对接Ceilometer

凤经国
2023-12-01

基于mitaka版本的Devstack(含Ceilometer)对接Gnocchi过程

参考文章:

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验证对接是否成功

 

1 手动创建gnocchi数据库并赋予权限

作用:创建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 创建gnocchi服务和endpoint

步骤2参考文章:http://www.cnblogs.com/multi-task/p/5553830.html

2.1创建gnocchi用户,为gnocchi用户在租户service中赋予admin权限

作用:

执行如下命令:

openstack user create --password-prompt gnocchi

openstack role add --project service --user gnocchi admin

 

2.2创建gnocchi服务,创建gnocchi的端点endpoint

openstack service create --name gnocchi --description "OpenStack Metric"  metric
 
keystone endpoint-create --region RegionOne --service_id $CEILOMETER_SERVICE --publicurl http://$SERVICE_HOST:8041/ --adminurl http://$SERVICE_HOST:8041/ --internalurl http://$SERVICE_HOST:8041/

注意

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/

3下载gnocchi源代码,安装,生成gnocchi配置文件

本次采用的是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所需要的表

4修改gnocchi配置文件gnocchi.conf

主要是设置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

 

5修改ceilometer配置文件ceilometer.conf

主要是设置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重启ceilometer-collector服务和gnocchi所有服务

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这三个进程都是守护的,暂时没有想到如何做成守护,先通过 & 做成后台任务运行,后面会设置变成开机启动

7验证对接是否成功

先创建一个实例(云主机),之后执行

gnocchi metric list

gnocchi resource list

 

如果上述命令有输出,说明应该是对接成功了。

如果没有数据输出,可以检查8041端口是否被监听。

netstat –anpt|grep 8041

如果没有8041端口被监听,说明gnocchi-api 应该没有启动成功。需要重新启动。

 

8其他

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存储后端是否生成数据来确定其他两个守护进程是否出现问题。

 

 类似资料: