首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >检测ceph状态并用用钉钉报警[bash]

检测ceph状态并用用钉钉报警[bash]

作者头像
用户9314062
发布于 2022-05-20 13:59:07
发布于 2022-05-20 13:59:07
8280
举报
文章被收录于专栏:LINUX开源玩家LINUX开源玩家

更新

20200202

输出显示pve集群的名称

本来是为了放假安心随手写的,结果这个漫长的假期真的收到了一个报警,因为我有两个pve集群使用ceph,一时间不知道是哪一个在报警,增加一行获取pve集群名,一并输出。

为了及时发现和处理ceph故障,写一个bash脚本检测ceph状态并用钉钉报警。

脚本的大概思路是这样的:

执行检测命令"ceph health",获取输出。

如果输出是"HEALTH_OK":

  • 如果有错误日志,通过钉钉发送当前状态,并删除错误日志。

如果输出不是"HEALTH_OK":

  • 如果有错误日志,说明已经报错,就不再报错,直接退出。
  • 如果没有错误日志,把报错信息记录下来,通过钉钉发送当前状态,并创建错误日志。

脚本如下,修改电话号码PHONE和钉钉TOKEN就可以了:

代码语言:javascript
复制
# vi check_ceph.sh
#!/bin/bash

LOG=/tmp/cepherr.log
cephHealth=$(ceph health)
cephStat=$(echo $cephHealth | awk '{print $1}')
pveCluster=$(pvecm status | grep Name:  | cut -d":" -f2)

PHONE="1xxxxxxxxxx"
TOKEN="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx183440d2aba9d75bfd8f3cac41f1f06785be9e98"
DING="curl -H \"Content-Type: application/json\" -X POST --data '{\"msgtype\": \"text\", \"text\": {\"content\": \"${pveCluster} ${cephHealth} done!\"}, \"at\": {\"atMobiles\": [${PHONE}], \"isAtAll\": false}}' ${TOKEN}"

if [ $cephStat != HEALTH_OK ]; then
        problem=$(echo $cephHealth | awk '{$1=""; print $0}')
        if [ -e $LOG ]; then
                echo $problem && exit
        else
                eval $DING
                echo $problem > $LOG
        fi

else
        if [ -e $LOG ]; then              
                eval $DING
                rm $LOG
        fi
        echo $cephHealth && exit 0
fi

让脚本可执行:

代码语言:javascript
复制
# chmod +x /root/check_ceph.sh

接下来让定时任务执行脚本,比如每隔10分钟执行一次:

代码语言:javascript
复制
# crontab -e
*/10 * * * * /root/check_ceph.sh

测试,在ceph osd设置"noout",等10分钟就钉钉就会收到报警"pve集群名 HEALTH_WARN noout flag(s) set"。

其实pvesh可以通过api获取pve信息,所以可以考虑扩展这个脚本,把集群状态,存储状态,节点状态统统定时收集并报警。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档