Hitachi

JP1 Cloud Service システム管理 生成AI連携 利用ガイド


1.8.3 使用例:メールに生成AIの回答を含める

JP1 Cloud Service システム管理が提供するメール通知機能と,本コマンドを組み合わせることで,メールの通知文に生成AIの回答を含めるためのスクリプトの実装例を以下に示します。

スクリプトの配置方法は,「JP1 Cloud Service ジョブ管理・システム管理 サービスポータル 利用ガイド」を参照してください。

スクリプト名:integrate_knowledge_search_and_mail_notification.sh

配置先:システム管理マネージャー上の専用ストレージ

配置先ディレクトリパス:/usrfile/

文字コード/改行コード:UTF-8/LF

#!/bin/bash
 
#------------------------------------------------------------------------------
# Arguments         : Same arguments as the mail notification feature
# Exit status       : Success: 0
#                     Failure: 1
#------------------------------------------------------------------------------
 
#------------------------------------------------------------------------------
# Environment setup
#------------------------------------------------------------------------------
set -u
set -o pipefail
 
#------------------------------------------------------------------------------
# Variable initialization
#------------------------------------------------------------------------------
RC_SUCCESS=0
RC_ERROR=1
 
MAIL_CMD="mail_notification.sh.x"
AI_CMD="ai_assistant_cli"
 
#------------------------------------------------------------------------------
# Argument check
#------------------------------------------------------------------------------
if [[ $# -ne 8 ]]; then
    usage >&2
    exit 1
fi
 
#------------------------------------------------------------------------------
# Store arguments
#------------------------------------------------------------------------------
EVSEV="$1"
EVIDBASE="$2"
EVSEQNO="$3"
EVHOST="$4"
EVDATE="$5"
EVTIME="$6"
EVMSG="$7"
GROUP_NAME="$8"
 
#------------------------------------------------------------------------------
# Initialize processing variables
#------------------------------------------------------------------------------
FLAG1=false
FLAG2=false
AI_ERR_MSG=""
AI_RC=0
MAIL_RC=0
AI_RESULT_TEXT=""
MERGED_MSG=""
AI_STDOUT=""
 
#------------------------------------------------------------------------------
# Build query text
#------------------------------------------------------------------------------
QUERY=$(printf "以下のメッセージを確認しました。運用手順を教えてください。\n発生日時: \"%s\"\nメッセージ: \"%s\"\n" \
        "$EVDATE" "$EVMSG")
 
#------------------------------------------------------------------------------
# Invoke the ai_assistant command
#------------------------------------------------------------------------------
AI_OUTPUT=$(
    "$AI_CMD" \
        --query "$QUERY" \
        2>&1
)
AI_RC=$?
 
#------------------------------------------------------------------------------
# Evaluate the ai_assistant command result
#------------------------------------------------------------------------------
if [[ $AI_RC -eq 0 ]]; then
    AI_RESULT_TEXT=$(printf '%s' "$AI_OUTPUT" | jq -r '.ai_response.answer')
else
    FLAG1=true
    AI_RESULT_TEXT=$(printf '%s' "$AI_OUTPUT" | jq -r '.error.message')
fi
 
#------------------------------------------------------------------------------
# Invoke the mail notification script
# Set the 7th argument as a merge of the original message and ai_assistant command result
#------------------------------------------------------------------------------
if ! $FLAG1; then
    EVMSG="${EVMSG}
    
    【生成AIの調査結果】
    ${AI_RESULT_TEXT}"
else
    EVMSG="${EVMSG}
    
    【生成AIの調査結果】
    生成AI連携の呼び出しに失敗しました。"
fi
 
"$MAIL_CMD" "$EVSEV" "$EVIDBASE" "$EVSEQNO" "$EVHOST" "$EVDATE" "$EVTIME" "$EVMSG" "$GROUP_NAME" 2>&1
MAIL_RC=$?
 
#------------------------------------------------------------------------------
# Evaluate the mail notification result
#------------------------------------------------------------------------------
if [[ $MAIL_RC -ne 0 ]]; then
    FLAG2=true
fi
 
#------------------------------------------------------------------------------
# Output handling
# Control stderr output and exit code based on FLAG1/FLAG2 combinations
#------------------------------------------------------------------------------
case "${FLAG1}:${FLAG2}" in
    false:false)
        # Case1: no output, exit 0.
        exit $RC_SUCCESS
        ;;
    true:false)
        # Case2: ai_assistant command failed.
        echo "生成AI連携の呼び出しに失敗しました。" >&2
        echo "エラー内容: ${AI_RESULT_TEXT} RC:${AI_RC}" >&2
        exit $RC_ERROR
        ;;
    false:true)
        # Case3: mail notification failed.
        echo "メール通知に失敗しました。" >&2
        exit $RC_ERROR
        ;;
    true:true)
        # Case4: both failed.
        echo "生成AI連携の呼び出しに失敗しました。" >&2
        echo "エラー内容: ${AI_RESULT_TEXT} RC:${AI_RC}" >&2
        echo "メール通知に失敗しました。" >&2
        exit $RC_ERROR
        ;;
