You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zabbix/templates/cloud/openstack/template_cloud_openstack_ht...

1714 lines
73 KiB

1 year ago
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