Zabbix Ceph OSD 状态监控
[root@st001 ~]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-13 145.19986 root default
-9 36.29999 rack rack1
-2 18.14999 host st001
0 3.62999 osd.0 up 1.00000 1.00000
1 3.62999 osd.1 up 1.00000 1.00000
2 3.62999 osd.2 up 1.00000 1.00000
3 3.62999 osd.3 up 1.00000 1.00000
4 3.62999 osd.4 up 1.00000 1.00000
-3 18.14999 host st002
5 3.62999 osd.5 up 1.00000 1.00000
6 3.62999 osd.6 up 1.00000 1.00000
7 3.62999 osd.7 up 1.00000 1.00000
8 3.62999 osd.8 up 1.00000 1.00000
9 3.62999 osd.9 up 1.00000 1.00000
-10 36.29994 rack rack2
-4 18.14999 host st003
10 3.62999 osd.10 up 1.00000 1.00000
11 3.62999 osd.11 up 1.00000 1.00000
12 3.62999 osd.12 up 1.00000 1.00000
13 3.62999 osd.13 up 1.00000 1.00000
14 3.62999 osd.14 up 1.00000 1.00000
-5 18.14995 host st004
35 3.62999 osd.35 up 1.00000 1.00000
36 3.62999 osd.36 up 1.00000 1.00000
37 3.62999 osd.37 up 1.00000 1.00000
38 3.62999 osd.38 up 1.00000 1.00000
39 3.62999 osd.39 up 1.00000 1.00000
0x00 需求
监控节点上的每个OSD状态,值为up/down。
0x01 Zabbix OSD 自动发现
通过ceph osd tree
会列出所有节点的所有OSD信息,需要列出当前节点的OSD的信息,用于Zabbix的自动发现,而不是手工去Zabbix配置OSD信息。
编写脚本用于OSD自动发现:
#!/bin/sh
start=`ceph osd tree | grep -n $HOSTNAME | awk -F : '{print $1}'`
end=`ceph osd tree | awk '{print FNR,$3,$4}' | grep -E 'host|rack' | awk '{print $1}' | awk '{if($1>start) print $1}' start=$start | awk 'NR==1'`
osds=(`ceph osd tree | awk 'NR>start&&NR<end' start=$start end=$end | awk '{print $3}'`)
length=${#osds[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#OSD_NAME}\":\"${osds[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
脚本测试:
{
"data":[
{"{#OSD_NAME}":"osd.0"},
{"{#OSD_NAME}":"osd.1"},
{"{#OSD_NAME}":"osd.2"},
{"{#OSD_NAME}":"osd.3"},
{"{#OSD_NAME}":"osd.4"}
]
}
脚本能正确返回st001节点上的OSD name。将刚刚编写的脚本OSD_Discovery.sh
复制到/opt/zabbix
目录下,并设置好权限:
chmod +x /opt/zabbix/OSD_Discovery.sh
chown -R zabbix:zabbix /opt/zabbix/
修改配置文件/etc/zabbix/zabbix_agentd.d/userparameter_ceph.conf
,添加以下内容用于zabbix自动发现:
UserParameter=ceph.osddiscovery, /opt/zabbix/OSD_Discovery.sh
0x02 Zabbix 自动发现配置
设定正则表达式:
设定自动发现:
- key 为
/etc/zabbix/zabbix_agentd.d/userparameter_ceph.conf
中设定的key。 - Update interval 为自动发现间隔时间。
- Keep lost resources period 为数据存放时间。
0x03 OSD状态监控配置
修改配置文件/etc/zabbix/zabbix_agentd.d/userparameter_ceph.conf
,添加以下内容用于监控OSD状态:
UserParameter=ceph.osdstatus[*], ceph osd tree | grep -E '$1[ ]' | awk '{print $$4}'
在zabbix上添加item用于OSD状态监控
0x04 Ceph OSD trigger 配置
配置完 Ceph OSD 监控之后,创建trigger用于 Ceph OSD down 了进行报警。添加表达式:
{Templace Ceph OSD:ceph.osd_status[{#OSD_NAME}].str("down")}=1
0x05 测试
能够自动发现该节点上5个OSD,并且监控到了OSD的状态