返回

用一个Shell脚本监控服务器挂掉后ElasticSearch自动重启

后端


在实际的工作生产过程中,有很多业务场景都对实时数据有要求,如日志收集、监控报警、电商活动等等。Elasticsearch 作为一款优秀的分布式开源搜索引擎,在这些场景下有着广泛的应用。

Elasticsearch 默认是不具备进程状态监控的,一旦 Elasticsearch 进程假死、挂掉、异常及服务器断网、宕机恢复后,Elasticsearch 服务不能自动恢复,需要运维人员手动重启服务,这就可能造成业务的中断,也给运维人员带来了不少麻烦。

因此,我们需要实现一个监控脚本,来帮助我们自动地重启 Elasticsearch 服务,并判断恢复,检测服务器CPU、内存和磁盘的使用情况,为我们的 Elasticsearch 服务提供可靠的监控保护。


实现思路

  1. 定时检查 Elasticsearch 服务状态

    使用定时任务来定期检查 Elasticsearch 服务的状态,如果 Elasticsearch 服务异常,则执行重启脚本。

  2. 重启 Elasticsearch 服务

    使用 shell 命令来重启 Elasticsearch 服务。

  3. 判断 Elasticsearch 服务是否恢复

    使用 shell 命令来检查 Elasticsearch 服务是否已经恢复,如果 Elasticsearch 服务未恢复,则继续执行重启脚本,直到 Elasticsearch 服务恢复。

  4. 检测服务器 CPU、内存和磁盘的使用情况

    使用 shell 命令来检测服务器 CPU、内存和磁盘的使用情况,如果服务器资源使用情况异常,则发送告警消息。

  5. 将脚本加入系统定时任务

    将脚本加入系统定时任务,使其定时运行。


实现步骤

  1. 创建脚本文件

    在服务器上创建一个名为 monitor_elasticsearch.sh 的脚本文件,并添加以下内容:

    #!/bin/bash
    
    # 检查 Elasticsearch 服务状态
    elasticsearch_status=$(systemctl status elasticsearch | grep "Active:" | awk '{print $2}')
    
    # 如果 Elasticsearch 服务异常,则重启服务
    if [ "$elasticsearch_status" != "active" ]; then
        systemctl restart elasticsearch
    
        # 判断 Elasticsearch 服务是否恢复
        while true; do
            elasticsearch_status=$(systemctl status elasticsearch | grep "Active:" | awk '{print $2}')
            if [ "$elasticsearch_status" = "active" ]; then
                break
            fi
            sleep 1
        done
    fi
    
    # 检测服务器 CPU、内存和磁盘的使用情况
    cpu_usage=$(sar -u 1 1 | tail -n 1 | awk '{print $8}')
    memory_usage=$(free -m | grep "Mem:" | awk '{print $3}')
    disk_usage=$(df -h | grep "/" | awk '{print $5}')
    
    # 如果服务器资源使用情况异常,则发送告警消息
    if [ "$cpu_usage" -gt 80 ] || [ "$memory_usage" -gt 80 ] || [ "$disk_usage" -gt 80 ]; then
        echo "Server resource usage is abnormal!" | mail -s "Server Resource Usage Alert" root
    fi
    
  2. 将脚本加入系统定时任务

    使用 crontab 命令将脚本加入系统定时任务,使其定时运行。

    crontab -e
    

    在 crontab 文件中添加以下内容:

    * * * * * /bin/bash /path/to/monitor_elasticsearch.sh
    

    保存 crontab 文件。


测试脚本

```shell
/bin/bash /path/to/monitor_elasticsearch.sh
```

检查脚本是否能够正常运行。

总结

本文介绍了一个使用 Shell 脚本来监控 Elasticsearch 服务状态、自动重启 Elasticsearch 服务、判断 Elasticsearch 服务是否恢复、检测服务器 CPU、内存和磁盘的使用情况的方法,并将其加入系统定时任务,使其定时运行。