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.
1714 lines
73 KiB
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
|