Práca v Grafane, Základy administrácie

Ciele

  1. Tvorba dashboardu s tabuľkovým panelom.
  2. Vytvoriť nové typy panelov pre dashboardy v Grafane.
  3. Základy administrácie a riadenie práv k DB objektom.

Úvod

Postup

Krok 1

Úloha 1.1

Vytvorte dashboard na zobrazenie rozpisu hokejových zápasov (program majstrovstiev sveta) za rok 2019 vo forme tabuľky. Vypíšte dátum zápasu (vo formáte DD.MM HH24:MI), krajiny, ktoré zápas hrajú, výsledné skóre a typ zápasu. Panel pomenujte MS 2019. Dashboard si pomenujte ľubovoľne.

Riešenie

SELECT To_char(zap_datum, 'DD.MM HH24:MI') AS Datum,
       xzap_cou_id1
       || ':'
       || xzap_cou_id2                     AS Zapas,
       zap_stav_cou_id1
       || ':'
       || zap_stav_cou_id2                 AS Vysledok,
       xzap_zat_id                         AS Typ
FROM   hokej.t_zapas
WHERE  $__timeFilter(zap_datum)
ORDER  BY datum 

Výsledný dashboard
Obr. 1: Výsledný dashboard

Krok 2

Úloha 2.1

Vytvorte nový dashboard. Pomenujte ho napríklad MS v hokeji - prehľad tretov.

Úloha 2.2

V dashboarde MS v hokeji - prehľad tretov pridajte panel (koláčový graf), ktorý bude predstavovať súčet trestných minút podľa typu trestu. Panel nech má formát Time series. Záznamy nech je možné filtrovať podľa krajiny. Chceme sa dopracovať k približne takémuto výsledku:

Riešenie

SELECT trt_nazov,
       Sum(dlzka_trestov) AS dlzka,
       Count(time)        AS time
FROM  (SELECT zap_datum             AS "time",
              Sum(tre_dlzka_trestu) AS dlzka_trestov,
              trt_nazov,
              xhra_cou_id
       FROM   hokej.t_trest,
              hokej.t_hrac,
              hokej.c_trest_typ,
              hokej.t_zapas
       WHERE  xtre_trt_id = trt_id
              AND xtre_hra_id = hra_id
              AND xtre_zap_id = zap_id
              AND xhra_cou_id = '$krajina'
              AND $__timeFilter(zap_datum)
       GROUP  BY zap_datum,
                 trt_nazov,
                 xhra_cou_id)a
GROUP  BY xhra_cou_id,
          trt_nazov

Výsledný dashboard
Obr. 2: Výsledný dashboard

Poznámka

Tabuľky sú užitočné ak chceme identifikovať jednotlivé merania, avšak neumožňujú vidieť širšie súvislosti a význam v dátach. Time series (časové rady) predstavujú postupnosť meraní zoradených v čase. To znamená, že každý riadok v tabuľke predstavuje jedno individuálne meranie v konkrétnom čase. Bežnejšou vizualizáciou pre časové rady miesto tabuliek sú interaktívne grafy, ktoré umiestňujú každé meranie pozdĺž časovej osi. Vizuálna reprezentácia vo forme grafu napomáha predpovedať budúcnosť, pretože uľahčuje identifikáciu vzorcov a trendov v dátach, ktoré by boli inak ťažko viditeľné. Viac sa o time series dočítate na tomto odkaze.

Úloha 2.3

Do toho istého dashboardu (MS v hokeji - prehľad tretov) pridajte ďalší koláčový graf, ktorý bude znázorňovať percentuálny pomer udelených trestov podľa počtu, koľkokrát bol tento trest udelený. Záznamy nech je možné filtrovať podľa krajiny. Chceme sa dopracovať k približne takémuto výsledku:

Riešenie

SELECT trt_nazov,
       Sum(pocet_trestov) AS pocet,
       Count(time)        AS time
FROM  (SELECT zap_datum     AS "time",
              Count(tre_id) AS pocet_trestov,
              xhra_cou_id,
              trt_nazov
       FROM   hokej.t_trest,
              hokej.t_hrac,
              hokej.c_trest_typ,
              hokej.t_zapas
       WHERE  xtre_trt_id = trt_id
              AND xtre_hra_id = hra_id
              AND xtre_zap_id = zap_id
              AND xhra_cou_id = '$krajina'
              AND $__timeFilter(zap_datum)
       GROUP  BY zap_datum,
                 xhra_cou_id,
                 trt_nazov)a
GROUP  BY xhra_cou_id,
          trt_nazov