esac

上記実装例をJP1 Cloud Service システム管理の「自動アクションによるコマンド実行」または「対処アクションの自動実行と手動実行」を介して呼び出すための方法を以下に示します。

  1. 自動アクションによるコマンド実行を介して呼び出す方法

    JP1のマニュアル「JP1 Version 13 統合管理 基本ガイド」における,「6.2 特定のイベントが発行されたら自動でコマンドを実行する方法」を参照し,コマンドが自動で実行されるように設定してください。

    [アクション詳細設定]画面の「実行内容」に以下の通り指定してください。

    #

    項目名

    指定内容

    説明

    1

    実行ユーザー名

    JP1ユーザー名

    作成したJP1ユーザーを指定してください。

    2

    実行ホスト名

    $ACTHOST

    -

    3

    アクション

    /usrfile/integrate_knowledge_search_and_mail_notification.sh "$EVSEV" "$EVIDBASE" "$EVSEQNO" "$EVHOST" "$EVDATE" "$EVTIME" "$EVMSG" "グループ名"

    グループ名には,「group1」,「group2」,「group3」のどれかを指定してください。

    これらのグループは,JP1 Cloud Serviceのヒアリングシートに記入された通知先メールアドレスのグループに対応付いています。

    4

    環境変数ファイル

    /jp1cs/actenv.conf

    -

  2. 対処アクションの自動実行を介して呼び出す方法

    JP1のマニュアル「JP1 Version 13 JP1/Integrated Management 3 - Manager 導入・設計ガイド」における,「7. 対処アクションの自動実行と手動実行(JP1/IM - Agent連携)」を参照し,対処アクションの自動実行を介して呼び出せるように設定してください。

    統合オペレーション・ビューアーの定義ファイル操作機能を用いて,自動対処アクション定義ファイル(autoactconf.json)をダウンロードし,以下の例を参考に自動対処アクション定義ファイル(autoactconf.json)の編集を行い,編集した定義ファイルをアップロードしてください。

{
  "meta":{
    "version":"1"
  },
  "actions":[
    {"actionGroup":0,
     "actionId":"1",
     "label":"Errorイベント発生時生成AI調査通知",
     "description":"重大度Errorのイベントに対して自動対処アクション実行。",
     "valid":true,
     "conditions":[
       {"type":"event",
        "key":"E.SEVERITY",
        "ope":"IN",
        "val":["Error"]
       }
     ],
     "action":{
       "type":"cmd",
       "params":{
         "host":"${event:ACTHOST:}",
         "cmd":"/usrfile/integrate_knowledge_search_and_mail_notification.sh \"${event:EVSEV:}\" \"${event:EVIDBASE:}\" \"${event:EVSEQNO:}\" \"${event:EVHOST:}\" \"${event:EVDATE:}\" \"${event:EVTIME:}\" \"${event:EVMSG:}\" \"<グループ名>\"",
         "envFile":"/jp1cs/actenv.conf"
       }
     }
    }
  ]
}

上記実装例と設定によって通知されるメールのタイトルや本文のサンプルは以下の通りです。

メールタイトル

[JP1 Cloud Service]システム管理イベント通知【EventID:イベントID No:イベント通し番号】

メール本文

--------------------------------------------------------------------------------------
JP1 Cloud Serviceのシステム管理により本メールを
お送りしています。
--------------------------------------------------------------------------------------
 
ご担当者様
 
システムがイベントを検知したため、JP1イベント情報をお送りいたします。
 
【重大度】重大度
【イベントID】イベントID
【発生元ホスト名】発生元ホスト名
【発生日時】発生日時
 
【メッセージ】
メッセージ内容
 
【生成AIの調査結果】
生成AIの調査結果
 
================================================
このメールは送信専用となります。
不明な点がございましたら、JP1 Cloud Serviceの
問い合わせ窓口にお問い合わせください。
================================================
 
**********************************************************
このメールは、特定の方に送信することを意図したものです。
お心当たりのない方が受信された場合には、誠に申し訳
ございませんが、問い合わせ窓口メールアドレスへ
メールで連絡の上で、受信したメールは削除して頂きますよう
お願い致します。
**********************************************************


目次