rrdtool Datenbank erstellen

OP #7774218

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

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

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

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

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

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

Eine eigene Frage? Dieser Thread ist über ein Jahr alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.