Ciele
- Tvorba dashboardu s tabuľkovým panelom.
- Vytvoriť nové typy panelov pre dashboardy v Grafane.
- 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
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
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
Ú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;
Ú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;
Ú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;
Úloha 2.8
Výsledné dashboardy si pozrite vo Vašej mobilnej aplikácii My Grafana.
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...
V záložke Definition nastavíme používateľovi heslo.
V záložke Privileges dáme prepínač Can login? do polohy Yes a klikneme na Save.
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.
Ú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
Ú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. 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
Ú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.