splunkサービスが停止してたら自動復旧させるshellスクリプト例


はじめに

  • SplunkプロセスがダウンしていたらSplunkサービスを再起動する簡単なスクリプトを用意
  • そもそもSplunkサービスがちゃんと動いていることって何をもって確認すればいいか?マニュアルをチェック

スクリプトのポイント

  • Good unix way check if splunkd and splunkweb are running
    • こちらのAnswerのscriptをもとにちょっとだけ改良しました。
  • ①statusのチェック、②プロセスのチェック、③curlによるチェックの3本柱
  • スクリプト実行した結果をsendmailコマンドでメール通知する

実際のスクリプト例

check.sh
#!/bin/sh

# ## Splunk Health Checking Script to run hourly ##
# This will run some basic checks to ensure      ##
# splunk is running and restart those services   ##
# if it fails a check.                           ##
## ############################################# ##

service=splunk
path=/opt/splunk/bin/
to=(your mail address)
mailbody=(your mail body text file)

# Error handling function
function errorCheck {
        if [ $? -ne 0 ] ; then
                echo "Error occurred connecting on port 8089 for $service"
                $path$service start
                sendmail $to < $mailbody 
        fi
}


# check for the processes to be running
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 )); then
       echo "$service is running!!!"
else
       $path$service start
       sendmail $to < $mailbody 
fi

# check for the service itself to be running
# sometimes the service can crash leaving stale PID's running
if (( $($path$service status | grep "splunkd is running" | wc -l) > 0 )) ; then
       echo "$service is running!!!"
else
       $path$service start
       sendmail $to < $mailbody 
fi

# check if we can connect locally on port 8089
/usr/bin/curl -s -k -o "/dev/null" https://127.0.0.1:8089
errorCheck

email.txtの用意

# cat email.txt 
From: splunk-check
Subject: Splunk service was restarted.
Splunk service was restarted by script.

crontabで設定(毎0時に実行!)

crontab
* 0 * * * /home/splunk/check.sh

メール届く(試しにsplunk stopして確認)

ハマったポイント

ps -ef | grep -v grep | grep $service | wc -l > 0

  • これだと環境によっては、grep -vのフィルタ条件が甘いです。たとえば以下の例のようにsplunkプロセスとは関係ないものもひっかけるので。
  • そういうときは、 |grep -v bashなどでつないでフィルタします。