見出し画像

invoiceAgent 文書管理(オンプレミス版) で自身のWebサービスの死活監視してみました

みなさん、こんにちは!
わっくぼです。
みなさんの2023年のゴールデンウイークはいかがだったでしょうか。
システム管理者は、このゴールデンウイークの間にシステム移行をされていたのではないでしょうか。

私も、業務の傍らに開発用サーバーも運用管理を行っており、社内向け invoiceAgent 製品(オンプレ版)デモ環境等の監視も行っています。
特に、デモ環境では動作せずに放置すると関係各所から連絡が舞い込んできます。
起動できていない状態を検知するために、ヘルスチェック用URLを利用して死活監視を行い、関係各所に迷惑が掛からないようにしています。

今回は、Enterprise設定ガイドに記載されている invoiceAgent 文書管理(オンプレミス版)のヘルスチェック用URLを利用して死活監視について、書いてみようと思います。

前回の note でも、invoiceAgent 製品について書かさせていただいています。
invoiceAgent は当社ウイングアーク1stが提供する電子帳票プラットフォームになります。
invoiceAgent の詳細につきましては、製品のサイトをご参照ください。
invoiceAgent 製品のサイト <https://www.wingarc.com/product/ia/>

今回の課題

invoiceAgent文書管理(オンプレミス版)のヘルスチェック用URLを利用して死活監視してみたいと思います。

注意事項

  • 今回の内容は、invoiceAgent 文書管理(オンプレミス版)のみに適用することが出来ます。

  • invoiceAgent 文書管理(クラウド版)では、サービスの稼働状況が確認できるサービスヘルスダッシュボードと呼ばれるサイトがあります。
    invoiceAgent 文書管理のログイン画面の上部に [稼働状況] のリンクをクリックするとサービスヘルスダッシュボードが表示されます。

    クラウド版では、サービスヘルスダッシュボードを確認して頂くようお願い致します。

  • サンプルのため、ご利用された方の損害の責任は負いかねますのであらかじめご了承ください。

ヘルスチェック用URLの概要

ヘルスチェック用URLは、invoiceAgent文書管理 Enterpriseの機能であるクラスタリング機能を使用する時に、ロードバランサー経由でSPA Webサービスに接続する際の死活監視に利用するものです。

ヘルスチェック用URLにてinvoiceAgent文書管理の死活監視が可能なサービス

ヘルスチェック用URLにて確認できるinvoiceAgent文書管理のサービス

ヘルスチェック用URLのリクエスト方法

次のURLにアクセスすることで、invoiceAgent文書管理のサービスのヘルスチェックを実施できます。

http://<invoiceAgent文書管理のサーバー名またはIPアドレス>:44230/spa/service/system/alive

ヘルスチェック用URLのリクエスト結果

ヘルスチェック用URLのリクエスト時のレスポンスは、以下になります。
Enterprise設定ガイドに記載されています。

正常な稼働状態
指定したinvoiceAgent文書管理のWebサービスとアーカイブサーバーが正常に稼働している場合、次のようなレスポンスが返ります。

  • HTTPステータス「200」

  • X-Spa-Error-Code: 0

  • レスポンスのボディ「OK」

異常な稼働状態
Webサービスが正常に稼働し、アーカイブサーバーが停止している場合は、次のようなレスポンスが返ります。

  • HTTPステータス「503」

  • X-Spa-Error-Code: -5001

ヘルスチェック用URLの実行例

PowerShell を使用して以下のコードを作成しました。
ヘルスチェックが成功の場合は 0(ゼロ)、失敗の場合は 1を返すようにしています。

###
# invoiceAgent文書管理のヘルスチェック用URLを使用したSPA Webサービスの死活監視をする
# PowerShellを使用したサンプルコードです
#
# 戻り値
#   ヘルスチェックOK: 0
#   障害発生: 1
# サンプルコードのため、ご利用される際は自己責任にてご利用してください。
###

# 戻り値の初期化
$ExitCode = 0
$Message = ""

# invoiceAgent文書管理の接続先URLを設定してください。
$SPAEndPoint = "http://localhost:44230/spa/"
# ヘルスチェック用URLを作成します。
$SPAHealthCheckURL = $SPAEndPoint + "service/system/alive"