Výsledný dashboard
Obr. 3: Výsledný dashboard

Úloha 2.4

Vytvorte nový dashboard. Pomenujte ho napríklad MS v hokeji - Štatistiky.

Úloha 2.5

V dashboarde MS v hokeji - Štatistiky vytvorte tabuľkový panel, ktorý bude zobrazovať top 10 strelcov - teda 10 hráčov, ktorí strelili najviac gólov. Záznamy zoraďte podľa počtu gólov zostupne. Výsledná tabuľka nech má 3 stĺpce: id krajiny, celé meno hráča, počet gólov.

Riešenie

SELECT xhra_cou_id         AS krajina,
       hra_meno
       || ' '
       || hra_priezvisko   AS meno,
       Count(xgol_hra_id1) AS pocet
FROM   hokej.t_hrac,
       hokej.t_gol,
       hokej.t_zapas
WHERE  xgol_hra_id1 = hra_id
       AND xgol_zap_id = zap_id
       AND $__timeFilter(zap_datum)
GROUP  BY meno,
          krajina
ORDER  BY pocet DESC
LIMIT  10;

Výsledný dashboard
Obr. 4: Výsledný dashboard

Úloha 2.6

V dashboarde MS v hokeji - Štatistiky vytvorte time series panel, ktorý bude zobrazovať názov krajiny spolu s počtom strelených gólov. Graf nech je typu bar gauge, teda stĺpcový graf. Chceme vytvoriť približne takýto graf:

Riešenie

SELECT a.krajina,
       Sum(goly)   AS pocet,
       Count(time) AS time
FROM   (SELECT cou_name              AS krajina,
               Sum(zap_stav_cou_id1) AS goly,
               zap_datum             AS "time"
        FROM   hokej.t_zapas,
               hokej.c_country
        WHERE  xzap_cou_id1 = cou_id
               AND $__timeFilter(zap_datum)
        GROUP  BY krajina,
                  zap_datum
        UNION
        SELECT cou_name              AS krajina,
               Sum(zap_stav_cou_id2) AS goly,
               zap_datum             AS "time"
        FROM   hokej.t_zapas,
               hokej.c_country
        WHERE  xzap_cou_id2 = cou_id
               AND $__timeFilter(zap_datum)
        GROUP  BY krajina,
                  zap_datum)a
GROUP  BY a.krajina
ORDER  BY pocet DESC;

Výsledný dashboard
Obr. 5: Výsledný dashboard

Úloha 2.7

V dashboarde MS v hokeji - Štatistiky vytvorte ďalší time series panel, ktorý bude zobrazovať názov krajiny spolu so súčtom minút za všetky udelené tresty hráčom tejto krajiny. Chceme teda zoradiť krajiny od "najtrestanejšej" po "najemenj trestanú". Graf nech je znova typu bar gauge, teda stĺpcový graf. Chceme vytvoriť približne takýto graf:

Riešenie

SELECT a.krajina,
       Sum(goly)   AS pocet,
       Count(time) AS time
FROM   (SELECT cou_name              AS krajina,
               Sum(zap_stav_cou_id1) AS goly,
               zap_datum             AS "time"
        FROM   hokej.t_zapas,
               hokej.c_country
        WHERE  xzap_cou_id1 = cou_id
               AND $__timeFilter(zap_datum)
        GROUP  BY krajina,
                  zap_datum
        UNION
        SELECT cou_name              AS krajina,
               Sum(zap_stav_cou_id2) AS goly,
               zap_datum             AS "time"
        FROM   hokej.t_zapas,
               hokej.c_country
        WHERE  xzap_cou_id2 = cou_id
               AND $__timeFilter(zap_datum)
        GROUP  BY krajina,
                  zap_datum)a
GROUP  BY a.krajina
ORDER  BY pocet DESC;

Výsledný dashboard
Obr. 6: Výsledný dashboard

Úloha 2.8

Výsledné dashboardy si pozrite vo Vašej mobilnej aplikácii My Grafana.

dashboard

Krok 3

Grafana neoveruje, či sú napísané dotazy bezpečné. Napríklad sa môže stať, že príkazy ako DELETE FROM user alebo DROP TABLE user budú vykonané. Z toho dôvodu sa odporúča vytvoriť si špecifického PostgreSQL používateľa, ktorý bude mať obmedzené práva. Takto vytvorený používateľ by mal mať udelené práva iba na SELECT nad špecifickou databázou a jej konkrétnymi tabuľkami.

Úloha 3.1

