Перейти к основному содержимому
Версия: 3.2

Фильтрация данных

Дашборд может содержать в себе фильтры для задания значений для одного или нескольких поисковых запросов. Обычно для этого используются текстовые поля, выпадающие списки или радиокнопки. Данная статья содержит базовые примеры работы с фильтрацией данных. В примерах показано использование токенов для передачи значений в дашбордах.

Базовый пример фильтрации

Выбранные или введенные значения пользователем в фильтре определяют будущее значение токена. Поиск, выполняемый на дашборде, может использовать токены для различных целей, например, для фильтрации значений. Поисковый запрос получает значение токена, используя синтаксис $...$.

Следующий фрагмент кода описывает выпадающий список, который использует токен event_action_token. Код также описывает остальные варианты для выпадающего списка.

{
"name": "event_action_token",
"label": "Действие",
"type": "selection",
"token": {
"prefix": "",
"suffix": ""
},
"options": {
"static": [
{
"label": "logged-in",
"value": "logged-in"
},
{
"label": "logged-out",
"value": "logged-out"
},
{
"label": "logon-failed",
"value": "logon-failed"
}
],
"default": "logged-in",
"filter": {
"label": "",
"value": ""
},
"search": ""
},
"timeInput": ""
}

Поиск, используемый в дашборде, ссылается на токен. В следующем фрагменте кода $event_action_token$ использует значение, выбранное из выпадающего списка.

{
"viz": {
"options": {
"sme": {
"query": "source winlog_auth\r\n| search event.action.keyword=\"$event_action_token$\"\r\n| timeaggs count by event.action.keyword"
}
},
"timeToken": {
"start": "now-7d",
"end": "now"
}
}
}

Исходный код дашборда
    {
"label": "Фильтрация: временная диаграмма по действиям",
"inputs": [{
"name": "event_action_token",
"label": "Действие",
"type": "selection",
"token": {
"prefix": "",
"suffix": ""
},
"options": {
"static": [{
"label": "logged-in",
"value": "logged-in"
}, {
"label": "logged-out",
"value": "logged-out"
}, {
"label": "logon-failed",
"value": "logon-failed"
}
],
"default": "logged-in",
"filter": {
"label": "",
"value": ""
},
"search": ""
},
"timeInput": "",
"oldName": "event_action_token"
}
],
"rows": [{
"panels": [{
"inputs": [],
"height": 300,
"label": "",
"type": "sm",
"viz": {
"options": {
"general": {
"showScrollBar": false,
"stackedMode": false,
"enableBar": false,
"multiseries": false
},
"grouping": {
"dataGrouping": true,
"dataGroupingAutoBaseInterval": true,
"dataGroupingBaseInterval": {
"timeUnit": "day",
"count": 1
},
"dataGroupingCount": 1000
},
"drilldown": {
"enableDrilldown": false,
"drilldownType": "search",
"drilldownText": "",
"drilldownQuery": "",
"drilldownCustomTimeTokenEarliest": "now-24h",
"drilldownCustomTimeTokenLatest": "now",
"drilldownSelectTimeToken": "",
"drilldownTokens": []
},
"xaxis": {
"title": "Время",
"labelRotation": 0,
"truncate": false
},
"yaxis": {
"title": "Количество",
"logarithmic": "false",
"minVal": "0",
"maxVal": ""
},
"legend": {
"enabled": true,
"position": "right",
"truncateText": false
},
"color": {
"colorList": []
},
"sme": {
"query": "source winlog_auth\r\n| search event.action.keyword=\"$event_action_token$\"\r\n| timeaggs count by event.action.keyword"
}
},
"timeToken": {
"start": "now-7d",
"end": "now"
},
"type": "column"
},
"subpanels": []
}
]
}
],
"vars": []
}

Дашборды с временными фильтрами

Если к дашборду добавляются временные фильтры, для каждого из них необходимо указать токен. Поисковый запрос в панели ссылается на токены, чтобы указать, какой временной фильтр использовать.

Следующий фрагмент кода создает временной фильтр, который определяет токен времени для глобального использования.

{
"label": "Фильтрация: временные фильтры",
"inputs": [
{
"name": "time",
"label": "Временной период",
"type": "time",
"options": {
"default": {
"start": "now-7d",
"end": "now",
"isPaused": true,
"refreshInterval": 0
}
}
}
]
}

Данный фрагмент кода создает временной фильтр, который определяет токен времени для локального использования.

{
"panels": [
{
"inputs": [
{
"name": "stats_time_token",
"label": "Период расчета",
"type": "time",
"options": {
"default": {
"start": "now-24h",
"end": "now",
"isPaused": true,
"refreshInterval": 0
}
}
}
]
}
]
}

Панель, использующая локальный временной токен, заполняется значением stats_time_token.

{
"viz": {
"options": {
"sme": {
"query": "source winlog_auth\r\n| aggs count"
}
},
"timeToken": "stats_time_token"
}
}

В следующем примере используется глобальный временной фильтр, который управляет панелью временной диаграммы. Панель счетчика событий содержит локальный временной фильтр, который действует только для этой панели.

