This library allows building Kibana URLs, for instance when sending notifications.
It has been tested with Kibana 6.x and 7.x versions.
# Using npm
npm install @clickandmortar/kibana-url-builder
# Using Yarn
yarn add @clickandmortar/kibana-url-builderconst kub = require('@clickandmortar/kibana-url-builder')
const url = kub.buildDiscoverUrl({
host: 'http://kibana:5601',
columns: ['_source'],
filters: [],
query: 'my query'
})
// url = http://kibana:5601/app/kibana#/discover?_g=(time:(from:now-15m,mode:quick,to:now))&_a=(columns:!(_source),filters:!(),interval:auto,query:(language:lucene,query:'my query'),sort:!('@timestamp',desc))buildDiscoverUrl ({ host, refreshInterval, period, columns, filters, index, interval, query, sort }: KibanaDiscoverUrlBuildParameters): string
This method returns a stateless Kibana "Discover" URL, which can be shared and used by anyone having access to the Kibana instance.
| Parameter | Type | Default | Required | Example |
|---|---|---|---|---|
host |
string |
✅ | http://kibana:5601 |
|
columns |
string[] |
['_source'] |
['_source', 'log'] |
|
filters |
KibanaQueryFilter[] |
[] |
See below | |
query |
string |
foo AND bar (Lucene syntax) |
||
period |
KibanaQueryPeriod |
{ "from": "now-15m", "mode": "quick", "to": "now" } |
See below | |
index |
string |
When using filters | my-index-pattern |
|
interval |
string |
auto |
15m |
|
refreshInterval |
KibanaQueryRefreshInterval |
{ "pause": true, "value": 300000 } |
||
sort |
KibanaQuerySort |
{ "field": "@timestamp", "direction": "desc" } |
When using filters, you must provide the index pattern name using index property.
Supported filter types:
- Exists / Not exists (type =
exists) - Is / Is not (type =
query) - One of / Not one of (type =
phrases) - Between / Not between (type =
range)
"Not" filters can be used setting the negate property of the filter to true.
All filters are of type KibanaQueryFilter and share the following properties:
| Property | Type | Default | Required | Description |
|---|---|---|---|---|
type |
string |
- | ✅ | See below examples |
field |
string |
- | ✅ | Name of the ES field |
value |
string|boolean|number|string[] |
- | ✅ | See below examples |
negate |
boolean |
false |
- | Negate the filter |
alias |
string |
none | Alias for the filter | |
disabled |
boolean |
false |
Mark filter as disabled |
{
type: 'exists',
field: 'statusCode'
}{
type: 'query',
field: 'namespace',
value: 'kube-system'
}{
type: 'phrases',
field: 'namespace',
value: ['kube-system', 'default']
}{
type: 'range',
field: 'statusCode',
value: [400, 499]
}Three period presets are available:
quickandrelative: dates using Elasticsearch Date Math, ie.now,now-7d, etc.absolute: absolute dates
{
from: 'now-7d',
to: 'now',
mode: 'quick'
}{
from: '2021-03-31T22:00:00.000Z',
to: '2021-04-02T21:59:59.999Z',
mode: 'absolute'
}npm run test- Add support for filters
- Add tests: ⚙️ WIP
- Add missing filters: is one of, is between
- Add documentation for filters
- Add documentation for advanced period
- Add support for Visualize query
- Add support for Kibana Query Language in query
- Test compatibility with Kibana 7.x