rrdtool Datenbank erstellen

OP #7774218
Lesenswert?
• ▲
▼

Hallo zusammen, ist schon eine ganze weile her, dass ich mit tobis rrdtool etwas gemacht habe, und bin wohl etwas eingerostet. Ich versuche aktuell die Festplattenaktivitäten aufzuzeichnen, mit folgendem Script (wird von cron jede Minute aufgerufen):

1
#!/usr/bin/env bash
2
path=/var/lib/rrd/disk_io
3
drivestat=$(iostat -o JSON)
4
timestamp=$(date +%s)
5

6
echo ${drivestat} | jq -c '.[].hosts.[]' | while read -r node; do
7
  nodename=$(echo ${node} | jq -r .nodename)
8
  echo ${node} | jq -c '.statistics.[].disk.[]' | while read -r drive; do
9
    name=$(echo ${drive} | jq -r .disk_device)
10
    filename=${path}/${nodename}_${name}.rrd
11
    kb_read=$(echo ${drive} | jq -r .kB_read)
12
    kb_wrtn=$(echo ${drive} | jq -r .kB_wrtn)
13
    if [ ! -f filename ]; then
14
      rrdcreate ${filename}       \
15
        --step=60s                \
16
        DS:read:GAUGE:90s:0:U     \
17
        DS:wrtn:GAUGE:90s:0:U     \
18
        RRA:AVERAGE:0.5:60s:14d   \
19
        RRA:MIN:0.5:60s:14d       \
20
        RRA:MAX:0.5:60s:14d       \
21
        RRA:AVERAGE:0.5:300s:62d  \
22
        RRA:MIN:0.5:300s:62d      \
23
        RRA:MAX:0.5:300s:62d      \
24
        RRA:AVERAGE:0.5:1h:366d   \
25
        RRA:MIN:0.5:1h:366d       \
26
        RRA:MAX:0.5:1h:366d       \
27
        RRA:AVERAGE:0.5:1d:3660d  \
28
        RRA:MIN:0.5:1d:3660d      \
29
        RRA:MAX:0.5:1d:3660d
30
    fi
31
    rrdupdate ${filename} ${timestamp}:$((${kb_read}*1024)):$((${kb_wrtn}*1024))
32
  done
33
done

