zabbix_export: version: '7.0' template_groups: - uuid: c2c162144c2d4c5491c8801193af4945 name: Templates/Cloud host_groups: - uuid: 137f19e6e2dc4219b33553b812627bc2 name: 'Virtual machines' templates: - uuid: 4e3fb27f028e4c35b8c9fc43b11c07d7 template: 'OpenStack by HTTP' name: 'OpenStack by HTTP' description: | Requests OpenStack API access token and discovers available OpenStack services using OpenStack Identity API by HTTP using script item and creates host prototypes for them. Template uses OpenStack application credentials for authorization. Zabbix currently supports OpenStack Nova service. Read the template documentation prior to using this template. You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback Generated by official Zabbix template tool "Templator" 2.0.0 vendor: name: Zabbix version: 7.0-0 groups: - name: Templates/Cloud items: - uuid: 0518d08edbf2480abf15f4ef0e7a251a name: 'OpenStack: Get access token and service catalog' type: SCRIPT key: openstack.identity.auth delay: '{$OPENSTACK.AUTH.INTERVAL}' history: '0' trends: '0' value_type: TEXT params: | // Script for authenticating, receiving API token and supported service catalog from OpenStack Identity service. const request_path = '/v3/auth/tokens'; function checkParams(params) { ['api_url', 'app_cred_id', 'app_cred_secret'].forEach(function (field) { if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') { throw 'Required param is not set: ' + field + '.'; } }); return params; } function getHttpData(url, params, app_cred_id, app_cred_secret) { const request = new HttpRequest(); request.addHeader('Content-Type: application/json'); // use correct format for authenticating with application credential const request_body = { "auth": { "identity": { "methods": [ "application_credential" ], "application_credential": { "id": app_cred_id, "secret": app_cred_secret } } } }; // set proxy if needed if (params['http_proxy']) { request.setProxy(params['http_proxy']) Zabbix.log(4, '[ Openstack Nova API ] Using http proxy: ' + params['http_proxy']); } const response = request.post(url, JSON.stringify(request_body)); Zabbix.log(4, '[ Openstack Identity API ] [ ' + url + ' ] Received response with status code ' + request.getStatus() + ': ' + response); // check if request status is OK if (request.getStatus() !== 201) { if (typeof (response.error && response.error.message) !== 'undefined') { throw response.error.message; } else { throw 'Failed to receive data: invalid response status code. Check debug log for more information.'; } } // return a list with request and response objects return {'request': request, 'response': response}; } function parseHttpData(http_data) { // parse header and check if it is valid var token; const headers = http_data['request'].getHeaders(true); if (typeof headers === "object") { if (headers !== null) { try { token = headers["X-Subject-Token"][0]; // save received token } catch (error) { throw 'Failed to parse response received from OpenStack Identity API. Check debug log for more information.'; } } else { throw 'Response object is empty. Check debug log for more information.'; } } else { throw 'Cannot process response data: received data is not an object. Check debug log for more information.'; } // define supported OpenStack services in Zabbix const supported_services = ['nova']; // parse the response body and filter out only the services supported by Zabbix with the needed data only var ret = []; const data = JSON.parse(http_data['response']); // check if service catalog exists if (data['token']['catalog']) { const service_catalog = data['token']['catalog']; } else { throw 'Cannot find service catalog in HTTP response.' } service_catalog.forEach(function (service) { // loop through service catalog if (supported_services.indexOf(service.name) > -1) { // check if service is supported by Zabbix service.endpoints.forEach(function (endpoint) { // loop through each endpoint for catalog if (endpoint.interface === 'public') { // check if service has a public interface ret.push({ // if true, save service name, service url and token 'service_name': service.name[0].toUpperCase() + service.name.slice(1), // capitalize first char in service_name 'service_url': endpoint.url, 'token': token }); } }) } }); // return list of dictionaries of service name, url and access token return JSON.stringify(ret); } const params = checkParams(JSON.parse(value)), url = params.api_url, auth_cred_id = params.app_cred_id, auth_cred_secret = params.app_cred_secret; const httpData = getHttpData(url + request_path, params, auth_cred_id, auth_cred_secret); return parseHttpData(httpData); description: 'Authorizes user on the OpenStack Identity service and gets the service catalog.' timeout: 10s parameters: - name: api_url value: '{$OPENSTACK.KEYSTONE.API.ENDPOINT}' - name: app_cred_id value: '{$OPENSTACK.APP.CRED.ID}' - name: app_cred_secret value: '{$OPENSTACK.APP.CRED.SECRET}' - name: http_proxy value: '{$OPENSTACK.HTTP.PROXY}' tags: - tag: component value: raw discovery_rules: - uuid: f827e364d7bd4013b02504a58fdc2d39 name: 'OpenStack: Nova discovery' type: DEPENDENT key: openstack.services.nova.discovery delay: '0' filter: conditions: - macro: '{#SERVICE_NAME}' value: ^Nova$ formulaid: A description: 'Discovers OpenStack services from the monitoring user''s services catalog.' host_prototypes: - uuid: 580d769292ec48379c5b84cd5c72533b host: 'OpenStack {#SERVICE_NAME}' name: 'OpenStack {#SERVICE_NAME}' group_links: - group: name: 'Virtual machines' templates: - name: 'OpenStack Nova by HTTP' macros: - macro: '{$OPENSTACK.NOVA.SERVICE.URL}' value: '{#SERVICE_URL}' description: 'OpenStack Nova service path.' - macro: '{$OPENSTACK.TOKEN}' value: '{#TOKEN}' description: 'OpenStack authorization token.' master_item: key: openstack.identity.auth lld_macro_paths: - lld_macro: '{#SERVICE_NAME}' path: $.service_name - lld_macro: '{#SERVICE_URL}' path: $.service_url - lld_macro: '{#TOKEN}' path: $.token tags: - tag: class value: cloud - tag: target value: openstack macros: - macro: '{$OPENSTACK.APP.CRED.ID}' description: 'Application credential ID for monitoring user access.' - macro: '{$OPENSTACK.APP.CRED.SECRET}' type: SECRET_TEXT description: 'Application credential password for monitoring user access.' - macro: '{$OPENSTACK.AUTH.INTERVAL}' value: 50m description: 'API token regeneration interval, in minutes. By default, OpenStack API tokens expire after 60m.' - macro: '{$OPENSTACK.HTTP.PROXY}' description: 'Sets the HTTP proxy for the authorization item. Host prototypes will also use this value for HTTP proxy. If this parameter is empty, then no proxy is used.' - macro: '{$OPENSTACK.KEYSTONE.API.ENDPOINT}' description: 'API endpoint for Identity Service, e.g., https://local.openstack:5000.' - uuid: ff637e001b91472d8730eb7f10e65800 template: 'OpenStack Nova by HTTP' name: 'OpenStack Nova by HTTP' description: | Discovers and monitors project limits, servers, services, hypervisors, availability zones, hypervisors and tenants with OpenStack Compute API by HTTP using script and HTTP agent items. This template receives token and service URL from parent host, therefore no additional configuration is necessary. Read the template documentation prior to using this template. You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback Generated by official Zabbix template tool "Templator" 2.0.0 vendor: name: Zabbix version: 7.0-0 groups: - name: Templates/Cloud items: - uuid: 87d263a6f797439c8c7699d96f4305fb name: 'Nova: Get availability zones' type: HTTP_AGENT key: openstack.nova.availability_zone.get delay: '{$OPENSTACK.NOVA.INTERVAL.AVAILABILITY_ZONE}' history: '0' trends: '0' value_type: TEXT description: 'Gets a list of availability zones and its data.' preprocessing: - type: JSONPATH parameters: - $.availabilityZoneInfo error_handler: CUSTOM_ERROR error_handler_params: 'Could not get availability zones list' timeout: 10s url: '{$OPENSTACK.NOVA.SERVICE.URL}/os-availability-zone/detail' http_proxy: '{$OPENSTACK.HTTP.PROXY}' headers: - name: X-Auth-Token value: '{$OPENSTACK.TOKEN}' tags: - tag: component value: raw - uuid: c4297b412ad54bae85a1219e2d988bcb name: 'Nova: Get hypervisors' type: HTTP_AGENT key: openstack.nova.hypervisors.get delay: '{$OPENSTACK.NOVA.INTERVAL.HYPERVISOR}' history: '0' trends: '0' value_type: TEXT description: 'Gets a list of hypervisors and its data.' preprocessing: - type: JSONPATH parameters: - $.hypervisors error_handler: CUSTOM_ERROR error_handler_params: 'Could not get hypervisors list' timeout: 10s url: '{$OPENSTACK.NOVA.SERVICE.URL}/os-hypervisors/detail' http_proxy: '{$OPENSTACK.HTTP.PROXY}' headers: - name: X-Auth-Token value: '{$OPENSTACK.TOKEN}' tags: - tag: component value: raw - uuid: 02698d2fcd2949868013dedb311b8db3 name: 'Nova: Get absolute limits' type: HTTP_AGENT key: openstack.nova.limits.get delay: '{$OPENSTACK.NOVA.INTERVAL.LIMITS}' history: '0' trends: '0' value_type: TEXT description: 'Gets absolute limits for the project.' preprocessing: - type: JSONPATH parameters: - $.limits.absolute error_handler: CUSTOM_ERROR error_handler_params: 'Could not get absolute project limits' timeout: 10s url: '{$OPENSTACK.NOVA.SERVICE.URL}/limits' http_proxy: '{$OPENSTACK.HTTP.PROXY}' headers: - name: X-Auth-Token value: '{$OPENSTACK.TOKEN}' tags: - tag: component value: raw - uuid: bea005220b704f1fb6ca523647ae24ce name: 'Nova: Instances count, current' type: DEPENDENT key: openstack.nova.limits.instances.current delay: '0' history: 7d description: 'Number of servers in each tenant.' preprocessing: - type: JSONPATH parameters: - $.totalInstancesUsed master_item: key: openstack.nova.limits.get tags: - tag: component value: environment - uuid: 29898c0cb13d4ccebc3da95c082da29b name: 'Nova: Instances count, free' type: CALCULATED key: openstack.nova.limits.instances.free delay: '{$OPENSTACK.NOVA.INTERVAL.LIMITS}' history: 7d params: last(//openstack.nova.limits.instances.max)-last(//openstack.nova.limits.instances.current) description: 'Number of available servers for each tenant.' preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h tags: - tag: component value: environment - uuid: 7526be4743564c32a293f96daf7cb242 name: 'Nova: Instances count, max' type: DEPENDENT key: openstack.nova.limits.instances.max delay: '0' history: 7d description: 'Number of allowed servers for each tenant.' preprocessing: - type: JSONPATH parameters: - $.maxTotalInstances master_item: key: openstack.nova.limits.get tags: - tag: component value: environment - uuid: 64ae014b201945f299f80080dc63176d name: 'Nova: RAM usage, current' type: DEPENDENT key: openstack.nova.limits.ram.current delay: '0' history: 7d units: b description: 'Amount of used server RAM.' preprocessing: - type: JSONPATH parameters: - $.totalRAMUsed - type: MULTIPLIER parameters: - '1048576' master_item: key: openstack.nova.limits.get tags: - tag: component value: environment - uuid: bdc1492bbb5c4bcd844eaa6f6e76c1ff name: 'Nova: RAM usage, free' type: CALCULATED key: openstack.nova.limits.ram.free delay: '{$OPENSTACK.NOVA.INTERVAL.LIMITS}' history: 7d units: b params: last(//openstack.nova.limits.ram.max)-last(//openstack.nova.limits.ram.current) description: 'Amount of available server RAM.' preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h tags: - tag: component value: environment - uuid: 50f2128cace04cf5a783e438de813e72 name: 'Nova: RAM usage, max' type: DEPENDENT key: openstack.nova.limits.ram.max delay: '0' history: 7d units: b description: 'Amount of allowed server RAM.' preprocessing: - type: JSONPATH parameters: - $.maxTotalRAMSize - type: MULTIPLIER parameters: - '1048576' master_item: key: openstack.nova.limits.get tags: - tag: component value: environment - uuid: 678f2c0017f54d8b827876005f6ca670 name: 'Nova: vCPUs usage, current' type: DEPENDENT key: openstack.nova.limits.vcpu.current delay: '0' history: 7d description: 'Number of used server cores in each tenant.' preprocessing: - type: JSONPATH parameters: - $.totalCoresUsed master_item: key: openstack.nova.limits.get tags: - tag: component value: environment - uuid: 97d3b897722d4910aea8e4c3c5f6c9a9 name: 'Nova: vCPUs usage, free' type: CALCULATED key: openstack.nova.limits.vcpu.free delay: '{$OPENSTACK.NOVA.INTERVAL.LIMITS}' history: 7d params: last(//openstack.nova.limits.vcpu.max)-last(//openstack.nova.limits.vcpu.current) description: 'Number of available server cores for each tenant.' preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h tags: - tag: component value: environment - uuid: e0583793b29b4bb195198d196cc1f0cc name: 'Nova: vCPUs usage, max' type: DEPENDENT key: openstack.nova.limits.vcpu.max delay: '0' history: 7d description: 'Number of allowed server cores for each tenant.' preprocessing: - type: JSONPATH parameters: - $.maxTotalCores master_item: key: openstack.nova.limits.get tags: - tag: component value: environment - uuid: 85d746d8b6cf404f95eeb7903c2e66e0 name: 'Nova: Get servers' type: HTTP_AGENT key: openstack.nova.servers.get delay: '{$OPENSTACK.NOVA.INTERVAL.SERVERS}' history: '0' trends: '0' value_type: TEXT description: 'Gets a list of servers.' preprocessing: - type: JSONPATH parameters: - $.servers error_handler: CUSTOM_ERROR error_handler_params: 'Could not get servers list' timeout: 10s url: '{$OPENSTACK.NOVA.SERVICE.URL}/servers' http_proxy: '{$OPENSTACK.HTTP.PROXY}' headers: - name: X-Auth-Token value: '{$OPENSTACK.TOKEN}' tags: - tag: component value: raw - uuid: 3db93b6116ad416eb10da851cce385a1 name: 'Nova: Get compute services' type: HTTP_AGENT key: openstack.nova.services.get delay: '{$OPENSTACK.NOVA.INTERVAL.SERVICES}' history: '0' trends: '0' value_type: TEXT description: 'Gets a list of compute services and its data.' preprocessing: - type: JSONPATH parameters: - $.services error_handler: CUSTOM_ERROR error_handler_params: 'Could not get compute services list' timeout: 10s url: '{$OPENSTACK.NOVA.SERVICE.URL}/os-services' http_proxy: '{$OPENSTACK.HTTP.PROXY}' headers: - name: X-Auth-Token value: '{$OPENSTACK.TOKEN}' tags: - tag: component value: raw - uuid: c258e567922c4f71a4dee9c0d6b88b1e name: 'Nova: Get tenants' type: SCRIPT key: openstack.nova.tenant.get delay: '{$OPENSTACK.NOVA.INTERVAL.TENANTS}' history: '0' trends: '0' value_type: TEXT params: | // Script for getting tenant usage statistics for a specific time period until now (year, month, week, day). const request_path = '/os-simple-tenant-usage'; function checkParams(params) { ['api_url', 'api_token', 'period'].forEach(function (field) { if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') { throw 'Required param is not set: ' + field + '.'; } if (field === 'period') { const supported_values = ['y', 'm', 'w', 'd'] if (supported_values.indexOf(params[field]) === -1) { throw 'Tenant period not correctly set. Expected one of "y", "m", "w", "d"; received: ' + field + '.'; } } }); return params; } function buildUrl(url, period) { const current_date = new Date(); var datetime_formatted = '' switch (period) { case 'y': // if user-selected period is this year datetime_formatted = current_date.getFullYear() + '-' + // year '1-' + // month '1T' + // date '00:00:00' // time break; case 'm': // if user-selected period is this month datetime_formatted = current_date.getFullYear() + '-' + // year (current_date.getMonth() + 1) + '-' + // month '1T' + // date '00:00:00' // time break; case 'w': // if user-selected period is this week const first_date_of_week = current_date.getDate() - current_date.getDay() + 1 datetime_formatted = current_date.getFullYear() + '-' + // year (current_date.getMonth() + 1) + '-' + // month first_date_of_week + 'T' + // date '00:00:00' // time break; case 'd': // if user-selected period is this day datetime_formatted = current_date.getFullYear() + '-' + // year (current_date.getMonth() + 1) + '-' + // month current_date.getDate() + 'T' + // date '00:00:00' // time break; } return url + request_path + '?' + 'start=' + encodeURIComponent(datetime_formatted) } function getHttpData(url, params, api_token) { const request = new HttpRequest(); request.addHeader('Content-Type: application/json'); request.addHeader('X-Auth-Token: ' + api_token); // set proxy if needed if (params['http_proxy']) { request.setProxy(params['http_proxy']) Zabbix.log(4, '[ Openstack Nova API ] Using http proxy: ' + params['http_proxy']); } const response = request.get(url, JSON.stringify(params)); Zabbix.log(4, '[ Openstack Nova API ] [ ' + url + ' ] Received response with status code ' + request.getStatus() + ': ' + response); // check if request status is OK if (request.getStatus() !== 200) { if (typeof (response.error && response.error.message) !== 'undefined') { throw response.error.message; } else { throw 'Failed to receive data: invalid response status code ( ' + request.getStatus() + ' ). Check debug log for more information.'; } } // return a list with request and response objects return response; } const params = checkParams(JSON.parse(value)), url = params.api_url, token = params.api_token, period = params.period; return getHttpData(buildUrl(url, period), params, token); description: 'Gets a list of tenants and its data.' preprocessing: - type: JSONPATH parameters: - $.tenant_usages error_handler: CUSTOM_ERROR error_handler_params: 'Could not get tenant list' timeout: 10s parameters: - name: api_url value: '{$OPENSTACK.NOVA.SERVICE.URL}' - name: api_token value: '{$OPENSTACK.TOKEN}' - name: period value: '{$OPENSTACK.NOVA.TENANT.PERIOD}' - name: http_proxy value: '{$OPENSTACK.HTTP.PROXY}' tags: - tag: component value: raw discovery_rules: - uuid: 55f919d49a364921a0e63e51dcabe9e2 name: 'Nova: Availability zones discovery' type: DEPENDENT key: openstack.nova.availability_zone.discovery delay: '0' filter: evaltype: AND conditions: - macro: '{#ZONE_NAME}' value: '{$OPENSTACK.AVAILABILITY_ZONE.DISCOVERY.NAME.MATCHES}' formulaid: A - macro: '{#ZONE_NAME}' value: '{$OPENSTACK.AVAILABILITY_ZONE.DISCOVERY.NAME.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: B lifetime: 7d description: 'Discovers OpenStack Nova availability zones.' item_prototypes: - uuid: 46f1348ce86742a6a645e137b0ecea63 name: 'Availability zone [{#ZONE_NAME}]: Host count' type: DEPENDENT key: 'openstack.nova.availability_zone.host_count[{#ZONE_NAME}]' delay: '0' history: 7d description: 'Count of hosts and service objects under single availability zone.' preprocessing: - type: JSONPATH parameters: - '$[''hosts''].[*].[*].length()' error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed availability zone report' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.availability_zone.raw[{#ZONE_NAME}]' tags: - tag: component value: application - tag: component value: zone - uuid: 988be318a8d345e4ba1d339e7e877a2c name: 'Availability zone [{#ZONE_NAME}]: Raw data' type: DEPENDENT key: 'openstack.nova.availability_zone.raw[{#ZONE_NAME}]' delay: '0' history: '0' trends: '0' value_type: TEXT description: 'Raw data of the availability zone.' preprocessing: - type: JSONPATH parameters: - '$[?(@.zoneName == "{#ZONE_NAME}")].first()' error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed availability zone report' master_item: key: openstack.nova.availability_zone.get tags: - tag: component value: raw - uuid: 2d99e000412244b998417c19399a8ff9 name: 'Availability zone [{#ZONE_NAME}]: State' type: DEPENDENT key: 'openstack.nova.availability_zone.state[{#ZONE_NAME}]' delay: '0' history: 7d description: 'Current state of the availability zone.' valuemap: name: 'Availability zone state' preprocessing: - type: JSONPATH parameters: - $.zoneState.available error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed availability zone report' - type: BOOL_TO_DECIMAL parameters: - '' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.availability_zone.raw[{#ZONE_NAME}]' tags: - tag: component value: application - tag: component value: zone trigger_prototypes: - uuid: 0b4865c81de741b8a96574eeb450cf40 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.availability_zone.state[{#ZONE_NAME}])=0' name: 'Availability zone [{#ZONE_NAME}]: Zone is unavailable' opdata: 'Current zone state: {ITEM.LASTVALUE}' priority: WARNING description: 'Availability zone is not available.' manual_close: 'YES' tags: - tag: scope value: availability master_item: key: openstack.nova.availability_zone.get lld_macro_paths: - lld_macro: '{#ZONE_NAME}' path: $.zoneName preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h - uuid: 84b17b240632413fbc3cd5b261cc2fd6 name: 'Nova: Hypervisor discovery' type: DEPENDENT key: openstack.nova.hypervisors.discovery delay: '0' filter: evaltype: AND conditions: - macro: '{#HOSTNAME}' value: '{$OPENSTACK.HYPERVISOR.DISCOVERY.HOSTNAME.MATCHES}' formulaid: A - macro: '{#HOSTNAME}' value: '{$OPENSTACK.HYPERVISOR.DISCOVERY.HOSTNAME.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: B - macro: '{#TYPE}' value: '{$OPENSTACK.HYPERVISOR.DISCOVERY.TYPE.MATCHES}' formulaid: E - macro: '{#TYPE}' value: '{$OPENSTACK.HYPERVISOR.DISCOVERY.TYPE.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: F - macro: '{#HOST_IP}' value: '{$OPENSTACK.HYPERVISOR.DISCOVERY.IP.MATCHES}' formulaid: C - macro: '{#HOST_IP}' value: '{$OPENSTACK.HYPERVISOR.DISCOVERY.IP.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: D lifetime: 7d description: 'Discovers OpenStack Nova hypervisors.' item_prototypes: - uuid: 3edd8fcf7d3643119b7b21111155fcc0 name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: Raw data' type: DEPENDENT key: 'openstack.nova.hypervisors.raw[{#ID}]' delay: '0' history: '0' trends: '0' value_type: TEXT description: 'Raw data of the hypervisor.' preprocessing: - type: JSONPATH parameters: - '$[?(@.id == "{#ID}")].first()' error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed hypervisor report' master_item: key: openstack.nova.hypervisors.get tags: - tag: component value: raw - uuid: ef893a8517414964ade5d40064291f87 name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: State' type: DEPENDENT key: 'openstack.nova.hypervisors.state[{#ID}]' delay: '0' history: 7d description: 'State of the hypervisor.' valuemap: name: 'General state' preprocessing: - type: JSONPATH parameters: - $.state error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed hypervisor report' - type: JAVASCRIPT parameters: - | const idx = [ // 10 - Unknown (default) 'down', // 0 'up' // 1 ].indexOf(value); return idx !== -1 ? idx : 10; - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.hypervisors.raw[{#ID}]' tags: - tag: component value: application - tag: component value: hypervisor trigger_prototypes: - uuid: 5fb5ed829d9747499c385d268bf229ea expression: 'last(/OpenStack Nova by HTTP/openstack.nova.hypervisors.state[{#ID}])=0' name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: State is "down"' opdata: 'Current state: {ITEM.LASTVALUE}' priority: WARNING description: 'State of the hypervisor is "down".' manual_close: 'YES' tags: - tag: scope value: availability - uuid: 26d06619594049c594998359a4659686 name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: Status' type: DEPENDENT key: 'openstack.nova.hypervisors.status[{#ID}]' delay: '0' history: 7d description: 'Status of the hypervisor.' valuemap: name: 'General status' preprocessing: - type: JSONPATH parameters: - $.status error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed hypervisor report' - type: JAVASCRIPT parameters: - | const idx = [ // 10 - Unknown (default) 'disabled', // 0 'enabled' // 1 ].indexOf(value); return idx !== -1 ? idx : 10; - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.hypervisors.raw[{#ID}]' tags: - tag: component value: application - tag: component value: hypervisor trigger_prototypes: - uuid: 5022a6a84f884a31be1ff440a3c14732 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.hypervisors.status[{#ID}])=0' name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: Status is "disabled"' opdata: 'Current status: {ITEM.LASTVALUE}' priority: INFO description: 'Status of the hypervisor is disabled.' manual_close: 'YES' tags: - tag: scope value: availability - uuid: 5e9ced69d41d40ffabb04f9fd88b7730 name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: Version' type: DEPENDENT key: 'openstack.nova.hypervisors.version[{#ID}]' delay: '0' history: 7d value_type: FLOAT description: 'Hypervisor version.' preprocessing: - type: JSONPATH parameters: - $.hypervisor_version error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed hypervisor report' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.hypervisors.raw[{#ID}]' tags: - tag: component value: application - tag: component value: hypervisor trigger_prototypes: - uuid: 958ce612bb0a4b1ea67aba594dbd53b3 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.hypervisors.version[{#ID}])<>last(/OpenStack Nova by HTTP/openstack.nova.hypervisors.version[{#ID}],#2) and length(last(/OpenStack Nova by HTTP/openstack.nova.hypervisors.version[{#ID}]))>0' name: 'Hypervisor [{#ID}]:[{#HOSTNAME}]: Version has changed' opdata: 'Current version: {ITEM.LASTVALUE}' priority: INFO description: 'Version of the hypervisor has changed. Acknowledge to close the problem manually.' manual_close: 'YES' tags: - tag: scope value: notice master_item: key: openstack.nova.hypervisors.get lld_macro_paths: - lld_macro: '{#HOSTNAME}' path: $.hypervisor_hostname - lld_macro: '{#HOST_IP}' path: $.host_ip - lld_macro: '{#ID}' path: $.id - lld_macro: '{#TYPE}' path: $.hypervisor_type preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h - uuid: b38111e1499f414cbe662fada0d40b10 name: 'Nova: Servers discovery' type: DEPENDENT key: openstack.nova.server.discovery delay: '0' filter: evaltype: AND conditions: - macro: '{#SERVER_NAME}' value: '{$OPENSTACK.SERVER.DISCOVERY.NAME.MATCHES}' formulaid: A - macro: '{#SERVER_NAME}' value: '{$OPENSTACK.SERVER.DISCOVERY.NAME.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: B lifetime: 7d description: 'Discovers OpenStack Nova servers.' item_prototypes: - uuid: 84fd4be0c5f84744ac6bd93d4d4e8f0e name: 'Server [{#SERVER_ID}]:[{#SERVER_NAME}]: Status' type: HTTP_AGENT key: 'openstack.nova.server.status.get[{#SERVER_ID}]' delay: '{$OPENSTACK.NOVA.INTERVAL.SERVERS}' history: 7d description: 'Server status.' valuemap: name: 'Server status' preprocessing: - type: JSONPATH parameters: - $.server.status error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed server report' - type: JAVASCRIPT parameters: - | const idx = [ // 30 - Unknown (default) 'SHUTOFF', // 0 'ACTIVE', // 1 'PAUSED', // 2 'BUILD', // 3 'DELETED', // 4 'ERROR', // 5 'HARD_REBOOT', // 6 'MIGRATING', // 7 'PASSWORD', // 8 'REBOOT', // 9 'REBUILD', // 10 'RESCUE', // 11 'RESIZE', // 12 'REVERT_RESIZE', // 13 'SHELVED', // 14 'SHELVED_OFFLOADED',// 15 'SOFT_DELETED', // 16 'SUSPENDED', // 17 'UNKNOWN', // 18 'VERIFY_RESIZE', // 19 ].indexOf(value); return idx !== -1 ? idx : 30; - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h timeout: 10s url: '{$OPENSTACK.NOVA.SERVICE.URL}/servers/{#SERVER_ID}' http_proxy: '{$OPENSTACK.HTTP.PROXY}' headers: - name: X-Auth-Token value: '{$OPENSTACK.TOKEN}' tags: - tag: component value: application - tag: component value: server trigger_prototypes: - uuid: 490262a25fb842c9a9b83a2e0be83654 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.server.status.get[{#SERVER_ID}])<>last(/OpenStack Nova by HTTP/openstack.nova.server.status.get[{#SERVER_ID}],#2) and length(last(/OpenStack Nova by HTTP/openstack.nova.server.status.get[{#SERVER_ID}]))>0' name: 'Server [{#SERVER_ID}]:[{#SERVER_NAME}]: Status has changed' opdata: 'Current status: {ITEM.LASTVALUE}' priority: INFO description: 'Status of the server has changed. Acknowledge to close the problem manually.' manual_close: 'YES' dependencies: - name: 'Server [{#SERVER_ID}]:[{#SERVER_NAME}]: Status is "ERROR"' expression: 'last(/OpenStack Nova by HTTP/openstack.nova.server.status.get[{#SERVER_ID}])=5' tags: - tag: scope value: availability - uuid: 7d2ca81f24154099b3857aeaadef114f expression: 'last(/OpenStack Nova by HTTP/openstack.nova.server.status.get[{#SERVER_ID}])=5' name: 'Server [{#SERVER_ID}]:[{#SERVER_NAME}]: Status is "ERROR"' opdata: 'Current status: {ITEM.LASTVALUE}' priority: HIGH description: 'Server is in "ERROR" status.' manual_close: 'YES' tags: - tag: scope value: availability master_item: key: openstack.nova.servers.get lld_macro_paths: - lld_macro: '{#SERVER_ID}' path: $.id - lld_macro: '{#SERVER_NAME}' path: $.name preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h - uuid: 4af40cd615d74e54a3759041470995fe name: 'Nova: Compute services discovery' type: DEPENDENT key: openstack.nova.services.discovery delay: '0' filter: evaltype: AND conditions: - macro: '{#HOST}' value: '{$OPENSTACK.SERVICES.DISCOVERY.HOST.MATCHES}' formulaid: C - macro: '{#HOST}' value: '{$OPENSTACK.SERVICES.DISCOVERY.HOST.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: D - macro: '{#BINARY}' value: '{$OPENSTACK.SERVICES.DISCOVERY.BINARY.MATCHES}' formulaid: A - macro: '{#BINARY}' value: '{$OPENSTACK.SERVICES.DISCOVERY.BINARY.NOT_MATCHES}' operator: NOT_MATCHES_REGEX formulaid: B lifetime: 7d description: 'Discovers OpenStack compute services.' item_prototypes: - uuid: 3bd724dad043411187a86466cf8ee2c6 name: 'Compute service [{#HOST}]:[{#BINARY}]:[{#ID}]: Disabling reason' type: DEPENDENT key: 'openstack.nova.services.disabled.reason[{#ID}]' delay: '0' history: 7d trends: '0' value_type: CHAR description: 'Reason for disabling a service.' valuemap: name: 'Compute service disabling reason' preprocessing: - type: JSONPATH parameters: - $.disabled_reason error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed services report' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.services.raw[{#ID}]' tags: - tag: component value: application - tag: component value: service - uuid: 60c5f4461ad84269983168b359a0ff87 name: 'Compute service [{#HOST}]:[{#BINARY}]:[{#ID}]: Raw data' type: DEPENDENT key: 'openstack.nova.services.raw[{#ID}]' delay: '0' history: '0' trends: '0' value_type: TEXT description: 'Raw data of the service.' preprocessing: - type: JSONPATH parameters: - '$[?(@.id == "{#ID}")].first()' error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed services report' master_item: key: openstack.nova.services.get tags: - tag: component value: raw - uuid: 8f123b2f902647b381b2c9a5af3bee80 name: 'Compute service [{#HOST}]:[{#BINARY}]:[{#ID}]: State' type: DEPENDENT key: 'openstack.nova.services.state[{#ID}]' delay: '0' history: 7d description: 'State of the service.' valuemap: name: 'General state' preprocessing: - type: JSONPATH parameters: - $.state error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed services report' - type: JAVASCRIPT parameters: - | const idx = [ // 10 - Unknown (default) 'down', // 0 'up' // 1 ].indexOf(value); return idx !== -1 ? idx : 10; - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.services.raw[{#ID}]' tags: - tag: component value: application - tag: component value: service trigger_prototypes: - uuid: 9479c68ee2db4104ac44f47931d96929 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.services.state[{#ID}])=0' name: 'Compute service [{#HOST}]:[{#BINARY}]:[{#ID}]: State is "down"' opdata: 'Current state: {ITEM.LASTVALUE}' priority: WARNING description: 'State of the service is "down".' manual_close: 'YES' tags: - tag: scope value: availability - uuid: 65288a6f75094c74bbb04651c87cb323 name: 'Compute service [{#HOST}]:[{#BINARY}]:[{#ID}]: Status' type: DEPENDENT key: 'openstack.nova.services.status[{#ID}]' delay: '0' history: 7d description: 'Status of the service.' valuemap: name: 'General status' preprocessing: - type: JSONPATH parameters: - $.status error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed services report' - type: JAVASCRIPT parameters: - | const idx = [ // 10 - Unknown (default) 'disabled', // 0 'enabled' // 1 ].indexOf(value); return idx !== -1 ? idx : 10; - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.services.raw[{#ID}]' tags: - tag: component value: application - tag: component value: service trigger_prototypes: - uuid: 177fa631136c4340816ee9e2cf90f1ac expression: 'last(/OpenStack Nova by HTTP/openstack.nova.services.status[{#ID}])=0 and length(last(/OpenStack Nova by HTTP/openstack.nova.services.disabled.reason[{#ID}]))>=0' name: 'Compute service [{#HOST}]:[{#BINARY}]:[{#ID}]: Status is "disabled"' opdata: 'Current state: {ITEM.LASTVALUE1}, disabling reason: "{ITEM.VALUE2}"' priority: INFO description: 'Status of the server is disabled. Acknowledge to close the problem manually.' manual_close: 'YES' tags: - tag: scope value: availability master_item: key: openstack.nova.services.get lld_macro_paths: - lld_macro: '{#BINARY}' path: $.binary - lld_macro: '{#HOST}' path: $.host - lld_macro: '{#ID}' path: $.id preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h - uuid: dba72b914e5c45fd9049ee5e4194bdcf name: 'Nova: Tenant discovery' type: DEPENDENT key: openstack.nova.tenant.discovery delay: '0' description: 'Discovers tenants and their usage data.' item_prototypes: - uuid: 73e8e9b39da64358948407efd6aded6b name: 'Tenant [{#TENANT_ID}]: Total disk usage' type: DEPENDENT key: 'openstack.nova.tenant.disk_usage[{#TENANT_ID}]' delay: '0' history: 7d value_type: FLOAT units: '!hours' description: | Total disk usage hours for the current tenant (project). Multiplying the server disk size (in GiB) by hours the server exists, and then adding that all together for each server. preprocessing: - type: JSONPATH parameters: - $.total_local_gb_usage error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed tenant report' - type: JAVASCRIPT parameters: - 'return Math.round(value * 100) / 100;' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.tenant.raw[{#TENANT_ID}]' tags: - tag: component value: application - tag: component value: tenant - uuid: c96dd7741d344b7f95f571640712faa0 name: 'Tenant [{#TENANT_ID}]: Raw data' type: DEPENDENT key: 'openstack.nova.tenant.raw[{#TENANT_ID}]' delay: '0' history: '0' trends: '0' value_type: TEXT description: 'Raw data of the tenant.' preprocessing: - type: JSONPATH parameters: - '$[?(@.tenant_id == "{#TENANT_ID}")].first()' error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the tenant report' master_item: key: openstack.nova.tenant.get tags: - tag: component value: raw - uuid: 634ccd12a49e440fb72f622f3fa36034 name: 'Tenant [{#TENANT_ID}]: Total hours' type: DEPENDENT key: 'openstack.nova.tenant.total_hours[{#TENANT_ID}]' delay: '0' history: 7d value_type: FLOAT units: '!hours' description: 'Total duration that the servers exist (in hours).' preprocessing: - type: JSONPATH parameters: - $.total_hours error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed tenant report' - type: JAVASCRIPT parameters: - 'return Math.round(value * 100) / 100;' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.tenant.raw[{#TENANT_ID}]' tags: - tag: component value: application - tag: component value: tenant - uuid: ce4fccd4d93a4621af8982d3e6b9dcbb name: 'Tenant [{#TENANT_ID}]: Total memory usage' type: DEPENDENT key: 'openstack.nova.tenant.total_memory_mb_usage[{#TENANT_ID}]' delay: '0' history: 7d value_type: FLOAT units: '!hours' description: | Total memory usage hours for the current tenant (project). Multiplying the server memory size (in MiB) by hours the server exists, and then adding that all together for each server. preprocessing: - type: JSONPATH parameters: - $.total_memory_mb_usage error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed tenant report' - type: JAVASCRIPT parameters: - 'return Math.round(value * 100) / 100;' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.tenant.raw[{#TENANT_ID}]' tags: - tag: component value: application - tag: component value: tenant - uuid: eee30f1ee62c40839bcf623c8a0a6ae6 name: 'Tenant [{#TENANT_ID}]: Total vCPUs usage' type: DEPENDENT key: 'openstack.nova.tenant.total_vcpu[{#TENANT_ID}]' delay: '0' history: 7d value_type: FLOAT units: '!hours' description: | Total vCPU usage hours for the current tenant (project). Multiplying the number of virtual CPUs of the server by hours the server exists, and then adding that all together for each server. preprocessing: - type: JSONPATH parameters: - $.total_vcpus_usage error_handler: CUSTOM_ERROR error_handler_params: 'Could not parse the detailed tenant report' - type: JAVASCRIPT parameters: - 'return Math.round(value * 100) / 100;' - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h master_item: key: 'openstack.nova.tenant.raw[{#TENANT_ID}]' tags: - tag: component value: application - tag: component value: tenant graph_prototypes: - uuid: d456ccd13e38476bb43a948fd42fae1d name: 'Tenant [{#TENANT_ID}]: Total disk utilization' graph_items: - color: 199C0D item: host: 'OpenStack Nova by HTTP' key: 'openstack.nova.tenant.disk_usage[{#TENANT_ID}]' - uuid: 97466fabfd21468584658ffe480d7e22 name: 'Tenant [{#TENANT_ID}]: Total hours utilization' graph_items: - color: 199C0D item: host: 'OpenStack Nova by HTTP' key: 'openstack.nova.tenant.total_hours[{#TENANT_ID}]' - uuid: a6b67816bd694539b0ebb77255ab479c name: 'Tenant [{#TENANT_ID}]: Total memory utilization' graph_items: - color: 199C0D item: host: 'OpenStack Nova by HTTP' key: 'openstack.nova.tenant.total_memory_mb_usage[{#TENANT_ID}]' - uuid: b8b3899c252945138cc8e241f37d8d40 name: 'Tenant [{#TENANT_ID}]: Total vCPUs utilization' graph_items: - color: 199C0D item: host: 'OpenStack Nova by HTTP' key: 'openstack.nova.tenant.total_vcpu[{#TENANT_ID}]' master_item: key: openstack.nova.tenant.get lld_macro_paths: - lld_macro: '{#TENANT_ID}' path: $.tenant_id preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT parameters: - 1h tags: - tag: class value: cloud - tag: target value: nova - tag: target value: openstack macros: - macro: '{$OPENSTACK.AVAILABILITY_ZONE.DISCOVERY.NAME.MATCHES}' value: '.*' description: 'Sets the zone name regex filter to use in availability zone discovery for including.' - macro: '{$OPENSTACK.AVAILABILITY_ZONE.DISCOVERY.NAME.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the zone name regex filter to use in availability zone discovery for excluding.' - macro: '{$OPENSTACK.HTTP.PROXY}' description: 'Sets the HTTP proxy for script and HTTP agent items. If this parameter is empty, then no proxy is used.' - macro: '{$OPENSTACK.HYPERVISOR.DISCOVERY.HOSTNAME.MATCHES}' value: '.*' description: 'Sets the hostname regex filter to use in hypervisor discovery for including.' - macro: '{$OPENSTACK.HYPERVISOR.DISCOVERY.HOSTNAME.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the hostname regex filter to use in hypervisor discovery for excluding.' - macro: '{$OPENSTACK.HYPERVISOR.DISCOVERY.IP.MATCHES}' value: '.*' description: 'Sets the host IP address regex filter to use in hypervisor discovery for including.' - macro: '{$OPENSTACK.HYPERVISOR.DISCOVERY.IP.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the host IP address regex filter to use in hypervisor discovery for excluding.' - macro: '{$OPENSTACK.HYPERVISOR.DISCOVERY.TYPE.MATCHES}' value: '.*' description: 'Sets the type regex filter to use in hypervisor discovery for including.' - macro: '{$OPENSTACK.HYPERVISOR.DISCOVERY.TYPE.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the type regex filter to use in hypervisor discovery for excluding.' - macro: '{$OPENSTACK.NOVA.CPU.UTIL.HIGH}' value: '90' description: 'Sets the percentage threshold for creating a high severity event about vCPU resource usage.' - macro: '{$OPENSTACK.NOVA.CPU.UTIL.WARN}' value: '75' description: 'Sets the percentage threshold for creating a warning severity event about vCPU resource usage.' - macro: '{$OPENSTACK.NOVA.INSTANCES.UTIL.HIGH}' value: '90' description: 'Sets the percentage threshold for creating a high severity event about instances resource count.' - macro: '{$OPENSTACK.NOVA.INSTANCES.UTIL.WARN}' value: '75' description: 'Sets the percentage threshold for creating a warning severity event about instances resource count.' - macro: '{$OPENSTACK.NOVA.INTERVAL.AVAILABILITY_ZONE}' value: 3m description: 'Interval for availability zone HTTP agent item query.' - macro: '{$OPENSTACK.NOVA.INTERVAL.HYPERVISOR}' value: 3m description: 'Interval for hypervisor HTTP agent item query.' - macro: '{$OPENSTACK.NOVA.INTERVAL.LIMITS}' value: 3m description: 'Interval for absolute limit HTTP agent item query.' - macro: '{$OPENSTACK.NOVA.INTERVAL.SERVERS}' value: 3m description: 'Interval for server HTTP agent item queries.' - macro: '{$OPENSTACK.NOVA.INTERVAL.SERVICES}' value: 3m description: 'Interval for service HTTP agent item query.' - macro: '{$OPENSTACK.NOVA.INTERVAL.TENANTS}' value: 3m description: 'Interval for tenant HTTP agent item query.' - macro: '{$OPENSTACK.NOVA.RAM.UTIL.HIGH}' value: '90' description: 'Sets the percentage threshold for creating a high severity event about RAM resource usage.' - macro: '{$OPENSTACK.NOVA.RAM.UTIL.WARN}' value: '75' description: 'Sets the percentage threshold for creating a warning severity event about RAM resource usage.' - macro: '{$OPENSTACK.NOVA.SERVICE.URL}' description: 'API endpoint for Nova Service, e.g., https://local.openstack:8774/v2.1.' - macro: '{$OPENSTACK.NOVA.TENANT.PERIOD}' value: m description: | Period for which tenant usage statistics will be queried. Possible values are: 'y' - current year until now, 'm' - current month until now, 'w' - current week until now, 'd' - current day until now. - macro: '{$OPENSTACK.SERVER.DISCOVERY.NAME.MATCHES}' value: '.*' description: 'Sets the server name regex filter to use in server discovery for including.' - macro: '{$OPENSTACK.SERVER.DISCOVERY.NAME.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the server name regex filter to use in server discovery for excluding.' - macro: '{$OPENSTACK.SERVICES.DISCOVERY.BINARY.MATCHES}' value: '.*' description: 'Sets the binary name regex filter to use in compute services discovery for including.' - macro: '{$OPENSTACK.SERVICES.DISCOVERY.BINARY.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the binary name regex filter to use in compute services discovery for excluding.' - macro: '{$OPENSTACK.SERVICES.DISCOVERY.HOST.MATCHES}' value: '.*' description: 'Sets the host name regex filter to use in compute services discovery for including.' - macro: '{$OPENSTACK.SERVICES.DISCOVERY.HOST.NOT_MATCHES}' value: CHANGE_IF_NEEDED description: 'Sets the host name regex filter to use in compute services discovery for excluding.' - macro: '{$OPENSTACK.TOKEN}' type: SECRET_TEXT description: 'API token for the monitoring user.' dashboards: - uuid: 462016340f49447f80b5d2405f3a682a name: 'Nova: Limits overview' pages: - widgets: - type: graph width: '12' height: '5' fields: - type: GRAPH name: graphid value: host: 'OpenStack Nova by HTTP' name: 'Nova: Instances utilization' - type: graph x: '12' width: '12' height: '5' fields: - type: GRAPH name: graphid value: host: 'OpenStack Nova by HTTP' name: 'Nova: vCPUs utilization' - type: graph 'y': '5' width: '24' height: '5' fields: - type: GRAPH name: graphid value: host: 'OpenStack Nova by HTTP' name: 'Nova: RAM utilization' valuemaps: - uuid: b5d0c4e859eb4b2d854f551e3d8aeff5 name: 'Availability zone state' mappings: - value: '0' newvalue: Unavailable - value: '1' newvalue: Available - uuid: 1073ca0bea3f46ebbfbcaba628484be8 name: 'Compute service disabling reason' mappings: - value: 'null' newvalue: N/A - uuid: a497438c723f4be88f452af2e8627613 name: 'General state' mappings: - value: '0' newvalue: Down - value: '1' newvalue: Up - value: '10' newvalue: Unknown - uuid: c8109a75cda24fe1afec8ea68686cdb0 name: 'General status' mappings: - value: '0' newvalue: Disabled - value: '1' newvalue: Enabled - value: '10' newvalue: Unknown - uuid: 375a709551d84ba3b0d4f24b6e0bd291 name: 'Server status' mappings: - value: '0' newvalue: SHUTOFF - value: '1' newvalue: ACTIVE - value: '2' newvalue: PAUSED - value: '3' newvalue: BUILD - value: '4' newvalue: DELETED - value: '5' newvalue: ERROR - value: '6' newvalue: HARD_REBOOT - value: '7' newvalue: MIGRATING - value: '8' newvalue: PASSWORD - value: '9' newvalue: REBOOT - value: '10' newvalue: REBUILD - value: '11' newvalue: RESCUE - value: '12' newvalue: RESIZE - value: '13' newvalue: REVERT_RESIZE - value: '14' newvalue: SHELVED - value: '15' newvalue: SHELVED_OFFLOADED - value: '16' newvalue: SOFT_DELETED - value: '17' newvalue: SUSPENDED - value: '18' newvalue: UNKNOWN - value: '19' newvalue: VERIFY_RESIZE - value: '30' newvalue: Unknown triggers: - uuid: 3dbae725014d4f289e20f002f2674dc7 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.instances.current) >= ({$OPENSTACK.NOVA.INSTANCES.UTIL.WARN} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.instances.max))' name: 'Nova: Current instances count is high' event_name: 'Nova: Current instances count is high (used >= {$OPENSTACK.NOVA.INSTANCES.UTIL.WARN}%)' opdata: 'Current: {ITEM.LASTVALUE1}, MAX: {ITEM.LASTVALUE2}' priority: WARNING description: 'Current instances count has exceeded {$OPENSTACK.NOVA.INSTANCES.UTIL.WARN}% of the max available instances count.' dependencies: - name: 'Nova: Current instances count is too high' expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.instances.current) >= ({$OPENSTACK.NOVA.INSTANCES.UTIL.HIGH} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.instances.max))' tags: - tag: scope value: capacity - uuid: 22592fabc09d416598fb4fb806048040 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.instances.current) >= ({$OPENSTACK.NOVA.INSTANCES.UTIL.HIGH} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.instances.max))' name: 'Nova: Current instances count is too high' event_name: 'Nova: Current instances count is too high (used >= {$OPENSTACK.NOVA.INSTANCES.UTIL.HIGH}%)' opdata: 'Current: {ITEM.LASTVALUE1}, MAX: {ITEM.LASTVALUE2}' priority: HIGH description: 'Current instances count has exceeded {$OPENSTACK.NOVA.INSTANCES.UTIL.HIGH}% of the max available instances count.' tags: - tag: scope value: capacity - uuid: c9d9eca4b3e540f491210b5c2312e1ba expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.ram.current) >= ({$OPENSTACK.NOVA.RAM.UTIL.WARN} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.ram.max))' name: 'Nova: Current RAM usage is high' event_name: 'Nova: Current RAM usage is high (used >= {$OPENSTACK.NOVA.RAM.UTIL.WARN}%)' opdata: 'Current: {ITEM.LASTVALUE1}, MAX: {ITEM.LASTVALUE2}' priority: WARNING description: 'Current RAM usage has exceeded {$OPENSTACK.NOVA.RAM.UTIL.WARN}% of the max available RAM usage.' dependencies: - name: 'Nova: Current RAM usage is too high' expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.ram.current) >= ({$OPENSTACK.NOVA.RAM.UTIL.HIGH} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.ram.max))' tags: - tag: scope value: capacity - uuid: 9dfd643fb555419c9c3200a07cc7647e expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.ram.current) >= ({$OPENSTACK.NOVA.RAM.UTIL.HIGH} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.ram.max))' name: 'Nova: Current RAM usage is too high' event_name: 'Nova: Current RAM usage is too high (used >= {$OPENSTACK.NOVA.RAM.UTIL.HIGH}%)' opdata: 'Current: {ITEM.LASTVALUE1}, MAX: {ITEM.LASTVALUE2}' priority: HIGH description: 'Current RAM usage has exceeded {$OPENSTACK.NOVA.RAM.UTIL.HIGH}% of the max available RAM usage.' tags: - tag: scope value: capacity - uuid: 85b1a132602344e39a50ef10b29fca15 expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.vcpu.current) >= ({$OPENSTACK.NOVA.CPU.UTIL.WARN} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.vcpu.max))' name: 'Nova: Current vCPU usage is high' event_name: 'Nova: Current vCPU usage is high (used >= {$OPENSTACK.NOVA.CPU.UTIL.WARN}%)' opdata: 'Current: {ITEM.LASTVALUE1}, MAX: {ITEM.LASTVALUE2}' priority: WARNING description: 'Current vCPU usage has exceeded {$OPENSTACK.NOVA.CPU.UTIL.WARN}% of the max available vCPU usage.' dependencies: - name: 'Nova: Current vCPU usage is too high' expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.vcpu.current) >= ({$OPENSTACK.NOVA.CPU.UTIL.HIGH} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.vcpu.max))' tags: - tag: scope value: capacity - uuid: e62a7fb598b34a0cb5bee6bc0370f7dd expression: 'last(/OpenStack Nova by HTTP/openstack.nova.limits.vcpu.current) >= ({$OPENSTACK.NOVA.CPU.UTIL.HIGH} / 100 * last(/OpenStack Nova by HTTP/openstack.nova.limits.vcpu.max))' name: 'Nova: Current vCPU usage is too high' event_name: 'Nova: Current vCPU usage is too high (used >= {$OPENSTACK.NOVA.CPU.UTIL.HIGH}%)' opdata: 'Current: {ITEM.LASTVALUE1}, MAX: {ITEM.LASTVALUE2}' priority: HIGH description: 'Current vCPU usage has exceeded {$OPENSTACK.NOVA.CPU.UTIL.HIGH}% of the max available vCPU usage.' tags: - tag: scope value: capacity graphs: - uuid: 462db790ba6c451b8d2d4f4669ed11b5 name: 'Nova: Instances utilization' graph_items: - color: 00FF00 item: host: 'OpenStack Nova by HTTP' key: openstack.nova.limits.instances.current - sortorder: '1' drawtype: DASHED_LINE color: FF0000 item: host: 'OpenStack Nova by HTTP' key: openstack.nova.limits.instances.max - uuid: d65df309a6ae47f48ebf245257750e58 name: 'Nova: RAM utilization' graph_items: - color: 00FF00 item: host: 'OpenStack Nova by HTTP' key: openstack.nova.limits.ram.current - sortorder: '1' drawtype: DASHED_LINE color: FF0000 item: host: 'OpenStack Nova by HTTP' key: openstack.nova.limits.ram.max - uuid: 5c7434d968b64c118138e413758630c0 name: 'Nova: vCPUs utilization' graph_items: - color: 00FF00 item: host: 'OpenStack Nova by HTTP' key: openstack.nova.limits.vcpu.current - sortorder: '1' drawtype: DASHED_LINE color: FF0000 item: host: 'OpenStack Nova by HTTP' key: openstack.nova.limits.vcpu.max