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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren