Přeskočit obsah

Discover

---
title: Objevování konfigurace
---

# Objevování konfigurace

![LogMan.io Objevování přehled](./images/discover-overview.png)


## Nastavení obrazovky Objevování

Obrazovka Objevování se používá k zobrazení a prozkoumání dat (nejen) v ElasticSearch.

Konfigurace obrazovky Objevování může být načtena z `Knihovny` nebo ze statického souboru ve složce `public` stejným způsobem, jako je tomu v případě `Dashboards`.

Typ filtrovaných dat závisí na `specifikaci`, která musí být definována spolu s `datetimeField`. Tyto hodnoty jsou zásadní, bez nichž není možné filtrování.

### Konfigurace Objevování

#### Konfigurace Knihovny

Konfigurace Knihovny je uložena v uzlu Knihovny. Musí být typu JSON.

Aby bylo možné získat konfiguraci z Knihovny, musí být služba `asab_config` spuštěna s konfigurací ukazující na hlavní uzel Knihovny. Pro více informací se prosím odkažte zde: http://gitlab.teskalabs.int/lmio/asab-config

Konfigurace z Knihovny je **editovatelná**.

V uzlu Knihovny Objevování může být **více** konfiguračních souborů, přičemž v každém z nich může být nastavena pouze **jedna** obrazovka konfigurace Objevování. Další obrazovka Objevování musí být nakonfigurována v novém uzlu konfigurace Knihovny.

Všechny konfigurační soubory z uzlu Knihovny `Objevování` jsou načteny v jednom API volání.

##### Struktura konfigurace Knihovny

Struktura konfigurace v Knihovně
- hlavní uzel Knihovny - config - Objevování - config.json - type - Discover.json - schema
Kde

- **config** je název konkrétní konfigurace Objevování, musí být typu `json`.


V Knihovně vypadá cesta k souboru s konfigurací takto:

`/<hlavní uzel Knihovny>/config/Objevování/<discoverConfig>.json`

Cesta ke schématu bude následující:

`/<hlavní uzel Knihovny>/type/Discover.json`

Příklad výše popsané struktury Knihovny pro případ více konfiguračních souborů Objevování:
- logman - config - Objevování - declarative.json - default.json - speed.json - type - Discover.json
***DŮLEŽITÁ POZNÁMKA***

Schéma (`type`) a konfigurační soubor (`config`) musí být nastaveny v Knihovně, jinak nebude Objevování načteno správně.

Všechny konfigurační soubory z uzlu Knihovny `Objevování` jsou načteny v jednom API volání.


##### Příklad konfigurace:

