如何监控HPCC集群(Thor)中cron任务并在异常时发送通知?
监控HPCC集群Thor节点cron任务并发送故障通知的可行方案
1. 利用cron原生邮件通知
cron默认会将任务的输出(包括错误信息)发送至执行用户的本地邮箱。你可以通过以下方式将告警转发到指定邮箱:
- 编辑用户主目录下的
~/.forward文件,添加目标告警邮箱:your-alert-email@example.com - 确保集群节点的邮件服务(如postfix、sendmail)已配置完成并能向外发送邮件。如果任务无输出,可在cron命令后追加强制告警逻辑:
0 * * * * /path/to/your-thor-task.sh || echo "Thor定时任务执行失败" | mail -s "Cron任务告警" your-alert-email@example.com
2. 自定义状态监控脚本
编写shell脚本记录任务运行时间,对比预期间隔判断是否异常,触发告警:
- 监控脚本示例(
cron_monitor.sh):#!/bin/bash TASK_NAME="thor-custom-cron" LAST_RUN_RECORD="/var/log/${TASK_NAME}_last_run" EXPECTED_INTERVAL=3600 # 任务预期执行间隔(秒,示例为1小时) CURRENT_TIMESTAMP=$(date +%s) if [ -f "$LAST_RUN_RECORD" ]; then LAST_RUN_TIMESTAMP=$(cat "$LAST_RUN_RECORD") TIME_DELTA=$((CURRENT_TIMESTAMP - LAST_RUN_TIMESTAMP)) if [ $TIME_DELTA -gt $EXPECTED_INTERVAL ]; then echo "告警:$TASK_NAME 已超过$EXPECTED_INTERVAL秒未执行,上次运行时间:$(date -d @$LAST_RUN_TIMESTAMP)" | mail -s "Thor Cron任务异常" your-alert-email@example.com fi else echo "告警:$TASK_NAME 无运行记录,可能从未执行" | mail -s "Thor Cron任务异常" your-alert-email@example.com fi - 在你的定时任务末尾添加更新运行时间的命令:
0 * * * * /path/to/your-thor-task.sh && date +%s > /var/log/thor-custom-cron_last_run - 配置监控脚本的定时执行(比如每30分钟检查一次):
*/30 * * * * /path/to/cron_monitor.sh
3. 结合HPCC平台原生监控工具
借助HPCC自带的监控体系扩展cron任务监控:
- ECL Watch自定义监控项:在ECL Watch中添加外部脚本监控,将cron任务的运行状态作为指标上报,配置阈值触发告警通知。
- HPCC监控框架:通过配置监控规则,检测节点上的cron进程状态或任务日志,当发现异常(如进程未启动、日志长时间无更新)时,触发邮件或其他告警方式。
4. 日志分析触发告警
将cron任务的输出定向到专属日志文件,通过检查日志更新或错误关键词触发告警:
- 修改定时任务,将日志写入指定文件:
0 * * * * /path/to/your-thor-task.sh >> /var/log/thor_cron_task.log 2>&1 - 日志检查脚本示例:
#!/bin/bash LOG_FILE="/var/log/thor_cron_task.log" LAST_MODIFIED=$(stat -c %Y "$LOG_FILE") CURRENT_TIMESTAMP=$(date +%s) # 检查日志是否超时未更新 if [ $((CURRENT_TIMESTAMP - LAST_MODIFIED)) -gt 3600 ]; then echo "告警:Thor定时任务日志已超过1小时未更新" | mail -s "Cron任务告警" your-alert-email@example.com fi # 检查日志中的错误关键词 if grep -q "ERROR\|Failed\|Exception" "$LOG_FILE"; then echo "告警:Thor定时任务执行出错,日志路径:$LOG_FILE" | mail -s "Cron任务错误告警" your-alert-email@example.com # 可选:清除已告警的错误记录,避免重复通知 sed -i '/ERROR\|Failed\|Exception/d' "$LOG_FILE" fi - 配置该脚本定时执行,比如每15分钟一次。
内容的提问来源于stack exchange,提问作者Akhilesh Badhri
相关产品推荐
相关产品推荐

