Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import eventlet
- import datetime
- from oslo_utils import timeutils
- import novaclient.client
- import ceilometerclient.client
- from keystoneauth1.identity.v3 import Password
- from keystoneauth1.session import Session
- PERIOD = 1200
- pw = Password(auth_url='http://10.127.32.66:5000/v3',
- username='admin',
- password='Mirantis01',
- user_domain_name='Default',
- project_name='admin',
- project_domain_name='Default')
- sess = Session(auth=pw)
- nc = novaclient.client.Client('2', session=sess, region_name='KVM')
- cc = ceilometerclient.client.get_client('2', session=sess, region_name='KVM')
- vm_hv_map = {}
- hvs_without_metrics = set()
- troubled_vms = set()
- def get_vms_on_hvs():
- all_vms = []
- vms = nc.servers.list(search_opts={'all_tenants': True})
- while len(vms) > 0:
- all_vms.extend(vms)
- vms = nc.servers.list(search_opts={'all_tenants': True},
- marker=vms[-1].id)
- all_vms = nc.servers.list(search_opts={'all_tenants': True})
- for vm in all_vms:
- hv_name = vm.to_dict()['OS-EXT-SRV-ATTR:hypervisor_hostname']
- vm_hv_map[vm] = hv_name
- return all_vms
- def check_vm_has_metrics(vm):
- end_time = datetime.datetime.utcnow()
- start_time = end_time - datetime.timedelta(seconds=int(PERIOD))
- query = [
- {
- "field": "resource_id",
- "op": "eq",
- "value": vm.id
- },
- {
- "field": "timestamp",
- "op": "ge",
- "value": start_time.isoformat()
- },
- {
- "field": "timestamp",
- "op": "le",
- "value": end_time.isoformat()
- },
- ]
- cpu_util = cc.statistics.list(
- meter_name="cpu_util",
- q=query,
- aggregates=[{"func": "avg"}, {"func": "stddev"}])
- ram_util = cc.statistics.list(
- meter_name="memory.usage",
- q=query,
- aggregates=[{"func": "avg"}, {"func": "stddev"}])
- if not cpu_util or not ram_util:
- hvs_without_metrics.add(vm_hv_map[vm])
- troubled_vms.add(vm)
- return
- cpu_util_avg = cpu_util[-1]._info.get('aggregate').get("avg")
- cpu_util_stddev = cpu_util[-1]._info.get('aggregate').get("stddev")
- ram_util_avg = ram_util[-1]._info.get('aggregate').get("avg")
- ram_util_stddev = ram_util[-1]._info.get('aggregate').get("stddev")
- if (cpu_util_avg is None or cpu_util_stddev is None or
- ram_util_avg is None or ram_util_stddev is None):
- hvs_without_metrics.add(vm_hv_map[vm])
- troubled_vms.add(vm)
- vms_processed = 0
- def get_vms_loads(vms):
- global vms_processed
- load_dict = {}
- pile = eventlet.GreenPile()
- for vm in vms:
- if vm.status == 'ACTIVE':
- vms_processed += 1
- pile.spawn(check_vm_has_metrics, vm)
- for answer in pile:
- pass
- all_vms = get_vms_on_hvs()
- get_vms_loads(all_vms)
- print "%d vms processed" % (vms_processed)
- if len(hvs_without_metrics) == 0:
- print "All vms have metrics needed by watcher. We gucci!"
- else:
- print "\nTroubled vms:"
- for vm in troubled_vms:
- print vm.id
- print "\nHypervisors without some metrics:"
- for hv_name in hvs_without_metrics:
- print hv_name
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement