Merge remote-tracking branch 'upstream/stacklight' into merge-branch

Change-Id: I19d1d259d80d614fd49e40fda0f6bb4521020772
This commit is contained in:
Simon Pasquier 2016-11-25 16:18:40 +01:00
commit f4ed45166b
5 changed files with 1149 additions and 3 deletions

View File

@ -0,0 +1,937 @@
{
"annotations": {
"enable": true,
"list": [
{
"datasource": "lma",
"enable": true,
"iconColor": "#C0C6BE",
"iconSize": 13,
"lineColor": "rgba(255, 96, 96, 0.592157)",
"name": "Status",
"query": "select title,tags,text from annotations where $timeFilter and cluster = 'heat'",
"showLine": true,
"tagsColumn": "tags",
"textColumn": "text",
"titleColumn": "title"
}
]
},
"editable": true,
"gnetId": null,
"hideControls": false,
"id": null,
"links": [],
"refresh": "1m",
"rows": [
{
"collapse": false,
"editable": true,
"height": "250px",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(241, 181, 37, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"datasource": null,
"editable": true,
"error": false,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 6,
"interval": "> 60s",
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 2,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"column": "value",
"condition": "",
"dsType": "influxdb",
"fill": "",
"function": "last",
"groupBy": [
{
"params": [
"$interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"groupByTags": [],
"groupby_field": "",
"interval": "",
"measurement": "cluster_status",
"policy": "default",
"query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"environment_label\" =~ /^$environment$/ AND \"cluster_name\" = 'heat' AND $timeFilter GROUP BY time($interval) fill(null)",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "environment_label",
"operator": "=",
"value": "$environment"
},
{
"key": "cluster_name",
"operator": "=",
"value": "heat"
}
]
}
],
"thresholds": "1,3",
"title": "",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "no data",
"value": "null"
},
{
"op": "=",
"text": "OKAY",
"value": "0"
},
{
"op": "=",
"text": "WARN",
"value": "1"
},
{
"op": "=",
"text": "UNKW",
"value": "2"
},
{
"op": "=",
"text": "CRIT",
"value": "3"
},
{
"op": "=",
"text": "DOWN",
"value": "4"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"editable": true,
"error": false,
"fill": 1,
"grid": {
"threshold1": null,
"threshold1Color": "rgba(216, 200, 27, 0.27)",
"threshold2": null,
"threshold2Color": "rgba(234, 112, 112, 0.22)",
"thresholdLine": false
},
"id": 9,
"interval": "> 60s",
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": false,
"total": false,
"values": false
},
"lines": true,
"linewidth": 2,
"links": [],
"nullPointMode": "connected",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 10,
"stack": false,
"steppedLine": true,
"targets": [
{
"alias": "healthy",
"column": "value",
"dsType": "influxdb",
"function": "last",
"groupBy": [
{
"params": [
"$interval"
],
"type": "time"
},
{
"params": [
"0"
],
"type": "fill"
}
],
"groupByTags": [],
"measurement": "openstack_check_api",
"policy": "default",
"query": "SELECT last(\"value\") FROM \"openstack_check_api\" WHERE \"environment_label\" =~ /^$environment$/ AND \"service\" = 'heat-api' AND $timeFilter GROUP BY time($interval) fill(0)",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "environment_label",
"operator": "=",
"value": "$environment"
},
{
"key": "service",
"operator": "=",
"value": "heat-api"
}
]
}
],
"timeFrom": null,
"timeShift": null,
"title": "API Availability",
"tooltip": {
"msResolution": false,
"shared": false,
"sort": 0,
"value_type": "cumulative"
},
"type": "graph",
"xaxis": {
"show": true
},
"yaxes": [
{
"format": "none",
"label": "",
"logBase": 1,
"max": 1,
"min": 0,
"show": false
},
{
"format": "short",
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"showTitle": true,
"title": "Service Status"
},
{
"collapse": false,
"editable": true,
"height": "100px",
"panels": [
{
"content": "<br />\n<h3 align=\"center\"> Up </h3>\n",
"editable": true,
"error": false,
"id": 57,
"links": [],
"mode": "html",
"span": 2,
"style": {},
"title": "",
"type": "text"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"datasource": null,
"editable": true,
"error": false,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 52,
"interval": "> 60s",
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 2,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"column": "value",
"dsType": "influxdb",
"fill": "",
"function": "last",
"groupBy": [
{
"params": [
"$interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"groupByTags": [],
"measurement": "haproxy_backend_servers",
"policy": "default",
"query": "SELECT last(\"value\") FROM \"haproxy_backend_servers\" WHERE \"environment_label\" =~ /^$environment$/ AND \"backend\" = 'heat_api' AND \"state\" = 'up' AND $timeFilter GROUP BY time($interval) fill(null)",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "environment_label",
"operator": "=",
"value": "$environment"
},
{
"key": "backend",
"value": "heat_api"
},
{
"condition": "AND",
"key": "state",
"value": "up"
}
]
}
],
"thresholds": "1,1",
"title": "OpenStack",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"datasource": null,
"editable": true,
"error": false,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 53,
"interval": "> 60s",
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 2,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"column": "value",
"dsType": "influxdb",
"fill": "",
"function": "last",
"groupBy": [
{
"params": [
"$interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"groupByTags": [],
"measurement": "haproxy_backend_servers",
"policy": "default",
"query": "SELECT last(\"value\") FROM \"haproxy_backend_servers\" WHERE \"environment_label\" =~ /^$environment$/ AND \"backend\" = 'heat_cfn_api' AND \"state\" = 'up' AND $timeFilter GROUP BY time($interval) fill(null)",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "environment_label",
"operator": "=",
"value": "$environment"
},
{
"key": "backend",
"value": "heat_cfn_api"
},
{
"condition": "AND",
"key": "state",
"value": "up"
}
]
}
],
"thresholds": "1,1",
"title": "CloudFormation",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
},
{
"content": "<br />\n<h3 align=\"center\"> </h3>",
"editable": true,
"error": false,
"id": 56,
"links": [],
"mode": "html",
"span": 6,
"style": {},
"title": "",
"type": "text"
},
{
"content": "<br />\n<h3 align=\"center\"> Down </h3>\n",
"editable": true,
"error": false,
"id": 58,
"links": [],
"mode": "html",
"span": 2,
"style": {},
"title": "",
"type": "text"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": true,
"colors": [
"rgba(255, 255, 255, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": null,
"editable": true,
"error": false,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 59,
"interval": "> 60s",
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 2,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"column": "value",
"dsType": "influxdb",
"fill": "",
"function": "last",
"groupBy": [
{
"params": [
"$interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"groupByTags": [],
"measurement": "haproxy_backend_servers",
"policy": "default",
"query": "SELECT last(\"value\") FROM \"haproxy_backend_servers\" WHERE \"environment_label\" =~ /^$environment$/ AND \"backend\" = 'heat_api' AND \"state\" = 'down' AND $timeFilter GROUP BY time($interval) fill(null)",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "environment_label",
"operator": "=",
"value": "$environment"
},
{
"key": "backend",
"value": "heat_api"
},
{
"condition": "AND",
"key": "state",
"value": "down"
}
]
}
],
"thresholds": "1,1",
"title": "",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": true,
"colors": [
"rgba(255, 255, 255, 0.97)",
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
"datasource": null,
"editable": true,
"error": false,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 60,
"interval": "> 60s",
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"span": 2,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"column": "value",
"dsType": "influxdb",
"fill": "",
"function": "last",
"groupBy": [
{
"params": [
"$interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"groupByTags": [],
"measurement": "haproxy_backend_servers",
"policy": "default",
"query": "SELECT last(\"value\") FROM \"haproxy_backend_servers\" WHERE \"environment_label\" =~ /^$environment$/ AND \"backend\" = 'heat_cfn_api' AND \"state\" = 'down' AND $timeFilter GROUP BY time($interval) fill(null)",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "environment_label",
"operator": "=",
"value": "$environment"
},
{
"key": "backend",
"value": "heat_cfn_api"
},
{
"condition": "AND",
"key": "state",
"value": "down"
}
]
}
],
"thresholds": "1,1",
"title": "",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "current"
},
{
"content": "<br />\n<h3 align=\"center\"> </h3>",
"editable": true,
"error": false,
"id": 63,
"links": [],
"mode": "html",
"span": 6,
"style": {},
"title": "",
"type": "text"
}
],
"showTitle": true,
"title": "Heat API"
}
],
"schemaVersion": 12,
"sharedCrosshair": true,
"style": "dark",
"tags": [],
"templating": {
"enable": true,
"list": [
{
"allFormat": "regex values",
"current": {},
"datasource": null,
"hide": 0,
"includeAll": false,
"name": "environment",
"options": [],
"query": "show tag values from cpu_idle with key = environment_label",
"refresh": 1,
"refresh_on_load": true,
"regex": "",
"type": "query"
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"collapse": false,
"enable": true,
"notice": false,
"now": true,
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"status": "Stable",
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
],
"type": "timepicker"
},
"timezone": "browser",
"title": "Heat",
"version": 3
}

