mirror of https://github.com/sipwise/kibana.git
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.
127 lines
5.0 KiB
127 lines
5.0 KiB
[[templated-and-scripted-dashboards]]
|
|
== Templates and Scripts
|
|
Kibana has support for creating dashboards dynamically via templates,
|
|
and more advanced scripts. This allows you to create a based dashboard,
|
|
then influence it with parameters, such as inserting a new query or
|
|
filter via the URL.
|
|
|
|
Templates and scripts must be stored on disk, storing them to
|
|
Elasticsearch is not supported. They must also be created by editing or
|
|
creating a schema. Because of this we highly recommend reading
|
|
link:./_dashboard_schema.html[The Kibana Schema Explained]
|
|
|
|
[[the-dashboard-directory]]
|
|
=== The dashboard directory
|
|
|
|
Dashboards are stored in the `app/dashboards` directory within the
|
|
Kibana installation directory. You will notice there are 2 types of
|
|
files: `.json` files and `.js` files.
|
|
|
|
[[templated-dashboards-.json]]
|
|
=== Templated Dashboards `(.json)`
|
|
`.json` files are templated dashboards. An example of templating can be
|
|
found on the query and filter objects of the `logstash.json` dashboard.
|
|
Templates use handlebar syntax that allow you insert javascript clauses
|
|
into your json. URL parameters are available on the `ARGS` object. For
|
|
example, a snippet from `logstash.json`'s
|
|
https://github.com/elasticsearch/kibana/blob/master/src/app/dashboards/logstash.json[(on
|
|
github)] query and filter services:
|
|
|
|
[source,json]
|
|
-----------------------------------------
|
|
"0": {
|
|
"query": "{{ARGS.query || '*'}}",
|
|
"alias": "",
|
|
"color": "#7EB26D",
|
|
"id": 0,
|
|
"pin": false
|
|
}
|
|
|
|
[...]
|
|
|
|
"0": {
|
|
"type": "time",
|
|
"field": "@timestamp",
|
|
"from": "now-{{ARGS.from || '24h'}}",
|
|
"to": "now",
|
|
"mandate": "must",
|
|
"active": true,
|
|
"alias": "",
|
|
"id": 0
|
|
}
|
|
-----------------------------------------
|
|
|
|
This allows us to set 2 parameters, `query` and `from` in the url. If
|
|
they are not set, they will default to the value after the `||`. For
|
|
example, this would search for `status:200` in the last 7 days:
|
|
|
|
*Note*: Take careful note of the `file` part of
|
|
`#/dashboard/file/logstash.json`
|
|
|
|
-----------------------------------------------------------------------------------
|
|
http://yourserver/index.html#/dashboard/file/logstash.json?query=status:200&from=7d
|
|
-----------------------------------------------------------------------------------
|
|
|
|
[[scripted-dashboards-.js]]
|
|
=== Scripted Dashboards `(.js)`
|
|
Scripted dashboards are much more powerful than templated dashboards. Of
|
|
course, with power comes responsibility, and scripted dashboards are
|
|
more complex to build. The goal in a scripted dashboard is to build and
|
|
return a javascript object that describes the dashboard schema. A well
|
|
commented example scripted dashboard can be found in
|
|
`app/dashboards/logstash.js`
|
|
https://github.com/elasticsearch/kibana/blob/master/src/app/dashboards/logstash.js[(on
|
|
github)]. This file accomplishes the same goals as `logstash.json`, but
|
|
with the added power of scripts we can do things like split queries on
|
|
commas:
|
|
|
|
*Note*: Take careful note of the `script` part of
|
|
`#/dashboard/script/logstash.js`. This instructs kibana to treat this
|
|
file as javascript.
|
|
|
|
------------------------------------------------------------------------------------------------
|
|
http://yourserver/index.html#/dashboard/script/logstash.json?query=status:403,status:404&from=7d
|
|
------------------------------------------------------------------------------------------------
|
|
|
|
This will create 2 query objects, `status:403` and `status:404` and
|
|
chart them seperately. In fact this dashboard takes another parameter
|
|
that describes the string by which to split the query on: `split`
|
|
|
|
--------------------------------------------------------------------------------------------------------
|
|
http://yourserver/index.html#/dashboard/script/logstash.json?query=status:403!status:404&from=7d&split=!
|
|
--------------------------------------------------------------------------------------------------------
|
|
|
|
We can see this happening in `logstash.js`
|
|
https://github.com/elasticsearch/kibana/blob/master/src/app/dashboards/logstash.js[(on
|
|
github)] here:
|
|
|
|
[source,javascript]
|
|
----------------------------------------------------------------------------------------------
|
|
// In this dashboard we let users pass queries as comma separated list to the query parameter.
|
|
// Or they can specify a split character using the split aparameter
|
|
// If query is defined, split it into a list of query objects
|
|
// NOTE: ids must be integers, hence the parseInt()s
|
|
if(!_.isUndefined(ARGS.query)) {
|
|
queries = _.object(_.map(ARGS.query.split(ARGS.split||','), function(v,k) {
|
|
return [k,{
|
|
query: v,
|
|
id: parseInt(k,10),
|
|
alias: v
|
|
}];
|
|
}));
|
|
} else {
|
|
// No queries passed? Initialize a single query to match everything
|
|
queries = {
|
|
0: {
|
|
query: '*',
|
|
id: 0,
|
|
}
|
|
};
|
|
}
|
|
----------------------------------------------------------------------------------------------
|
|
|
|
This dashboard takes more parameters than this, all of which are
|
|
described in the comments at the top of `logstash.js`
|
|
https://github.com/elasticsearch/kibana/blob/master/src/app/dashboards/logstash.js[(on
|
|
github)]
|