try {
    # invoiceAgent文書管理にヘルスチェック用のリクエストします
    $res = Invoke-WebRequest -Method "GET" -Uri $SPAHealthCheckURL

    # Invoke-WebRequest を実行した際に例外が発生しない場合は、
    # 正常の応答(HTTPステータス: 200)になります。
    $Message = `
        "SPA Webサービスは正常状態です。`nHTTPステータス : {0}`nX-Spa-Error-Code : {1}" `
        -f `
        $res.StatusCode,
        $res.Headers["X-Spa-Error-Code"]
} catch {
    # 例外が発生した場合(何等かで異常が発生している)
    $ExceptionResponse = $_.Exception.Response

    # HTTPヘッダーの存在の確認
    if ($null -ne $ExceptionResponse.Headers) {
        # HTTPヘッダーが存在している場合は接続先URLから何等かレスポンスはあり、
        # SPAエラーコード[X-Spa-Error-Code]の取得を試みる
        $SpaErrorCode = $ExceptionResponse.Headers["X-Spa-Error-Code"]

        # HTTPヘッダーのSPAエラーコードが存在しているか確認をする
        if ($null -ne $SpaErrorCode) {
            # HTTPヘッダーのSPAエラーコードが存在している場合
            #   (invoiceAgent文書管理にて異常が発生している)

            # HTTPヘッダーのSPAエラーメッセージをURLデコードする
            $SpaErrorMessage = [System.Web.HttpUtility]::UrlDecode($ExceptionResponse.Headers["X-Spa-Error-Message"])
            # メッセージの作成
            $Message = `
                "SPA Webサービスに異常状態です。(invoceAgent文書管理に障害あり)`nHTTPステータス : {0}`nX-Spa-Error-Code : {1}`nX-Spa-Error-Message : {2}"  `
                -f `
                $ExceptionResponse.StatusCode.Value__,
                $ExceptionResponse.Headers["X-Spa-Error-Code"],
                $SpaErrorMessage
        } else {
            # HTTPヘッダーのSPAエラーコードが存在しない場合
            #   (invoiceAgent文書管理のヘルスチェック用URLにリクエスト失敗等)

            # メッセージの作成
            $Message = `
                "SPA Webサービスに異常状態です。`nHTTPステータス : {0}`nStatus Description : {1}" `
                -f `
                $ExceptionResponse.StatusCode.Value__,
                $ExceptionResponse.StatusCode
        }
    } else {
        # HTTPヘッダーが取得できない場合
        #   (invoiceAgent文書管理のWebサービスに接続失敗等)

        # メッセージの作成
        $ErrorMessage = $Error[0].toString()
        $Message = `
            "SPA Webサービスの接続に失敗しました。`nエラーメッセージ: {0}" `
            -f `
            $ErrorMessage
    }
    # 戻り値 1 (エラー)
    $ExitCode = 1
}
# メッセージの出力とPowerShellの戻り値をセットする
Write-Host $Message
Exit $ExitCode

正常終了時
SPA Webサービスは正常状態です。
HTTPステータス : 200
X-Spa-Error-Code : 0

異常終了時(アーカイブサーバーが起動していない時)
SPA Webサービスに異常状態です。(invoceAgent文書管理に障害あり)
HTTPステータス : 503
X-Spa-Error-Code : -5001
X-Spa-Error-Message : アーカイブサーバーに接続できません。

エラーの時は、メールやチャットにメッセージを送るなどの外部プログラムと連携して頂ければと思います。

統合運用管理ソフトのZabbixを使用した実行例

※Zabbixの使い方等については、省略させていただきます。

1.[設定]ー[ホスト]設定にて、監視するinvoiceAgent文書管理ホストを作成します。

2.Web監視にて、ヘルスチェック用URLをリクエストするためのWebシナリオを作成します。

3.Webシナリオのシナリオを設定します。
名前、監視間隔、および、試行回数は適切に設定をしてください。

Webシナリオの追加

4.ステップを設定します。
名前は、適切に設定をしてください。
URLは、ヘルスチェック用URLを設定します。

http://<invoiceAgent文書管理のIPアドレス:ポート番号>/service/system/alive

取得モードは、「ボディ」 タイムアウトは、「15s」(15秒)
要求文字列は、「OK」(正常終了のレスポンスのボディ)
要求ステータスコードは、「200」(正常終了のHTTPステータス)

ステップの追加

5.Webシナリオを保存します。

6.トリガーにて、Webシナリオが実行に失敗したときにエラー検知するようにします。
名前は、適切に設定をしてください。
深刻度は、適切に設定をしてください。
サーバーがダウンしているため、「重度の障害」になると思います。
条件式は、以下にしてください。
最近(last)、追加したWebシナリオのテストがエラーになったステップが存在した時に、トリガーを発動する。

last(/<ホスト>/web.test.fail[<追加したWebシナリオ>])<>0
トリガーの追加

Zabbixのメディア機能とトリガーアクションを使用して、トリガーの通知を行ってください。

最後に

統合運用管理ソフトでWebサイトのモニタリング機能がある場合は、ヘルスチェック用URLを利用するとサーバーの状態を含めた形で対処が出来ると思います。
少しでも、運用の軽減になれば幸いです。

いいなと思ったら応援しよう!