Apache Solr

 

solrのヘルスチェック

solrのヘルスチェックを行います。原始的ですが、シェルスクリプトで手軽に死活監視する事ができます。エラー時はmailコマンドでメール通知します。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

solrが稼働しているかどうか、簡単なスクリプトを使って死活監視をしてみましょう。

死活監視のためのチェック項目は以下とします。

  • solrサーバのhttpステータスコード
  • solr adminのping結果
  • solrのインデックス数

簡易的なものなので、コアが1つしか対応していなかったりするので、適宜カスタマイズして下さい。

また、最適なコードではないので予めご了承下さい。

#!/bin/sh

host=$1

#---------------------------------------------------
# 初期設定値
#---------------------------------------------------
MAIL_FROM='hoge@gmail.com'
MAIL_TO='hoge@gmail.com'
# コア名を指定して下さい
CORE_NAME='address'
# サーブレットのコンテキストパスを指定して下さい
SERVLET_CONTEXT_PATH='solr-server'
# solrのインデックス数が何件以下ならエラーとみなすかの閾値
SOLR_NUMFOUNT_THRESHOLD=1000
# solr admin
SOLR_ADMIN_URI="http://${host}:8080/${SERVLET_CONTEXT_PATH}/${CORE_NAME}/admin"
# solr select
SOLR_SELECT_URI="http://${host}:8080/${SERVLET_CONTEXT_PATH}/${CORE_NAME}/select"


usage() {
    echo "Usage: `basename $0` <hostname or ip>"
    exit 1
}

sendMail() {
    from=$1
    to=$2
    rawSubject=$3
    rawContents=$4
    inputEncoding="utf-8"
    outputEncoding="iso-2022-jp"
    subjectHead="=?${outputEncoding}?B?"
    subjectBody="`echo $rawSubject | iconv -f $inputEncoding -t $outputEncoding | base64 | tr -d '\n'`"
    subjectTail="?="
    subject="$subjectHead$subjectBody$subjectTail"
    contents="`echo -e ${rawContents} | iconv -f $inputEncoding -t $outputEncoding`"
    echo "$contents" | mail -s "$subject" "$to" -- -f "$from"
    return $?
}

test -z $host && usage

solrPingUrl="${SOLR_ADMIN_URI}/ping"
solrPingResult="`curl $solrPingUrl`"

# httpステータスチェック
httpStatus="`curl -s ${solrPingUrl} -o /dev/null -w \"%{http_code}\"`"
if [ $httpStatus -ne 200 ]; then
    subject="solrサーバのhttpステータスが${httpStatus}です。(`hostname`)"
    contents="${subject}\nURL=${solrPingUrl}"
    sendMail "$MAIL_FROM" "$MAIL_TO" "$subject" "$contents"
    echo "$subject"
    exit 1
fi

# solr pingチェック
solrStatus=`echo $solrPingResult | egrep "<str name=\"status\">OK</str>" | wc -l`
if [ $solrStatus -ne 1 ]; then
    subject="solrのpingがエラーを返しました。(`hostname`)"
    contents="${subject}\nURL=${solrPingUrl}\n${solrStatus}"
    sendMail "$MAIL_FROM" "$MAIL_TO" "$subject" "$contents"
    echo "$subject"
    exit 1
fi

# solrのnumFoundの閾値チェック
solrCountUrl="${SOLR_SELECT_URI}/?q=*%3A*&start=0&rows=0&indent=on"
solrNumFound=`curl "${solrCountUrl}" | egrep "numFound=" | awk -F ' ' '{ print $3 }' | sed -e 's/[^"]*"\([^"]*\)".*/\1/g'`
if [ $solrNumFound -lt $SOLR_NUMFOUNT_THRESHOLD ]; then
    subject="solrのデータ件数が${solrNumFound}件になっています。(`hostname`)"
    contents="${subject}\nURL=${solrCountUrl}"
    sendMail "$MAIL_FROM" "$MAIL_TO" "$subject" "$contents"
    echo "$subject"
    exit 1
fi
◯ 広告