为什么 Gnocchi 将 'server_group' 缓慢地应用于资源?

Why Gnocchi apply 'server_group' to resource slowly?

我在创建实例时将元数据 "metering.server_group":"corey-group" 添加到实例中,并使用 nova show 检查它是否已应用,然后我使用 gnocchi resource show --type instance ${instance-id} 检查 Gnocchi 资源,属性server_group 一开始是 None,但过了一会儿,它会被应用(总是在整点,例如:07:00、08:00...),我有不知道会发生什么,我认为这个问题会导致 Gnocchi 在进行聚合时得到不正确的数据集,所以我花了一些时间来解决它。

首先,数据库中存储的Gnocchi资源的属性:

MariaDB [(none)]> use gnocchi
MariaDB [gnocchi]> select * from resource_type where name='instance';
# check its tablename, ex: rt_xxxxxx
MariaDB [gnocchi]> select * from rt_xxxxxx where display_name='corey-vm';

+----------------+---------------------+-----------+--------------------------------------+-------------------------+------------------+---+
| display_name   | host                | image_ref | flavor_id                            | server_group | id             | flavor_name  |
+----------------+---------------------+-----------+--------------------------------------+-------------------------+------------------+---+
| corey-vm       | corey-test-com-001  | NULL      | 26e46b4c-23bd-4224-a609-29bd3094a18e | NULL         | xxxxxx         | corey-flavor |
+----------------+---------------------+-----------+--------------------------------------+-------------------------+------------------+---+

如您所见,列server_group应该是corey-group,但在刚创建实例时它总是NULL,似乎ceilometer每小时更新一次资源整点.

我在文件 ceilometer/publisher/gnocchi.py 中添加了一些日志,发现它每分钟更新一次资源,但是变量 resource_extra 仅在 整点获取 server_group ,这就是为什么 None 是开始。

这是部分日志

2020-11-09 11:59:15 DEBUG ceilometer.publisher.gnocchi Resource {'host': u'test-com-002', 'display_name': u'vm-001', 'flavor_id': u'xxx', 'flavor_name': u'xxx'} publish_samples /usr/lib/python2.7/site-packages/ceilometer/publisher/gnocchi.py:345

2020-11-09 12:00:15 DEBUG ceilometer.publisher.gnocchi Resource {'host': u'test-com-002', 'display_name': u'vm-001', 'flavor_name': u'xxx', 'server_group': 'corey-group'} publish_samples /usr/lib/python2.7/site-packages/ceilometer/publisher/gnocchi.py:345

2020-11-09 12:01:15 DEBUG ceilometer.publisher.gnocchi Resource {'host': u'test-com-002', 'display_name': u'vm-001', 'flavor_id': u'xxx', 'flavor_name': u'xxx'} publish_samples /usr/lib/python2.7/site-packages/ceilometer/publisher/gnocchi.py:345

但是卡在了这里,不明白为什么变量resource_extra每次都取不到server_group。究竟是什么原因导致这种情况发生? (运行 在皇后区)

如果有任何想法,我将不胜感激。

2020 年 9 月 11 日更新

经过几天的故障排除,我仍然找不到根本原因。

但我找到了一个手动应用 'server_group' 的命令行,它可以帮助我避免 Gnocchi 获取不正确的数据集进行聚合。

这里是:

gnocchi resource update --type instance -a server_group:corey-group ${resource_id}

2020 年 11 月 11 日更新

我试过grep整数3600修改为300,但没有任何改变,下面是我试过的。

/etc/ceilometer/ceilometer.conf

[compute]
resource_cache_expiry = 300

ceilometer/compute/discovery.py

cfg.IntOpt('resource_cache_expiry',
            default=300,

ceilometer/publisher/zaqar.py

DEFAULT_TTL = 300

2020 年 12 月 11 日更新

我无法在 Pike 上重现此问题。

或许可以参考以下讨论:

Heat autoscaling with gnocchi based aodh alarms requires use of naive instance_discovery_method setting with ceilometer compute agents?

根据参考资料,尝试在 ceilometer 配置文件中将默认 instance_discovery_method 从“libvirt_metadata”更改为 “naive”,如下所示:

[compute]
instance_discovery_method = naive

切换到“naive”解决了这个问题,但是它显然会在 Nova API 上产生用于元数据检索的负载。