14
heat/meta/collectd.yml Normal file
View File

@ -0,0 +1,14 @@
{%- if pillar.heat.server is defined %}
{%- from "heat/map.jinja" import server with context %}
{%- if server.get('enabled', False) %}
local_plugin:
collectd_check_local_endpoint:
endpoint:
heat-api:
expected_code: 300
url: "http://{{ server.bind.api.address|replace('0.0.0.0', '127.0.0.1') }}:8004/"
heat-cfn-api:
expected_code: 300
url: "http://{{ server.bind.api_cfn.address|replace('0.0.0.0', '127.0.0.1') }}:8000/"
{%- endif %}
{%- endif %}

4
heat/meta/grafana.yml Normal file
View File

@ -0,0 +1,4 @@
dashboard:
heat:
format: json
template: heat/files/grafana_dashboards/heat_influxdb.json

189
heat/meta/heka.yml Normal file
View File

@ -0,0 +1,189 @@
{%- if pillar.heat is defined and pillar.heat.server is defined %}
log_collector:
decoder:
heat:
engine: sandbox
module_file: /usr/share/lma_collector/decoders/openstack_log.lua
module_dir: /usr/share/lma_collector/common;/usr/share/heka/lua_modules
adjust_timezone: true
splitter:
heat:
engine: token
delimiter: '\n'
input:
heat_log:
engine: logstreamer
log_directory: "/var/log"
file_match: 'heat/(?P<Service>.+)\.log\.?(?P<Seq>\d*)$'
differentiator: ['heat', '_', 'Service']
priority: ["^Seq"]
decoder: "heat_decoder"
splitter: "heat_splitter"
metric_collector:
trigger:
heat_logs_error:
description: 'Too many errors have been detected in Heat logs'
severity: warning
no_data_policy: okay
rules:
- metric: log_messages
field:
service: heat
level: error
relational_operator: '>'
threshold: 0.1
window: 70
periods: 0
function: max
heat_api_local_endpoint:
description: 'Heat API is locally down'
severity: down
rules:
- metric: openstack_check_local_api
field:
service: heat-api
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
heat_cfn_api_local_endpoint:
description: 'Heat CFN API is locally down'
severity: down
rules:
- metric: openstack_check_local_api
field:
service: heat-cfn-api
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
alarm:
heat_logs:
alerting: enabled
triggers:
- heat_logs_error
dimension:
service: heat-logs
heat_api_endpoint:
alerting: enabled
triggers:
- heat_api_local_endpoint
dimension:
service: heat-api-endpoint
heat_cfn_api_endpoint:
alerting: enabled
triggers:
- heat_cfn_api_local_endpoint
dimension:
service: heat-cfn-api-endpoint
remote_collector:
trigger:
heat_api_check_failed:
description: 'Endpoint check for heat-api is failed'
severity: down
rules:
- metric: openstack_check_api
field:
service: heat-api
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
heat_cfn_api_check_failed:
description: 'Endpoint check for heat-cfn-api is failed'
severity: down
rules:
- metric: openstack_check_api
field:
service: heat-cfn-api
relational_operator: '=='
threshold: 0
window: 60
periods: 0
function: last
alarm:
heat_api_check:
alerting: enabled
triggers:
- heat_api_check_failed
dimension:
service: heat-api-check
heat_cfn_api_check:
alerting: enabled
triggers:
- heat_cfn_api_check_failed
dimension:
service: heat-cfn-api-check
aggregator:
alarm_cluster:
heat_logs:
policy: highest_severity
alerting: enabled
group_by: hostname
match:
service: heat-logs
members:
- heat_logs
dimension:
service: heat
nagios_host: 01-service-clusters
heat_api_endpoint:
policy: availability_of_members
alerting: enabled
group_by: hostname
match:
service: heat-api-endpoint
members:
- heat_api_endpoint
dimension:
service: heat
nagios_host: 01-service-clusters
heat_cfn_api_endpoint:
policy: availability_of_members
alerting: enabled
group_by: hostname
match:
service: heat-cfn-api-endpoint
members:
- heat_cfn_api_endpoint
dimension:
service: heat
nagios_host: 01-service-clusters
heat_api_check:
policy: highest_severity
alerting: enabled
match:
service: heat-api-check
members:
- heat_api_check
dimension:
service: heat
nagios_host: 01-service-clusters
heat_cfn_api_check:
policy: highest_severity
alerting: enabled
match:
service: heat-cfn-api-check
members:
- heat_cfn_api_check
dimension:
service: heat
nagios_host: 01-service-clusters
heat:
policy: highest_severity
alerting: enabled_with_notification
match:
service: heat
members:
- heat_logs
- heat_api_endpoint
- heat_cfn_api_endpoint
- heat_api_check
- heat_cfn_api_check
dimension:
cluster_name: heat
nagios_host: 00-top-clusters
{%- endif %}

View File

@ -2,12 +2,14 @@ parameters:
heat:
_support:
collectd:
enabled: false
enabled: true
heka:
enabled: false
enabled: true
sensu:
enabled: true
sphinx:
enabled: true
config:
enabled: true
enabled: true
grafana:
enabled: true