[Bookworm] Fix Ceph 16 OSD stat parsing
This commit is contained in:
parent
123499f75f
commit
cb413e5ce6
|
@ -338,8 +338,21 @@ def collect_ceph_stats(logger, config, zkhandler, this_node, queue):
|
||||||
line = re.sub(r"\x1b(\[.*?[@-~]|\].*?(\x07|\x1b\\))", "", line)
|
line = re.sub(r"\x1b(\[.*?[@-~]|\].*?(\x07|\x1b\\))", "", line)
|
||||||
# Split it for parsing
|
# Split it for parsing
|
||||||
line = line.split()
|
line = line.split()
|
||||||
if len(line) > 1 and line[1].isdigit():
|
|
||||||
# This is an OSD line so parse it
|
# Ceph 14 format:
|
||||||
|
# ['|', '0', '|', 'hv1.p.u.bonilan.net', '|', '318G', '|', '463G', '|', '213', '|', '1430k', '|', '22', '|', '124k', '|', 'exists,up', '|']
|
||||||
|
# Ceph 16 format:
|
||||||
|
# ['0', 'hv1.t.u.bonilan.net', '2489M', '236G', '0', '0', '0', '0', 'exists,up']
|
||||||
|
|
||||||
|
# Bypass obviously invalid lines
|
||||||
|
if len(line) < 1:
|
||||||
|
continue
|
||||||
|
elif line[0] == "+":
|
||||||
|
continue
|
||||||
|
|
||||||
|
# If line begins with | and second entry is a digit (i.e. OSD ID)
|
||||||
|
if line[0] == "|" and line[1].isdigit():
|
||||||
|
# Parse the line in Ceph 14 format
|
||||||
osd_id = line[1]
|
osd_id = line[1]
|
||||||
node = line[3].split(".")[0]
|
node = line[3].split(".")[0]
|
||||||
used = line[5]
|
used = line[5]
|
||||||
|
@ -349,20 +362,39 @@ def collect_ceph_stats(logger, config, zkhandler, this_node, queue):
|
||||||
rd_ops = line[13]
|
rd_ops = line[13]
|
||||||
rd_data = line[15]
|
rd_data = line[15]
|
||||||
state = line[17]
|
state = line[17]
|
||||||
osd_status.update(
|
# If first entry is a digit (i.e. OSD ID)
|
||||||
{
|
elif line[0].isdigit():
|
||||||
str(osd_id): {
|
# Parse the line in Ceph 16 format
|
||||||
"node": node,
|
osd_id = line[0]
|
||||||
"used": used,
|
node = line[1].split(".")[0]
|
||||||
"avail": avail,
|
used = line[2]
|
||||||
"wr_ops": wr_ops,
|
avail = line[3]
|
||||||
"wr_data": wr_data,
|
wr_ops = line[4]
|
||||||
"rd_ops": rd_ops,
|
wr_data = line[5]
|
||||||
"rd_data": rd_data,
|
rd_ops = line[6]
|
||||||
"state": state,
|
rd_data = line[7]
|
||||||
}
|
state = line[8]
|
||||||
|
# Otherwise, it's the header line and is ignored
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# I don't know why 2018 me used this construct instead of a normal
|
||||||
|
# dictionary update, but it works so not changing it.
|
||||||
|
# ref: bfbe9188ce830381f3f2fa1da11f1973f08eca8c
|
||||||
|
osd_status.update(
|
||||||
|
{
|
||||||
|
str(osd_id): {
|
||||||
|
"node": node,
|
||||||
|
"used": used,
|
||||||
|
"avail": avail,
|
||||||
|
"wr_ops": wr_ops,
|
||||||
|
"wr_data": wr_data,
|
||||||
|
"rd_ops": rd_ops,
|
||||||
|
"rd_data": rd_data,
|
||||||
|
"state": state,
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# Merge them together into a single meaningful dict
|
# Merge them together into a single meaningful dict
|
||||||
if debug:
|
if debug:
|
||||||
|
|
Loading…
Reference in New Issue