Kibana URL builder
This library allows building Kibana URLs, for instance when sending notifications.
Usage
# Using npm
npm install @clickandmortar/kibana-url-builder
# Using Yarn
yarn add @clickandmortar/kibana-url-builder
const 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))
Methods
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" } |
Filters
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 |
Exists / Not exists
{
type: 'exists',
field: 'statusCode'
}
Is / Is not
{
type: 'query',
field: 'namespace',
value: 'kube-system'
}
One of / Not one of
{
type: 'phrases',
field: 'namespace',
value: ['kube-system', 'default']
}
Between / Not between
{
type: 'range',
field: 'statusCode',
value: [400, 499]
}
Period
Three period presets are available:
-
quick
andrelative
: dates using Elasticsearch Date Math, ie.now
,now-7d
, etc. -
absolute
: absolute dates
Quick & Relative periods
{
from: 'now-7d',
to: 'now',
mode: 'quick'
}
Absolute periods
{
from: '2021-03-31T22:00:00.000Z',
to: '2021-04-02T21:59:59.999Z',
mode: 'absolute'
}
Testing
npm run test
Enhancements
- [x] Add support for filters
- [ ] Add tests:
⚙️ WIP - [x] Add missing filters: is one of, is between
- [x] Add documentation for filters
- [x] Add documentation for advanced period
- [ ] Add support for Visualize query