I have been tested this exporter in a machine with an openstack and in this machine, this exporter has worked fine. This openstack is a test environment with only one computer.
Then, I have installed in our production openstack environment without success, and I'm not able to see the problem. I can't get any metric. In this openstack environment we have 3 controller servers:
controller2: manage the network
controller3: manage the storage
controller1: manage the rest of the openstack components
I have installed the exporter in the controller1 with a dedicated openstack user to avoid use the admin user.
If from the own controller1 machine I try to get the metric I can see an 500 error:
# curl -v http://localhost:9183/metrics
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9183 (#0)
> GET /metrics HTTP/1.1
> Host: localhost:9183
> User-Agent: curl/7.61.1
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 500 Internal Server Error
< Server: BaseHTTP/0.6 Python/3.6.8
< Date: Thu, 28 Jul 2022 11:26:11 GMT
<
* Closing connection 0
[root@nccontroller1 log]#
This is the content of the prometheus-openstack-exporter.yaml file (although we have swift, it is commented just as a test to check if it was the problem):
[root@controller1 ~]# cat /etc/prometheus-openstack-exporter/prometheus-openstack-exporter.yaml
# Example configuration file for prometheus-openstack-exporter
# Copyright (C) 2016-2019 Canonical, Ltd.
#
listen_port: 9183
cache_refresh_interval: 300 # In seconds
cache_file: /var/cache/prometheus-openstack-exporter/mycloud
cloud: mycloud
openstack_allocation_ratio_vcpu: 2.5
openstack_allocation_ratio_ram: 1.1
openstack_allocation_ratio_disk: 1.0
log_level: DEBUG
# Configure the enabled collectors here. Note that the Swift account
# collector in particular has special requirements.
enabled_collectors:
- cinder
- neutron
- nova
### - swift
### - swift-account-usage
# To export hypervisor_schedulable_instances metric set desired instance size
schedulable_instance_size:
ram_mbs: 4096
vcpu: 2
disk_gbs: 20
# Uncomment if the cloud doesn't provide cinder / nova volumes:
#use_nova_volumes: False
## Swift
# There is no way to retrieve them using OpenStack APIs
# For clouds deployed without swift, remove this part
###swift_hosts:
### - swift.xxx.es
### - export1 172.16.4.225:8080
### - export2 172.16.4.226:8080
### - export3 172.16.4.227:8080
### - export4 172.16.4.228:8080
# There is no API to ask Swift for a list of accounts it knows about.
# Even if there were, Swift (in common case of Keystone auth, at
# least) only knows them by the corresponding tenant ID, which would
# be a less than useful label without post-processing. The following
# should point to a file containing one line per tenant, with the
# tenant name first, then whitespace, followed by the tenant ID.
keystone_tenants_map:
# The reseller prefix is typically used by the Swift middleware to
# keep accounts with different providers separate. We would ideally
# look this up dynamically from the Swift configuration.
# The Keystone middlware defaults to the following value.
reseller_prefix: AUTH_
ring_path: /etc/swift
# These will typically be read from /etc/swift/swift.conf. If that
# file cannot be opened, then the Swift library will log an error and
# try to exit. To run p-s-a-e as a user other than Swift, these
# settings must be set to the same values as Swift itself, and the
# above must point to an always-current readable copy of the rings.
hash_path_prefix:
hash_path_suffix:
[root@controller1 ~]#
And this is the log info when the service is running, nothing happens when I try to get the metrics. Note that in the development openstack, we get the same problem with the list_projects but it works fine, we can get the metrics.
Jul 28 13:28:51 nccontroller1 systemd[1]: Started prometheus-openstack-exporter.
Jul 28 13:28:53 nccontroller1 python3[32042]: Starting data gather thread
Jul 28 13:28:53 nccontroller1 python3[32042]: Client setup done, keystone ver 3
Jul 28 13:28:53 nccontroller1 python3[32042]: Error getting tenants.list, continue with projects.list
Jul 28 13:28:53 nccontroller1 python3[32042]: Error getting stats: Traceback (most recent call last):
File "/opt/prometheus-openstack-exporter/prometheus-openstack-exporter", line 186, in _get_keystone_info
info["tenants"] = [x._info for x in keystone.tenants.list()]
File "/usr/lib/python3.6/site-packages/keystoneclient/httpclient.py", line 893, in __getattr__
raise AttributeError(_("Unknown Attribute: %s") % name)
AttributeError: Unknown Attribute: tenants
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/prometheus-openstack-exporter/prometheus-openstack-exporter", line 262, in run
prodstack.update(self._get_keystone_info(keystone))
File "/opt/prometheus-openstack-exporter/prometheus-openstack-exporter", line 189, in _get_keystone_info
info["tenants"] = [x._info for x in keystone.projects.list()]
File "/usr/lib/python3.6/site-packages/keystoneclient/v3/projects.py", line 142, in list
**kwargs)
File "/usr/lib/python3.6/site-packages/keystoneclient/base.py", line 86, in func
return f(*args, **new_kwargs)
File "/usr/lib/python3.6/site-packages/keystoneclient/base.py", line 448, in list
list_resp = self._list(url_query, self.collection_key)
File "/usr/lib/python3.6/site-packages/keystoneclient/base.py", line 141, in _list
resp, body = self.client.get(url, **kwargs)
File "/usr/lib/python3.6/site-packages/keystoneauth1/adapter.py", line 386, in get
return self.request(url, 'GET', **kwargs)
File "/usr/lib/python3.6/site-packages/keystoneauth1/adapter.py", line 545, in request
resp = super(LegacyJsonAdapter, self).request(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/keystoneauth1/adapter.py", line 248, in request
return self.session.request(url, method, **kwargs)
File "/usr/lib/python3.6/site-packages/keystoneauth1/session.py", line 943, in request
raise exceptions.from_response(resp, method, url)
keystoneauth1.exceptions.http.Forbidden: You are not authorized to perform the requested action: identity:list_projects. (HTTP 403) (Request-ID: req-c1121018-2efb-4768-bddb-cfdd6558822f)
Tell me if you need I upload more information.
Any help to find the problem would be appreciated. Thanks a lot.
Hello
I have been tested this exporter in a machine with an openstack and in this machine, this exporter has worked fine. This openstack is a test environment with only one computer.
Then, I have installed in our production openstack environment without success, and I'm not able to see the problem. I can't get any metric. In this openstack environment we have 3 controller servers:
controller2: manage the network controller3: manage the storage controller1: manage the rest of the openstack components
I have installed the exporter in the controller1 with a dedicated openstack user to avoid use the admin user.
If from the own controller1 machine I try to get the metric I can see an 500 error:
This is the content of the prometheus-openstack-exporter.yaml file (although we have swift, it is commented just as a test to check if it was the problem):
This is the content of the admin.novarc file
And this is the log info when the service is running, nothing happens when I try to get the metrics. Note that in the development openstack, we get the same problem with the list_projects but it works fine, we can get the metrics.
Tell me if you need I upload more information.
Any help to find the problem would be appreciated. Thanks a lot.