Vytvorte užívateľa grafanareader s heslom grafanareader nad svojou databázou tak, aby tento používateľ videl tabuľky a pohľady len na čítanie. Pod týmto užívateľom budete pristupovať vo všetkých dashboardoch do databázy.

Vytvoriť nového používateľa môžete napríklad v nástroji pgAdmin4, ktorý sme Vám na virtuálny počítač Ubuntu už nainštalovali a nakonfigurovali. Najprv sa pripojte na svoju inštanciu PostgreSQL servera. Pravým tlačidlom myši kliknite na: Login/Group Roles -> Create -> Login/Group Role...

Vytvorenie nového používateľa v pgAdmin4
Obr. 7: Vytvorenie nového používateľa v pgAdmin4

V záložke Definition nastavíme používateľovi heslo.

Heslo pre používateľa v pgAdmin4
Obr. 8: Heslo pre používateľa v pgAdmin4

V záložke Privileges dáme prepínač Can login? do polohy Yes a klikneme na Save.

Vytvorenie nového používateľa v pgAdmin4
Obr. 9: Vytvorenie nového používateľa v pgAdmin4

Následne nagrantuje používateľovi grafanareader použitie schémy movies a hockey príkazom:

GRANT USAGE ON SCHEMA movies TO grafanareader;
GRANT USAGE ON SCHEMA hockey TO grafanareader;

Teraz je potrebné nagrantovať používateľovi grafanareader SELECT nad jendotlivými tabuľkami. To docielime príkazom s nasledujúcou štruktúrou:

GRANT SELECT ON schema.table TO grafanareader;

V pgAdmin4 môžme používateľovi nagrantovať SELECT jednoduchým "vyklikaním". Najprv je potrebné pravým tlačidlom kliknúť na schému movies/hockey -> Grant Wizard. Následne zaškrtneme názvy tabuliek, ku ktorým chceme dať používateľovi privilégiá. V druhom kroku kliknutím na znak (Add new row) pridáme nasledovný riadok a klikneme na Finish.

Privilégia na SELECT pre používateľa grafanareader
Obr. 10: Privilégia na SELECT pre používateľa grafanareader

Úloha 3.2

Prekonfigurujte dátový zdroj databázu v Grafane tak, aby ste sa do Vašej PostgreSQL databázy pripájali ako používateľ grafanareader.

Riešenie

Zmena používateľa v Grafane
Obr. 11: Zmena používateľa v Grafane

Úloha 3.3

Vytvorte užívateľa na editáciu a vkladanie nových dát (mazanie nie) nad Vašou databázou. Nagrantujte mu prístup k objektom schémy movies a hockey. Vyskúšajte prístup do schém z iného počítača pod týmto užívateľom. Čo môže tento používateľ robiť?

Úloha 3.4

Vytvorte nového užívateľa na Vašom Grafana serveri, ktorý si bude vedieť dashboardy iba prezerať, nie ich vytvárať ani editovať. Môžte ho pomenovať napríklad grafana s heslom grafana.

Riešenie

V Grafane vytvoríme nového používateľa tak, že z hlavného menu prejdeme na položku Server Admin -> Users.

Vytvorenie používateľa v Grafane
Obr. 12: Vytvorenie používateľa v Grafane
Klikneme na New user. Vyplníme požadované polia ako meno, používateľské meno a heslo. Po kliknutí a Create user bude vytvorený používateľ grafana
Vytvorenie používateľa v Grafane
Obr. 13: Vytvorenie používateľa v Grafane

Úloha 3.5

Doteraz ste sa vo Vašej mobilnej aplikácii My Grafana prihlasovali ako admin. Odláste sa a prihláste sa pod novovytvoreným používateľom grafana. Viete vytvoriť nový dashboard?

Upozornenie

Po vypracovaní úloh z cvičenia prosím o vyplnenie nasledujúceho dotazníka.

Doplňujúce úlohy

Úloha A.1

Vytvorte ľubovoľný playlist z Vašich dashboardov. Playlist je špeciálny typ dashboardu, ktorý rotuje zoznamom zvolených dashboardov. Dashboardy sa menia v nami určenom intervale. Playlisty sú skvelým spôsobom, ako ukázať rôzne metriky svojmu tímu, zákazníkom alebo návštevníkom, a preto sa často využívajú aj v praxi vo firmách, kde sa premietajú na obrazovkách. Výhodou je, že Grafana automaticky škáluje dashboardy podľa aktuálneho rozlíšenia.

Riešenie

Playlist v Grafane
Obr. 14: Playlist v Grafane