Исходный код дашборда
{
"label": "Фильтрация: временные фильтры",
"inputs": [{
"name": "time",
"label": "Временной период",
"type": "time",
"options": {
"default": {
"start": "now-7d",
"end": "now",
"isPaused": true,
"refreshInterval": 0
}
},
"oldName": "time"
}
],
"rows": [{
"panels": [{
"inputs": [],
"height": 300,
"label": "Временная диаграмма",
"type": "sm",
"viz": {
"options": {
"general": {
"showScrollBar": false,
"stackedMode": false,
"enableBar": false,
"multiseries": false
},
"grouping": {
"dataGrouping": true,
"dataGroupingAutoBaseInterval": true,
"dataGroupingBaseInterval": {
"timeUnit": "day",
"count": 1
},
"dataGroupingCount": 1000
},
"drilldown": {
"enableDrilldown": false,
"drilldownType": "search",
"drilldownText": "",
"drilldownQuery": "",
"drilldownCustomTimeTokenEarliest": "now-24h",
"drilldownCustomTimeTokenLatest": "now",
"drilldownSelectTimeToken": "",
"drilldownTokens": []
},
"xaxis": {
"title": "Время",
"labelRotation": 0,
"truncate": false
},
"yaxis": {
"title": "Количество",
"logarithmic": "false",
"minVal": "0",
"maxVal": ""
},
"legend": {
"enabled": true,
"position": "right",
"truncateText": false
},
"color": {
"colorList": []
},
"sme": {
"query": "source winlog_auth\r\n| timeaggs count by event.action.keyword"
}
},
"timeToken": "time",
"type": "column"
},
"subpanels": []
}
]
}, {
"panels": [{
"inputs": [{
"name": "stats_time_token",
"label": "Период расчета",
"type": "time",
"options": {
"default": {
"start": "now-24h",
"end": "now",
"isPaused": true,
"refreshInterval": 0
}
},
"oldName": "input2"
}
],
"height": 300,
"label": "Счетчик событий",
"type": "sm",
"viz": {
"options": {
"general": {
"fieldForTrend": "",
"fieldForValue": "",
"label": ""
},
"color": {
"invert": true,
"isRange": true,
"color": [{
"color": "#65A637",
"range": {
"min": 0,
"max": 0
}
}, {
"color": "#F8BE34",
"range": {
"min": 0,
"max": 0
}
}, {
"color": "#DC4E41",
"range": {
"min": 0
}
}
]
},
"show": {
"arrow": false,
"label": false,
"sparkline": false,
"delimiters": true,
"delimiter": ","
},
"sme": {
"query": "source winlog_auth\r\n| aggs count"
},
"drilldown": {
"drilldownText": "",
"drilldownType": "search"
},
"timeToken": ""
},
"timeToken": "stats_time_token",
"type": "single"
},
"subpanels": []
}
]
}
],
"vars": []
}

Статические и динамические опции фильтров на дашборде

Следующие фильтры дашборда требуют множественного выбора пользователем. Опции можно определить статически или использовать поиск для динамического заполнения фильтра.

  • Selection - выпадающий список
  • Multi-Select - множественный выбор
  • Radio - радиокнопки

Следующий пример сравнивает статическое и динамическое определение опций для выпадающего списка. В данном случае выпадающий список использует динамический поиск.

  • Для формирования динамического списка заполняется значение поля inputs[].options.search соответствующим поисковым запросом.
  • Для формирования статических опций значения заполняются в поле inputs[].options.static[].

Исходный код дашборда
{
"label": "Фильтрация: фильтр с поисковым запросом",
"inputs": [{
"name": "eventaction_token",
"label": "Действие",
"type": "selection",
"token": {
"prefix": "",
"suffix": ""
},
"options": {
"static": [{
"label": "Все",
"value": "*"
}, {
"label": "Вход",
"value": "logged-in"
}, {
"label": "Выход",
"value": "logged-out"
}, {
"label": "Неудачный вход",
"value": "logon-failed"
}
],
"default": "*",
"filter": {
"label": "",
"value": ""
},
"search": ""
},
"timeInput": "",
"oldName": "eventaction_token",
"inputWidth": "250"
}, {
"name": "username_token",
"label": "Пользователи",
"type": "multiselection",
"token": {
"prefix": "",
"suffix": ""
},
"token_value": {
"prefix": "\"",
"suffix": "\""
},
"delimiter": ", ",
"options": {
"static": [{
"label": "Все",
"value": "*"
}
],
"default": [{
"label": "Все",
"value": "*"
}
],
"allow_custom": false,
"filter": {
"label": "user.name.keyword",
"value": "user.name.keyword"
},
"search": "source winlog_auth\r\n| aggs count by user.name.keyword"
},
"timeInput": "time",
"oldName": "username_token",
"inputWidth": "400"
}
],
"rows": [{
"panels": [{
"inputs": [],
"height": 300,
"label": "Выбранные фильтры: действие (selection): $eventaction_token$, пользователи (multi-select): $username_token$",
"type": "sm",
"viz": {
"options": {
"general": {
"showScrollBar": false,
"stackedMode": false,
"enableBar": false,
"multiseries": false
},
"grouping": {
"dataGrouping": true,
"dataGroupingAutoBaseInterval": true,
"dataGroupingBaseInterval": {
"timeUnit": "minute",
"count": "15"
},
"dataGroupingCount": 1000
},
"drilldown": {
"enableDrilldown": false,
"drilldownType": "search",
"drilldownText": "",
"drilldownQuery": "",
"drilldownCustomTimeTokenEarliest": "now-24h",
"drilldownCustomTimeTokenLatest": "now",
"drilldownSelectTimeToken": "",
"drilldownTokens": []
},
"xaxis": {
"title": "Время",
"labelRotation": 0,
"truncate": false
},
"yaxis": {
"title": "Количество",
"logarithmic": "false",
"minVal": "0",
"maxVal": ""
},
"legend": {
"enabled": true,
"position": "right",
"truncateText": false
},
"color": {
"colorList": []
},
"sme": {
"query": "source winlog_auth\r\n| search event.action.keyword = \"$eventaction_token$\"\r\n| where in(user.name, $username_token$)\r\n| timechart count by event.action"
}
},
"timeToken": {
"start": "now-24h",
"end": "now"
},
"type": "column"
},
"subpanels": []
}
]
}
],
"vars": []
}