Přidání datasource do RRD databáze

Rozšíření RRD databáze o další datasource (DS) je otázka jednoho příkazu. Pokud však potřebujete přidat DS někam jinam než na konec databáze, je to trošku složitější. Nicméně není to neřešitelné.


Přidání datasource do RRD databáze Štítky:  , , , sed, , grafy, rrdtool, XML, IoT

    Rozšíření RRD databáze o další datasource (DS) je otázka jednoho příkazu. Pokud však potřebujete přidat DS někam jinam než na konec databáze, je to trošku složitější. Nicméně není to neřešitelné.

Pro záznam a následné zobrazení grafů z IoT/web teploměrů, čidel a meteostanice používám RRD databázi. Z té se pak přímo na serveru generují grafy jednotlivých měřených veličin.
Když k zařízení přidáte čidlo, je potřeba RRD rozšířit o další DS. Pouhé přidání na konec databáze je otázka jednoho příkazu.

rrdtool tune filename.rrd DS:ds_name:GAUGE:900:-50:100


Pozn:900:-50:100 = period:MIN:MAX Více viz man rrdtool

Pokud však potřebujete přidat DS někam jinam než na konec databáze, je to trošku složitější.

Většinou se jedná o případ, kdy je prvotní návrh RRD databáze nešťastný a nepočítá s rozšířením o další měřené veličiny. Čas však tento požadavek přinese.
U mne to nastalo tím, že mám jednu z veličin navrženou tak, že jeden konkrétní DS "MUSÍ BÝT POSLEDNÍ"
Poznámka: je to stav čidla, který se do RRDwrite přidává mimo hlavní POST – jak říkám, špatný návrh

Naštěstí není to neřešitelné. Musí se na to ale oklikou – export do XML, jeho úprava a následná obnova. Takže jdeme na to.
Záloha a export souboru databází

cp filename.rrd filename.rrd_bak
rrdtool dump filename.rrd > filename.xml



Otevřít XML v nějkém textovém editoru, najít definici DS. Něco jako

nano filename.xml
<ds>
  <name> t </name>
  <type> GAUGE </type>
  <minimal_heartbeat> 600 </minimal_heartbeat>
  <min> 0.0000000000e+00 </min>
  <max> 1.0000000000e+08 </max>
<!-- PDP Status -->
  <last_ds> 1339488487 </last_ds>
  <value> 2.0762858667e+05 </value>
  <unknown_sec> 0 </unknown_sec>
</ds>
...



Pak přidat nový DS na pozici, kam potřebujete
 
<ds> ... </ds>
<ds>
  <name> my_new_ds </name>
  <type> GAUGE </type>
  <minimal_heartbeat> 600 </minimal_heartbeat>
  <min> 0.0000000000e+00 </min>
  <max> 1.0000000000e+02 </max>

  <!-- PDP Status -->
  <last_ds> 1339488487 </last_ds>
  <value> 0.0000000000e+00 </value>
  <unknown_sec> 0 </unknown_sec>
</ds>

<ds> ... </ds>



Teď upravit "agregované položky" - MIN, MAX, AVG. Tzn. najít všechny výskyty

<cdp_prep> ...


a přidat další položku na danou pozici prostě COPY/PASTE té předchozí.
Poté je nutno přidat na patřičné pozice do databází nulové, resp. NaN, hodnoty.
Takže např.
 
<!-- 2022-05-16 21:31:00 CEST / 1652736686 --> 
<row><v> 1.1266210836e+04 </v><v> 1.2273721131e+04 </v></row>


Bude nově vypadat takto

<!-- 2022-05-16 21:31:00 CEST / 1652736686 --> 
<row><v> 1.1266210836e+04 </v><v> NaN </v><v> 1.2273721131e+04 </v></row>



To lze provést buď ručně (mooooc práce, chyba zaručena), nebo jako člověk pomocí sed

sed 's/v><v/v><v>NaN</v><v/X' filename.xml > filename2.xml


Kde X je pozice v><v, kam se mají NaN položky přidat

Příklad
 
sed 's/v><v/v><v>NaN</v><v>NaN</v><v>NaN</v><v>NaN</v><v/11' filename.xml > filename2.xml



Pak už zbývá obnovit RRD z XML a změnit práva/uživatele souboru tak, aby webová služba/REST API mohla zapisovat.

rm -rf filename.rrd
rrdtool restore filename2.xml filename.rrd
chmod 664 filename.rrd

nebo

chown webuser:webgroup filename.rrd



Hotovo, můžeme generovat a zobrazovat grafy
Graf - UV-A a UV-B Graf - UV Index

Všechny měřené veličiny : Weather Station Prague
;  
Vaše názory a komentáře: 1 ;  Zobrazeno: 2437 x ;  Hodnoceno: 0 x

Hodnocení článku: 1 2 3 4 5


Přidat komentář
Jméno
E-Mail
Zadejte pátou čísici z čísla Zadejte pátou čísici z čísla
Pokud očekáváte odpověď na Vámi vložený komentář, zadejte Váš e-mail.
Vložením komentáře souhlasíte s pravidly.