```json
{
    "Objevování:datasource": {
        "specifikace": "declarative*",
        "datetimeField": "@timestamp",
        "type": "elasticsearch"
    }
}

Kde

  • klíč objektu slouží k pojmenování objektu. Musí být pojmenován jako Objevování:datasource.
  • type je typ vyhledávacího enginu
  • specifikace je url s vzorem indexu ElasticSearch. Pokud byste chtěli hledat všechna data, musí url končit hvězdičkou *. Toto je povinný parametr.
  • datetimeField je index datumu a času položky. Je to povinný parametr, protože je potřebný pro vyhledávání/procházení s ElasticSearch.

Schéma (volitelné nastavení)

Nedoměňujte s schématem Knihovny

Nastavte název pro získání schématu z knihovny (pokud je přítomno), které je pak aplikováno na hodnoty definované v rámci schématu. Se schématem můžeme aplikovat akce na hodnoty odpovídající definovanému type, např. použitím komponenty DateTime z ASAB-WebUI pro časové hodnoty.

{
    ...

    "Objevování:schéma": {
        "name": "ECS"
    }

    ...
}

Příklad struktury schémat v knihovně:

- knihovna
    - Schémata
        - Objevování.yaml
        - ECS.yaml
        ...

Příklad schématu v knihovně:

---

define:
  name: Elastic Common Schema
  type: common/schema
  description: https://www.elastic.co/guide/en/ecs/current/index.html

fields:
  '@timestamp':
    type: datetime
    label: "Datum a čas"
    unit: seconds
    docs: https://www.elastic.co/guide/en/ecs/current/ecs-base.html#field-timestamp

Autorizace (volitelné nastavení)

Konfigurace Objevování může být omezena na přístup pouze s konkrétními nájemci. To znamená, že uživatelé bez konkrétních nájemců nemohou přistupovat k konfiguraci Objevování s jejím zdrojem dat. To je výhodné např. když chce administrátor omezit přístup k konfiguraci Objevování s citlivými daty na konkrétní skupiny uživatelů.

Pokud je konfigurace nastavena přímo v Knihovně (a ne prostřednictvím nástroje pro konfiguraci), doporučuje se přidat sekci Autorizace a nechat klíč tenants jako prázdný řetězec (pokud není omezení vyžadováno). To pomůže udržet stejnou strukturu konfigurace napříč konfiguracemi Objevování:

{
    ...

    "Autorizace": {
        "tenants": ""
    }

    ...
}

Příklad nastavení Autorizace v rámci konfigurace, kde je vyžadován omezený přístup:

{
    ...

    "Autorizace": {
        "tenants": "tenant one, tenant two"
    }

    ...
}

Kde klíč tenants slouží k zobrazení a používání konfigurace pouze konkrétními nájemci. Může být specifikováno více nájemců, oddělených čárkou. Typ klíče tenants je string.

Nastavení výzev (volitelné nastavení)

Sekce nastavení výzev poskytuje další možnost nastavit výzvu Objevování nebo změnit její výchozí hodnoty.

Příklad sekce Objevování:prompts v rámci konfigurace:

{
    ...

    "Objevování:prompts": {
        "dateRangePicker:datetimeStart": "now-15m",
        "dateRangePicker:datetimeEnd": "now+15s"
        ...
    },

    ...
}
Nastavení vlastních období datumu a času

Někdy je žádoucí nastavit vlastní období datumu a času pro zobrazení dat, protože data leží např. mimo výchozí období nastavené pro Objevování. Výchozí období je now-1H, což by mělo hledat data v rozmezí now a 1 hodina zpět. Například, to by mohlo být nastaveno v Objevování:prompts následujícím způsobem:

{
    ...

    "Objevování:prompts": {
        "dateRangePicker:datetimeStart": "now-1H",
        "dateRangePicker:datetimeEnd": "now"
    },

    ...
}

Kde dateRangePicker:datetimeStart a dateRangePicker:datetimeEnd jsou období, která nastavují rozsah na počáteční období (počáteční) a na koncové období (konečné).

Možnosti nastavení pro obě období jsou:

  • now-ns
  • now-nm
  • now-nH
  • now-nd
  • now-nw
  • now-nM
  • now-nY
  • now
  • now+ns
  • now+nm
  • now+nH
  • now+nd
  • now+nw
  • now+nM
  • now+nY

Kde - n je číslo, např. 2, - s označuje sekundy, - m označuje minuty, - H označuje hodiny, - d označuje dny, - w označuje týdny, - M označuje měsíce, - Y označuje roky.

Ostatní hodnoty budou ignorovány.

Je možné např. nastavit pouze jedno období, jak je v tomto příkladu, druhé období zůstane výchozí:

{
    ...

    "Objevování:prompts": {
        "dateRangePicker:datetimeStart": "now-2H"
    },

    ...
}

Další příklad nastavení rozsahu datumu a času, kde jsou data zobrazena 15 hodin do minulosti a hledána 10 minut do budoucnosti:

{
    ...

    "Objevování:prompts": {
        "dateRangePicker:datetimeStart": "now-15H",
        "dateRangePicker:datetimeEnd": "now+10m"
    },

    ...
}

Schéma Knihovny

Pro manuální nastavení obrazovky Objevování v Knihovně musí být schéma Objevování nastavena ve validním JSON formátu.

Schéma musí být poskytnuto a uloženo v /<hlavní uzel Knihovny>/type/<discoverType>.json

Schéma může vypadat takto:

{
    "$id": "Schéma Objevování",
    "type": "object",
    "title": "Schéma Objevování",
    "description": "Schéma Objevování",
    "default": {},
    "examples": [
        {
            "Objevování:datasource": {
                "specifikace": "declarative*",
                "datetimeField": "@timestamp",
                "type": "elasticsearch"
            }
        }
    ],
    "required": [],
    "properties": {
        "Objevování:datasource": {
            "type": "string",
            "title": "Zdroje Objevování",
            "description": "Specifikace dat pro obrazovku Objevování",
            "default": {},
            "examples": [
                {
                    "specifikace": "declarative*",
                    "datetimeField": "@timestamp",
                    "type": "elasticsearch"
                }
            ],
            "required": [
                "specifikace",
                "datetimeField",
                "type"
            ],
            "properties": {
                "specifikace": {
                    "type": "string",
                    "title": "Specifikace",
                    "description": "Specifikujte zdroj dat",
                    "default": "",
                    "examples": [
                        "declarative*"
                    ]
                },
                "datetimeField": {
                    "type": "string",
                    "title": "Datum a čas",
                    "description": "Specifikujte hodnotu datumu a času pro zdroj dat",
                    "default": "",
                    "examples": [
                        "@timestamp"
                    ]
                },
                "type": {
                    "type": "string",
                    "title": "Typ",
                    "description": "Vyberte typ zdroje",
                    "default": [
                        "elasticsearch",
                        "sentinel"
                    ],
                    "$defs": {
                        "select": {
                            "type": "select"
                        }
                    },
                    "examples": [
                        "elasticsearch*"
                    ]
                }
            }
        },
        "Objevování:prompts": {
            "type": "string",
            "title": "Výzvy Objevování",
            "description": "Aktualizujte konfiguraci výzev Objevování",
            "default": {},
            "examples": [],
            "required": [],
            "properties": {
                "dateRangePicker:datetimeStart": {
                    "type": "string",
                    "title": "Počáteční časové období",
                    "description": "Nastavte počáteční časové období výzvy",
                    "default": "now-1H",
                    "examples": [
                        "now-1H"
                    ]
                },
                "dateRangePicker:datetimeEnd": {
                    "type": "string",
                    "title": "Koncové časové období",
                    "description": "Nastavte koncové časové období výzvy",
                    "default": "now",
                    "examples": [
                        "now"
                    ]
                }
            }
        },
        "Objevování:schéma": {
            "type": "string",
            "title": "Název schématu Objevování",
            "description": "Aplikujte schéma na hodnoty Objevování",
            "default": {},
            "properties": {
                "name": {
                    "type": "string",
                    "title": "Název schématu",
                    "description": "Nastavte název schématu pro konfiguraci (bez přípony souboru)",
                    "default": ""
                }
            }
        },
        "Autorizace": {
            "type": "string",
            "title": "Autorizace Objevování",
            "description": "Omezte přístup k konfiguraci Objevování podle nastavení nájemců",
            "default": {},
            "examples": [],
            "required": [],
            "properties": {
                "tenants": {
                    "type": "string",
                    "title": "Nájemci",
                    "description": "Specifikujte nájemce oddělené čárkou pro omezení používání této konfigurace (volitelné)",
                    "default": "",
                    "examples": [
                        "tenant1, tenant2"
                    ]
                }
            }
        }
    },
    "additionalProperties": false
}

Příklad předávání vlastností konfigurace

Příklad předávání vlastností konfigurace do DiscoverContainer:

...

this.App.Router.addRoute({
    path: "/discover",
    exact: true,
    name: 'Discover',
    component: DiscoverContainer,
    props: {
        type: "Discover"
    }
});

...

this.App.Navigation.addItem({
        name: "Objevování",
        url: "/discover",
        icon: 'cil-compass'
    });

Při používání DiscoverContainer jako komponenty ve vašem kontejneru mohou být vlastnosti předány následujícím způsobem:

<DiscoverContainer type="Discover" />

Statický konfigurační soubor aplikace zůstává prázdný:

module.exports = {
    app: {
    },
    webpackDevServer: {
        port: 3000,
        proxy: {
            '/api/elasticsearch': {
                target: "http://es-url:9200",
                pathRewrite: {'^/api/elasticsearch': ''}
            },
            '/api/asab_print': {
                target: "http://asab_print-url:8083",
                pathRewrite: {'^/api/asab_print': ''}
            },
            '/api/asab_config': {
                target: "http://asab_config-url:8082",
                pathRewrite: {'^/api/asab_config': ''}
            }
        }
    }
}

Statická konfigurace

Obrazovka Objevování nemusí být získána pouze z Knihovny. Další možností je nakonfigurovat ji přímo v souboru JSON a uložit ji do složky public projektu.

Příklad statické konfigurace

V index.js musí vývojář specifikovat:

JSON soubor s konfigurací může být uložen kdekoli ve složce public, ale silně se doporučuje uložit jej do složky /public/discover/, aby se odlišil od ostatních veřejně přístupných komponent.

  • Struktura konfigurace ve složce public
- public
    - discover
        - JSON konfigurační soubor
    - dashboards
    - locales
    - media
    - index.html
    - manifest.json

URL statické konfigurace uložené ve složce public může vypadat takto:

https://my-project-url/discover/Discover-config.json

Příklad Discover-config.json:

[
    {
        "Config name 1": {
            "Declarative": {
                "specification": "declarative*",
                "datetimeField": "last_inform",
                "type": "elasticsearch"
            }
        }
    },
    {
        "Config name 2": {
            "Default": {
                "specification": "default*",
                "datetimeField": "@timestamp",
                "type": "elasticsearch"
            }
        }
    }
]

Example of passing config props

Passing config props to the App:

this.App.Router.addRoute({
    path: "/discover",
    exact: true,
    name: 'Discover',
    component: DiscoverContainer,
    props: {
        type: "https://my-project-url/discover/Discover-config.json"
    }
});

this.App.Navigation.addItem({
    name: "Discover",
    url: "/discover",
    icon: 'cil-compass'
});

When using DiscoverContainer as a component in your container, then the props can be passed as following:

<DiscoverContainer type="https://my-project-url/discover/Discover-config.json" />

The static application config file remains empty:

module.exports = {
    app: {
    },
    webpackDevServer: {
        port: 3000,
        proxy: {
            '/api/elasticsearch': {
                target: "http://es-url:9200",
                pathRewrite: {'^/api/elasticsearch': ''}
            },
            '/api/asab_print': {
                target: "http://asab_print-url:8083",
                pathRewrite: {'^/api/asab_print': ''}
            },
            '/api/asab_config': {
                target: "http://asab_config-url:8082",
                pathRewrite: {'^/api/asab_config': ''}
            }
        }
    }
}