Die Daten kommen auch in der rrd Datenbank an (siehe ds[read].last_ds und ds[wrtn].last_ds:

1
$ rrdtool info /var/lib/rrd/disk_io/server_sda.rrd
2
filename = "/var/lib/rrd/disk_io/server_sda.rrd"
3
rrd_version = "0003"
4
step = 60
5
last_update = 1731588631
6
header_size = 4064
7
ds[read].index = 0
8
ds[read].type = "GAUGE"
9
ds[read].minimal_heartbeat = 90
10
ds[read].min = 0.0000000000e+00
11
ds[read].max = NaN
12
ds[read].last_ds = "12205752320"
13
ds[read].value = 1.2205752320e+11
14
ds[read].unknown_sec = 21
15
ds[wrtn].index = 1
16
ds[wrtn].type = "GAUGE"
17
ds[wrtn].minimal_heartbeat = 90
18
ds[wrtn].min = 0.0000000000e+00
19
ds[wrtn].max = NaN
20
ds[wrtn].last_ds = "13989277696"
21
ds[wrtn].value = 1.3989277696e+11
22
ds[wrtn].unknown_sec = 21
23
rra[0].cf = "AVERAGE"
24
rra[0].rows = 20160
25
rra[0].cur_row = 14188
26
rra[0].pdp_per_row = 1
27
rra[0].xff = 5.0000000000e-01
28
rra[0].cdp_prep[0].value = NaN
29
rra[0].cdp_prep[0].unknown_datapoints = 0
30
rra[0].cdp_prep[1].value = NaN
31
rra[0].cdp_prep[1].unknown_datapoints = 0
32
rra[1].cf = "MIN"
33
rra[1].rows = 20160
34
rra[1].cur_row = 1277
35
rra[1].pdp_per_row = 1
36
rra[1].xff = 5.0000000000e-01
37
rra[1].cdp_prep[0].value = NaN
38
rra[1].cdp_prep[0].unknown_datapoints = 0
39
rra[1].cdp_prep[1].value = NaN
40
rra[1].cdp_prep[1].unknown_datapoints = 0
41
[...]

Allerdings kann ich keine Daten daraus fetchen:

1
$ rrdtool fetch /var/lib/rrd/disk_io/server_sda.rrd AVERAGE -s -10m
2
                           read                wrtn
3

4
1731588540: -nan -nan
5
1731588600: -nan -nan
6
1731588660: -nan -nan
7
1731588720: -nan -nan
8
1731588780: -nan -nan
9
1731588840: -nan -nan
10
1731588900: -nan -nan
11
1731588960: -nan -nan
12
1731589020: -nan -nan
13
1731589080: -nan -nan
14
1731589140: -nan -nan

Kann mir da mal jemdand auf die Sprünge helfen?

Danke, Edi

Gast #7774295
Lesenswert?
• ▲
▼

Eduard I. schrieb:

Die Daten kommen auch in der rrd Datenbank an (siehe ds[read].last_ds und ds[wrtn].last_ds:$ rrdtool info /var/lib/rrd/disk_io/server_sda.rrd filename = "/var/lib/rrd/disk_io/server_sda.rrd"

Wenn ich einen rrdtool dump mache, stehen viele alte Werte (mit Datum vor der Erstellungszeit) mit NaN drinn. Ich kenne mich mit dem Ding nicht aus aber soweit ich weiss ist das wie ein Ringpuffer und wenn der halt noch nicht viele alte Werte hat dann kommt da bei AVERAGE eben NaN raus wenn 99% der Einträge aus NaN bestehen.

OP #7774312
Lesenswert?
• ▲
▼

Leider nein, da ist bei den aktuellen Zeiten nichts drin:

1
                        <!-- 2024-11-14 16:07:00 CET / 1731596820 --> <row><v>NaN</v><v>NaN</v></row>
2
                        <!-- 2024-11-14 16:08:00 CET / 1731596880 --> <row><v>NaN</v><v>NaN</v></row>
3
                        <!-- 2024-11-14 16:09:00 CET / 1731596940 --> <row><v>NaN</v><v>NaN</v></row>
4
                        <!-- 2024-11-14 16:10:00 CET / 1731597000 --> <row><v>NaN</v><v>NaN</v></row>
5
                        <!-- 2024-11-14 16:11:00 CET / 1731597060 --> <row><v>NaN</v><v>NaN</v></row>
6
                        <!-- 2024-11-14 16:12:00 CET / 1731597120 --> <row><v>NaN</v><v>NaN</v></row>
7
                        <!-- 2024-11-14 16:13:00 CET / 1731597180 --> <row><v>NaN</v><v>NaN</v></row>
8
                        <!-- 2024-11-14 16:14:00 CET / 1731597240 --> <row><v>NaN</v><v>NaN</v></row>
9
                        <!-- 2024-11-14 16:15:00 CET / 1731597300 --> <row><v>NaN</v><v>NaN</v></row>
10
                        <!-- 2024-11-14 16:16:00 CET / 1731597360 --> <row><v>NaN</v><v>NaN</v></row>
11
                        <!-- 2024-11-14 16:17:00 CET / 1731597420 --> <row><v>NaN</v><v>NaN</v></row>
12
                        <!-- 2024-11-14 16:18:00 CET / 1731597480 --> <row><v>NaN</v><v>NaN</v></row>
13
                        <!-- 2024-11-14 16:19:00 CET / 1731597540 --> <row><v>NaN</v><v>NaN</v></row>
14
                        <!-- 2024-11-14 16:20:00 CET / 1731597600 --> <row><v>NaN</v><v>NaN</v></row>
15
                        <!-- 2024-11-14 16:21:00 CET / 1731597660 --> <row><v>NaN</v><v>NaN</v></row>
16
                        <!-- 2024-11-14 16:22:00 CET / 1731597720 --> <row><v>NaN</v><v>NaN</v></row>
17
                        <!-- 2024-11-14 16:23:00 CET / 1731597780 --> <row><v>NaN</v><v>NaN</v></row>
18
                        <!-- 2024-11-14 16:24:00 CET / 1731597840 --> <row><v>NaN</v><v>NaN</v></row>
19
                        <!-- 2024-11-14 16:25:00 CET / 1731597900 --> <row><v>NaN</v><v>NaN</v></row>
20
                        <!-- 2024-11-14 16:26:00 CET / 1731597960 --> <row><v>NaN</v><v>NaN</v></row>
21
                        <!-- 2024-11-14 16:27:00 CET / 1731598020 --> <row><v>NaN</v><v>NaN</v></row>
Gast #7774657
Lesenswert?
• ▲
▼

Andreas M. schrieb:

Dann fällt mir nur noch ein "updatev" statt "update" zu benutzen und sich die Ausgabe anzuschauen.

Da kommt immmer 0 zurück:

1
return_value = 0
2
return_value = 0
3
return_value = 0
4
return_value = 0
5
return_value = 0
6
return_value = 0
7
return_value = 0
8
return_value = 0
9
return_value = 0
10
return_value = 0
11
return_value = 0
12
return_value = 0
Gast #7774725
Lesenswert?
• ▲
▼

Eduard I. schrieb:

if [ ! -f filename ]; then

Das muss $filename heissen, besser noch "$filename" dann geht es:

1731668940: -nan -nan 1731669000: -nan -nan 1731669060: -nan -nan 1731669120: -nan -nan 1731669180: -nan -nan 1731669240: -nan -nan 1731669300: 2,1665897131e+09 3,0228938752e+09 1731669360: 2,1666652160e+09 3,0416592213e+09 1731669420: 2,1666856960e+09 3,0590590293e+09 1731669480: 2,1667061760e+09 3,0697862485e+09 1731669540: -nan -nan

OP #7775017
Lesenswert?
• ▲
▼

Franko S. schrieb:

Das muss $filename heissen, besser noch "$filename" dann geht es:

DANKE!!!! Das wars! Die Dateien wurden jedes mal neu erstellt!

Der Vollständigkeit halber hier nochmals das komplette, funktionierende Skript:

1
#!/usr/bin/env bash
2
path=/var/lib/rrd/disk_io
3
drivestat=$(iostat -o JSON)
4
timestamp=$(date +%s)
5

6
echo ${drivestat} | jq -c '.[].hosts.[]' | while read -r node; do
7
  nodename=$(echo ${node} | jq -r .nodename)
8
  echo ${node} | jq -c '.statistics.[].disk.[]' | while read -r drive; do
9
    name=$(echo ${drive} | jq -r .disk_device)
10
    filename=${path}/${nodename}_${name}.rrd
11
    kb_read=$(echo ${drive} | jq -r .kB_read)
12
    kb_wrtn=$(echo ${drive} | jq -r .kB_wrtn)
13
    if [ ! -f "${filename}" ]; then
14
      rrdcreate ${filename}       \
15
        --step=60s                \
16
        DS:read:DERIVE:90s:0:U    \
17
        DS:wrtn:DERIVE:90s:0:U    \
18
        RRA:AVERAGE:0.5:60s:14d   \
19
        RRA:MIN:0.5:60s:14d       \
20
        RRA:MAX:0.5:60s:14d       \
21
        RRA:AVERAGE:0.5:300s:62d  \
22
        RRA:MIN:0.5:300s:62d      \
23
        RRA:MAX:0.5:300s:62d      \
24
        RRA:AVERAGE:0.5:1h:366d   \
25
        RRA:MIN:0.5:1h:366d       \
26
        RRA:MAX:0.5:1h:366d       \
27
        RRA:AVERAGE:0.5:1d:3660d  \
28
        RRA:MIN:0.5:1d:3660d      \
29
        RRA:MAX:0.5:1d:3660d
30
    fi
31
    rrdtool update "${filename}" ${timestamp}:$((${kb_read} * 1024)):$((${kb_wrtn} * 1024))
32
  done
33
done

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.