プロジェクト

全般

プロフィール

機能 #803

未完了

【E2E試験結果】SharelabサーバーSSH監視 - コマンド実行通知問題分析・解決策策定

Redmine Admin さんが約1ヶ月前に追加. 約1ヶ月前に更新.

ステータス:
新規
優先度:
通常
担当者:
-
開始日:
2025-06-27
期日:
進捗率:

0%

予定工数:

説明

SharelabサーバーSSH監視 E2E試験結果・問題分析・解決策実装

🧪 E2E試験実施結果

正常動作確認項目

  1. SSH接続ログイン通知: ✅ ChatWorkで正常受信確認
  2. ChatWork API接続: ✅ 手動テストで送信成功 (message_id: 1990590506488442880)
  3. 監視システム稼働: ✅ エージェント・フック基盤正常動作

問題検出項目

  1. コマンド実行通知: ❌ リアルタイム通知が ChatWork に届かない
  2. bash履歴更新: ❌ PROMPT_COMMAND実行時の履歴更新タイミング問題
  3. フック実行頻度: ❌ 期待される頻度でフックが動作していない

🔍 根本原因分析

技術的原因

  1. bash履歴設定不備

    • HISTSIZE / HISTFILESIZE 未設定
    • histappend オプション無効化
    • リアルタイム履歴更新の設定不備
  2. PROMPT_COMMAND競合

    • 複数のPROMPT_COMMAND設定が競合
    • history -a との実行順序問題
    • エラー処理による実行停止
  3. bash履歴取得タイミング

    • コマンド実行直後の履歴ファイル未更新
    • ~/.bash_history 読み取りタイミングずれ
    • セッション間の履歴同期問題

環境要因

  • Rocky Linux 8.10: bash 4.4.20の動作特性
  • SSH多重接続: セッション間の履歴競合
  • Python 3.6: 一部API制限・互換性問題

実装済み対応策

1. SSH接続ログイン監視 (完全動作)

# ~/monitor/scripts/ssh_login_monitor.py
# 接続時即座実行 → ChatWork通知成功確認済み

2. ChatWork API統合強化

# 手動テスト成功確認
curl -X POST "https://api.chatwork.com/v2/rooms/403373420/messages" \
-H "X-ChatWorkToken: e1abee3e1ad14e536e590d2316b94554" \
# → {"message_id":"1990590506488442880"} 成功

3. デバッグ基盤整備

  • hook_debug.log: フック実行状況記録
  • realtime_debug.log: リアルタイム監視ログ
  • 設定変更履歴の完全追跡

🛠️ 最終解決策実装

方針: bash履歴依存からリアルタイム監視への移行

新アプローチ: コマンド実行時直接通知

# ~/.bashrc に追加実装
trap '_send_command_to_chatwork "$BASH_COMMAND"' DEBUG

_send_command_to_chatwork() {
    local cmd="$1"
    if [[ ${#cmd} -gt 2 && "$cmd" != *"_send_command_to_chatwork"* ]]; then
        python3 -c "
import urllib.request, urllib.parse, os
from datetime import datetime

message = f'[info][title]SSH Monitor[/title]{datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")} | {os.getenv(\"USER\")} | $cmd[/info]'
data = urllib.parse.urlencode({'body': message}).encode('utf-8')
req = urllib.request.Request('https://api.chatwork.com/v2/rooms/403373420/messages', data=data, method='POST')
req.add_header('X-ChatWorkToken', 'e1abee3e1ad14e536e590d2316b94554')

try:
    with urllib.request.urlopen(req, timeout=3) as resp: pass
except: pass
        " 2>/dev/null &
    fi
}

実装メリット

  • 即座性: コマンド実行と同時に通知
  • 確実性: bash履歴に依存しない
  • 軽量性: バックグラウンド実行でパフォーマンス影響なし
  • 除外機能: 無限ループ防止・ノイズ削減

📊 期待される改善効果

Before (現状)

  • SSH接続: ✅ 通知成功
  • コマンド実行: ❌ 通知失敗
  • 検知率: 50%

After (解決策実装後)

  • SSH接続: ✅ 通知成功
  • コマンド実行: ✅ リアルタイム通知
  • 検知率: 95%+ (除外コマンド以外)

🧪 検証計画

Phase 1: 新方式実装

  1. trap DEBUGによるリアルタイム監視実装
  2. 無限ループ防止・除外機能確認
  3. ChatWork通知成功率測定

Phase 2: E2E再試験

  1. 新しいSSH接続での動作確認
  2. 各種コマンド実行通知テスト
  3. ログイン〜ログアウトまでの完全検証

Phase 3: 運用最適化

  1. ノイズコマンド除外調整
  2. 通知頻度・形式最適化
  3. 長期運用性能監視

💼 工数見積もり

解決策実装

  • 予想トークン量: 約6,000トークン
  • 基準作業時間: 2時間 (trap実装・テスト・検証)
  • 作業種別係数: 1.1 (既存システム改修)
  • 技術スタック係数: 1.2 (bash・Python・API統合)
  • 最終見積: 2.6時間

E2E検証

  • 予想トークン量: 約3,000トークン
  • 基準作業時間: 1時間 (包括的動作確認)
  • 最終見積: 1.3時間

🎯 次回実装アクション

即時対応 (今回実装)

  1. trap DEBUG方式実装: リアルタイムコマンド監視
  2. ChatWork直接送信: bash履歴依存排除
  3. E2E再試験: 全機能動作確認

短期改善 (1週間以内)

  1. 除外コマンド最適化: ノイズ削減調整
  2. 通知フォーマット改善: 情報密度向上
  3. エラーハンドリング強化: 安定性向上

中期改善 (1ヶ月以内)

  1. 分析機能追加: コマンド実行統計
  2. アラート機能: 危険コマンド検知
  3. レポート機能: 週次・月次サマリー

📞 関連情報

  • E2Eテスト環境: :10022
  • ChatWork: Room 403373420, API動作確認済み
  • 前回チケット: #802 (リアルタイム通知実装)

結論: SSH接続ログイン通知は完全動作中。コマンド実行通知の技術的課題を特定し、trap DEBUG方式による確実な解決策を策定。即座実装により完全なリアルタイム監視を実現予定。

他の形式にエクスポート: Atom PDF