1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Bob と MCP 開発で実現する、日本語操作による AIX 障害対応の自動化

Last updated at Posted at 2026-01-25

はじめに

AI パートナー IBM Bob を活用したシステム運用を試行しています。

今回は、AIX サーバーで障害が発生した際に不可欠な情報収集コマンド snap を、AI から自然言語で実行・取得するための MCP (Model Context Protocol) サーバー を作成しました。

「snap を取って手元の環境に転送しておいて」と指示するだけで、AI が裏側で SSH 接続からファイル転送まで完結させる様子を、実際のログとともにご紹介します。


環境

システム構成と環境

セキュリティ要件を考慮し Proxy サーバー(踏み台)を経由してターゲットの AIX に接続する 構成としています。

  • ローカル環境 (MacBook)
    • IBM Bob (AI IDE / 統合開発環境)
    • Python ベースの MCP サーバー (venv)

  • リモート環境
    • 操作対象 AIXサーバー: SSH接続が可能な状態
    • Proxyサーバー: ローカル環境とAIXをつなぐ踏み台サーバー(SSH接続/鍵交換済み)

[環境概要図]

Note:  Local Mac ↔ Proxy ↔ Target AIX 間は、あらかじめ SSH 鍵交換を行い、パスワードレスでの実行を可能にしています。


対象システムの接続ユーザー権限設定

ターゲットの AIX OS 上で snap コマンドを実行できるユーザーを作成することで、接続ユーザーの権限を最小化しています。
もし乗っ取りや攻撃などがあった際にもアクセスできるユーザーの権限が限られているため実行できる操作が限定されることでセキュリティを確保しています。

ユーザー作成方法は以下に記載しました。


MCPサーバーの開発:Bob への指示(プロンプト)

snap 取得用の MCP サーバーを Bob に作ってもらいます。

今回は Python 仮想環境で動作する MCP サーバーを作成します。

システムプロンプトは下記の内容で実施しました。

(ただし、最初のプロンプトから途中経過のBobとのやりとりで少し修正はしていますが、大きく違いはないと思いますので修正箇所は省略します。)

💡 実際に使用したシステムプロンプト (おりたたみ)
AIX管理用MCPサーバー開発:システムプロンプト
ロール: あなたはPythonおよびIBM AIXシステムのエンジニアリング・エキスパートです。
AIXサーバーの運用を自動化および支援するための、本番環境レベルのPythonベースMCP(Model Context Protocol)サーバーを作成することが任務です。
このサーバーは、開発マシンのPython仮想環境(venv)上で直接動作します。

1. 技術スタック要件
Python: 3.10以降

環境管理: venv による仮想環境

必須ライブラリ:

mcp (FastMCPを使用したPython SDK)

paramiko (SSH/SFTP接続用)

python-dotenv (環境変数による設定管理)

2. MCPツールの実装要件
SSH接続を介してAIXを操作する以下の機能を、MCPツールとして実装してください。

① get_system_stats ツール
実行コマンド: oslevel -s, prtconf, uptime

処理: コマンド出力をパースし、構造化されたマシン読み取り可能な形式に変換する。

戻り値: OSレベル、ハードウェア構成、稼働時間メトリクスを含む包括的なシステム情報。

エラー処理: コマンド実行エラーを適切にハンドリングし、分かりやすいエラーメッセージを返す。

② run_aix_snap ツール
実行コマンド: snap -gc

処理: snapは非同期(バックグラウンド)で実行されるため、実行監視機能を実装する。

進捗管理: 実行の進捗と完了ステータスを追跡する。

戻り値: 生成されたsnapアーカイブファイルのフルパス。長時間実行される操作のためのステータス確認メカニズムを提供すること。

③ fetch_errpt ツール
実行コマンド: errpt -a

処理: エラーログをAIが理解しやすい構造化テキストにパース・整形する。

項目: タイムスタンプ、エラーID、クラス、タイプ、リソース名、詳細説明を含める。

機能: 直近のエラーや特定のクラスによるフィルタリングオプションをサポートする。

④ file_transfer ツール
処理: paramiko.SFTPClientを使用した双方向ファイル転送。

機能: アップロード(ローカルからAIX)およびダウンロード(AIXからローカル)の両方をサポート。

引数: 操作タイプ、ローカルパス、リモートパス。

詳細: 大容量ファイルの進捗追跡、転送前のファイル存在確認および権限チェックの実装。転送ステータス、ファイルサイズ、完了確認を返す。

3. セキュリティおよび設定要件
認証: SSH鍵認証(id_rsa, id_ed25519など)のみを使用し、パスワード認証は使用しない。

設定管理: 全ての接続パラメータ(AIX_HOST, AIX_USER, AIX_SSH_KEY_PATH, AIX_PORT)を .env ファイルから読み込む。

安全性: ソースコード内に認証情報や接続詳細をハードコードしない。

接続管理: 適切なSSH接続ライフサイクル管理(接続、実行、切断)を実装し、リトライロジックを含む接続失敗時の処理を記述する。

4. コード構造要件
mcp SDKの FastMCP クラスを使用し、クリーンな実装を行う。

各AIX操作を @mcp.tool() デコレータで装飾された関数として実装する。

Paramiko操作用の再利用可能なSSH接続コンテキストマネージャを作成する。

特定の例外タイプを含む包括的なエラーハンドリングを実装する。

デバッグおよび運用監視のためのロギングを追加する。

全てのツールパラメータに対して入力バリデーションを実装する。

コード構成:設定読み込み、SSHユーティリティ、MCPツール定義、サーバー初期化を明確に分離する。

5. 出力形式要件
全てのツール結果を、構造化された辞書(dict)またはJSONシリアライズ可能なオブジェクトとして返す。

全てのレスポンスにステータスフィールド(success/error)を含める。

操作失敗時には、文脈に応じた詳細なエラーメッセージを提供する。

AIXコマンドの出力は、LLM(大規模言語モデル)が最適に理解できる形式に整形する。

納品物
仮想環境(venv)ですぐに実行可能な完全なPythonスクリプト。SSH鍵認証を介してAIXシステムに対して4つのツール全てが完全に実装され、テスト可能な状態であること。


実装されたサーバー構造

数分程度で、Bob が以下のディレクトリ構成を生成してくれました。

aix-mcp-server-snap/
├── .bob/                    # Bob設定ディレクトリ
│   ├── mcp.json            # MCP設定ファイル (gitignore対象)
│   └── mcp.json.example    # MCP設定ファイルテンプレート
├── venv/                    # Python仮想環境
├── src/                     # ソースコード
│   ├── __init__.py         # パッケージ初期化
│   ├── main.py             # メインサーバーファイル
│   ├── config.py           # 設定管理
│   ├── ssh_manager.py      # SSH接続管理
│   ├── tool_handlers.py    # ツール実装
│   └── exceptions.py       # カスタム例外
├── .env                    # 環境変数(gitignore対象)
├── .env.example            # 環境変数テンプレート
├── .gitignore              # Git除外設定
├── README.md               # このファイル
├── requirements.txt        # Python依存関係
├── SETUP_GUIDE.md          # セットアップガイド
└── SSH_PROXY_GUIDE.md      # SSHプロキシ設定ガイド

AIX snap取得 MCPサーバーのコード

今回 IBM Bob によって作成されたAIX用のMCPサーバーのコードは、GitHubで公開しています。

※本コードは現状有姿(AS-IS)で公開しており、動作保証はありません。検証環境等で十分テストの上、自己責任でご利用ください


MCP サーバーのデプロイと起動

Local Mac 上で python 仮想環境を作成して MCP サーバーを起動します。

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python --version
Python 3.14.2
(venv) $ pip install --upgrade pip
Requirement already satisfied: pip in ./venv/lib/python3.14/site-packages (25.3)
(venv) $ pip install -r requirements.txt
Collecting mcp>=1.0.0 (from -r requirements.txt (line 1))

~ 省略 ~ 

(venv) $
(venv) $ python -m src.main
2026-01-24 22:37:07 - src.config - INFO - ログレベルを設定しました: INFO
2026-01-24 22:37:07 - __main__ - INFO - ============================================================
2026-01-24 22:37:07 - __main__ - INFO - AIX MCP Server 起動中...
2026-01-24 22:37:07 - __main__ - INFO - ============================================================
2026-01-24 22:37:07 - __main__ - INFO - 接続先: bob@xx.xxx.xx.xxx:22
2026-01-24 22:37:07 - __main__ - INFO - SSH鍵: ~/.ssh/id_rsa
2026-01-24 22:37:07 - __main__ - INFO - SSHプロキシ: root@xx.xx.xx.xx:22
2026-01-24 22:37:07 - __main__ - INFO - ログレベル: INFO
2026-01-24 22:37:07 - __main__ - INFO - 初期化完了
2026-01-24 22:37:07 - __main__ - INFO - ============================================================

サーバー起動後、IBM Bob を再起動します。
Settings 画面を確認し、aix-mcp-server-snap が正常に認識されていれば準備完了です。

スクリーンショット 2026-01-24 23.27.35.png

aix-mcp-server-snap に移動。

Tools(MCPサーバーの機能)には get_system_statsrun_aix_snapfetch_errptfile_transfer が見えています。


aix-mcp-server-snap 動作検証:自然言語による操作

MCPサーバーのツールの稼働確認を実施します。

コマンド名 説明
get_system_stats AIXシステムの統計情報を取得します。
run_aix_snap AIX snap コマンドを実行し、システム診断情報を収集します。
fetch_errpt AIXエラーログを取得し、構造化された形式で返します。
file_transfer AIXサーバーとの間でファイルを転送します。

get_system_stats を実行

AIX のスペックが返ってきました。


fetch_errpt を実行

  • Bob のコメント
直近1日以内のAIXエラーログを取得しました。

## エラーログサマリー(過去24時間)

**総エラー数**: 584件

### 主要なエラー分類

#### 1. **ハードウェアエラー(H)**
最も多く発生しているのはディスク関連のエラーです:

- **SC_DISK_ERR7 (DE3B8540)** - PATH HAS FAILED
  - hdisk0, hdisk1, hdisk2で複数回発生
  - 永続的エラー(PERM)として記録
  
- **SC_DISK_PCM_ERR9 (F31FFAC3)** - PATH HAS RECOVERED
  - 情報レベル(INFO)
  - パスが回復したことを示す

- **FCP_ERR2 (E6DB28E5)** - ADAPTER ERROR
  - fscsi0, fscsi2アダプタで一時的エラー(TEMP)

#### 2. **オペレータ通知(O)**
- **OPMSG (AA8AB241)** - OPERATOR NOTIFICATION
  - 2025年1月25日 10:57:05と1月26日 01:49:59に発生

#### 3. **システムイベント(S)**
- **REBOOT_ID (69350832)** - SYSTEM SHUTDOWN BY USER
  - 2025年1月26日 01:52:05にシステムシャットダウン

#### 4. **不確定エラー(U)**
- **RMCD_2610_120_ER (37F3CC40)** - システム時刻が後退
  - RSCTがシステム時刻の後退を検出
  - 2025年1月25日 10:57:01に発生

### 重要な観察事項

1. **ディスクパスの障害と回復のサイクル**が繰り返し発生しています
2. システムは2025年1月26日 01:52頃に再起動されています
3. エラーログデーモンのON/OFF切り替えが記録されています
4. 時刻関連の問題(RMCD_2610_120_ER)が検出されています

### 推奨アクション

1. ディスクパスの安定性を確認
2. ストレージ接続(fscsi0, fscsi2)の状態を調査
3. システム時刻の設定とNTP設定を確認
4. 必要に応じてRSCTコンポーネントの再起動を検討
4. 
直近1日以内のAIXエラーログを取得しました。

**総エラー数**: 584件

主な問題:
- ディスクパス障害(hdisk0/1/2)が複数回発生・回復を繰り返し
- FCアダプタ(fscsi0/2)で一時的エラー
- システム時刻の後退を検出(RSCT警告)
- システム再起動(1/26 01:52)

重要度の高いエラーはディスク関連のハードウェアエラーです。ストレージ接続の安定性確認を推奨します。

errpt 情報を取得できています。


run_aix_snap の実行とローカルの./snapディレクトリへの転送依頼 (file_transfer)

"run_aix_snap を使用して snap を取得して。ファイルを転送して./snap フォルダに配置して" と伝えます。

バックグラウンドで snap が生成され、正常完了しました。

続いてダウンロードの処理を承認します。

転送が完了しました。

スクリーンショット 2026-01-24 23.12.37.png

./snap ディレクトリが新たに作成され、snap.pax.gz が保管されていることが確認できました。


トークン消費とコスト

snap取得を実行した処理では、18k トークンと 0.03 Bobcoin の消費となりました(画像右上参照)。

スクリーンショット 2026-01-24 23.12.52.png

Bobcoin はアカウントに割り当てられたIBM Bob 使用許可量で、私のアカウントには最初に 50 Bobcoins が付与されていました。
月次リセットされるそうです。

18k / 200k の部分は (使用トークン量) / (1チャットあたりの上限トークン量) を示しています。
消費量から逆算すると、およそ 6k トークン = 0.01 Bobcoin と推測できます。


なお、200k トークンは日本語新書ならおよそ 1.5 ~ 2冊分程度、英語版「ハリーポッター」初期作品の2冊分程度 (約18万〜20万文字)の情報量です。


必要な情報だけを抽出して AI に渡す「情報の取捨選択(コンテキスト・エンジニアリング)」が、AI 運用を低コストかつ高精度にする鍵となります。


おわりに

IBM Bob を活用したAIX のシステム運用試行で snap 取得と転送のMCPサーバーの開発と稼働を確認しました。
ターゲット・サーバーにアクセスするユーザー権限をOS側で絞ることにより、セキュリティを高めています。

AI を使用した自然言語でのシステム運用の一例としてご参考になれば幸いです。

以上です。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?