Advertisement
Guest User

Untitled

a guest
Jun 14th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import eventlet
  4.  
  5. import datetime
  6. from oslo_utils import timeutils
  7.  
  8. import novaclient.client
  9. import ceilometerclient.client
  10. from keystoneauth1.identity.v3 import Password
  11. from keystoneauth1.session import Session
  12.  
  13. PERIOD = 1200
  14.  
  15. pw = Password(auth_url='http://10.127.32.66:5000/v3',
  16. username='admin',
  17. password='Mirantis01',
  18. user_domain_name='Default',
  19. project_name='admin',
  20. project_domain_name='Default')
  21. sess = Session(auth=pw)
  22.  
  23. nc = novaclient.client.Client('2', session=sess, region_name='KVM')
  24. cc = ceilometerclient.client.get_client('2', session=sess, region_name='KVM')
  25.  
  26. vm_hv_map = {}
  27. hvs_without_metrics = set()
  28. troubled_vms = set()
  29.  
  30. def get_vms_on_hvs():
  31. all_vms = []
  32. vms = nc.servers.list(search_opts={'all_tenants': True})
  33. while len(vms) > 0:
  34. all_vms.extend(vms)
  35. vms = nc.servers.list(search_opts={'all_tenants': True},
  36. marker=vms[-1].id)
  37. all_vms = nc.servers.list(search_opts={'all_tenants': True})
  38. for vm in all_vms:
  39. hv_name = vm.to_dict()['OS-EXT-SRV-ATTR:hypervisor_hostname']
  40. vm_hv_map[vm] = hv_name
  41. return all_vms
  42.  
  43. def check_vm_has_metrics(vm):
  44. end_time = datetime.datetime.utcnow()
  45. start_time = end_time - datetime.timedelta(seconds=int(PERIOD))
  46. query = [
  47. {
  48. "field": "resource_id",
  49. "op": "eq",
  50. "value": vm.id
  51. },
  52. {
  53. "field": "timestamp",
  54. "op": "ge",
  55. "value": start_time.isoformat()
  56. },
  57. {
  58. "field": "timestamp",
  59. "op": "le",
  60. "value": end_time.isoformat()
  61. },
  62. ]
  63. cpu_util = cc.statistics.list(
  64. meter_name="cpu_util",
  65. q=query,
  66. aggregates=[{"func": "avg"}, {"func": "stddev"}])
  67. ram_util = cc.statistics.list(
  68. meter_name="memory.usage",
  69. q=query,
  70. aggregates=[{"func": "avg"}, {"func": "stddev"}])
  71. if not cpu_util or not ram_util:
  72. hvs_without_metrics.add(vm_hv_map[vm])
  73. troubled_vms.add(vm)
  74. return
  75. cpu_util_avg = cpu_util[-1]._info.get('aggregate').get("avg")
  76. cpu_util_stddev = cpu_util[-1]._info.get('aggregate').get("stddev")
  77. ram_util_avg = ram_util[-1]._info.get('aggregate').get("avg")
  78. ram_util_stddev = ram_util[-1]._info.get('aggregate').get("stddev")
  79. if (cpu_util_avg is None or cpu_util_stddev is None or
  80. ram_util_avg is None or ram_util_stddev is None):
  81. hvs_without_metrics.add(vm_hv_map[vm])
  82. troubled_vms.add(vm)
  83.  
  84. vms_processed = 0
  85.  
  86. def get_vms_loads(vms):
  87. global vms_processed
  88. load_dict = {}
  89. pile = eventlet.GreenPile()
  90. for vm in vms:
  91. if vm.status == 'ACTIVE':
  92. vms_processed += 1
  93. pile.spawn(check_vm_has_metrics, vm)
  94. for answer in pile:
  95. pass
  96.  
  97. all_vms = get_vms_on_hvs()
  98. get_vms_loads(all_vms)
  99.  
  100. print "%d vms processed" % (vms_processed)
  101. if len(hvs_without_metrics) == 0:
  102. print "All vms have metrics needed by watcher. We gucci!"
  103. else:
  104. print "\nTroubled vms:"
  105. for vm in troubled_vms:
  106. print vm.id
  107. print "\nHypervisors without some metrics:"
  108. for hv_name in hvs_without_metrics:
  109. print hv_name
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement