mcpField
C
cmdb-search-analysis

cmdb-search-analysis

github.com/happy-technologies-llcデータ・データベース4141 回インストール2 日前に更新
リポジトリ

cmdb-search-analysis について

ServiceNow CMDBの検索・分析向けスキルです。自然言語の依頼をCIクエリに変換し、関係情報やビジネスサービスの文脈も加えて、アナリスト、変更管理者、インシデント対応担当者を支援します。

主な機能

  1. 01自然言語から構造化クエリへの変換
  2. 02クラスや複数条件によるCI検索
  3. 03CIの関係と依存関係の取得
  4. 04ビジネスサービスとの関連付けとレポート作成
  5. 05CIクラスとテーブルスキーマの探索

活用シーン

  1. 01指定環境内のサーバー検索
  2. 02アプリケーションCIと依存関係の分析
  3. 03環境間のCI比較
  4. 04インシデント対応向けCI情報の整理

MCP 対応

SN-Natural-Language-Search、SN-Query-Table、SN-Discover-Table-SchemaなどのMCPツールで、CMDB、CIの関係、ビジネスサービスを検索します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill cmdb-search-analysis

インストール後、Claude Code で/cmdb-search-analysisを入力して読み込まれたか確認します。

詳細

CMDB の検索と分析

概要

このスキルを使うと、Configuration Management Database(CMDB)をインテリジェントに検索、分析できます。対象となる作業は次のとおりです。

  • 自然言語のクエリを、cmdb_ci およびその子テーブルを対象とする構造化された CMDB 検索に変換する
  • 名前、クラス、場所、環境、運用ステータスを組み合わせた複数条件の検索を実行する
  • cmdb_rel_ci のリレーションシップデータを検索結果に追加する
  • cmdb_ci_service の関連付けから、関連するビジネスサービスを特定する
  • 依存関係のコンテキストを含めて、検索結果を構造化レポートにまとめる
  • クエリに最適なテーブルを対象にできるよう、CI クラスとスキーマを特定する

使用する場面:「米国のデータセンターにある本番データベースサーバーをすべて検索して」「SAP アプリケーションに関連する CI は何ですか?」「ビジネス分類がクリティカルな Linux サーバーをすべて表示して」のような質問に対応するときです。

**価値:**正確な CMDB 検索により、CI 階層を手作業でたどる時間を短縮し、アナリスト、変更管理者、インシデント対応担当者が適切な構成アイテムをすばやく見つけられます。

前提条件

  • ロール: itil、cmdb_read、または asset へのアクセス権
  • アクセス: cmdb_ci、cmdb_rel_ci、cmdb_ci_service、および子 CI テーブルへの読み取りアクセス権
  • 知識: CMDB のクラス階層とリレーションシップの種類に関する理解
  • 関連スキル: リレーションシップの作成には cmdb/relationship-mapping、CI の作成には cmdb/ci-discovery

手順

ステップ 1:対象の CI クラスを特定する

ユーザーのリクエストに基づいて、クエリ対象の CMDB テーブルを決定します。CMDB は cmdb_ci をルートとするクラス階層を使用します。

利用可能な CI クラスを確認する:

MCP を使用する場合(Claude Code/Desktop):

Tool: SN-Discover-Table-Schema
Parameters:
  table_name: cmdb_ci

REST API を使用する場合:

GET /api/now/cmdb/meta?sysparm_type=class_hierarchy&sysparm_ci_type=cmdb_ci

自然言語クエリにおける一般的なクラスの対応関係:

ユーザーの表現対象テーブル備考
「サーバー」または「ホスト」cmdb_ci_server物理サーバーと仮想サーバー
「データベース」cmdb_ci_db_instanceデータベースインスタンス
「アプリケーション」または「アプリ」cmdb_ci_applアプリケーション CI
「ネットワークデバイス」または「スイッチ」cmdb_ci_netgearネットワーク機器
「ロードバランサー」cmdb_ci_lbロードバランサー
「ストレージ」cmdb_ci_storage_deviceストレージアレイ
「仮想マシン」または「VM」cmdb_ci_vm_instance仮想マシンインスタンス
「コンテナ」cmdb_ci_containerコンテナインスタンス
「サービス」cmdb_ci_serviceビジネスサービス
「クラスター」cmdb_ci_clusterサーバーまたはアプリケーションのクラスター
ステップ 2:検索クエリを作成する

自然言語のリクエストを ServiceNow のエンコードクエリ文字列に変換します。

エンコードクエリを使用する場合:

Tool: SN-Query-Table
Parameters:
  query: environment=production^osLIKELinux^location.nameLIKENew York^business_criticality=1
  table_name: cmdb_ci_server
  limit: 25

構造化クエリを使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: cmdb_ci_server
  query: operational_status=1^os_domainLIKELinux^location.nameLIKENew York^business_criticality=1
  fields: sys_id,name,sys_class_name,ip_address,os,operational_status,environment,business_criticality,location,support_group
  limit: 50
  order_by: name

REST API を使用する場合:

GET /api/now/table/cmdb_ci_server?sysparm_query=operational_status=1^os_domainLIKELinux^location.nameLIKENew%20York^business_criticality=1&sysparm_fields=sys_id,name,sys_class_name,ip_address,os,operational_status,environment,business_criticality,location,support_group&sysparm_limit=50&sysparm_display_value=true

一般的なクエリ演算子:

演算子意味例
=等しいoperational_status=1
LIKE含むnameLIKEprod
STARTSWITHで始まるnameSTARTSWITHweb
INリスト内sys_idINid1,id2,id3
!=等しくないenvironment!=development
ISNOTEMPTY値があるip_addressISNOTEMPTY
^ANDname=x^status=1
^ORORname=x^ORname=y
ステップ 3:リレーションシップで検索結果を補完する

見つかった各 CI のリレーションシップを取得し、依存関係のコンテキストを示します。

特定の CI のリレーションシップを取得する:

Tool: SN-Query-Table
Parameters:
  table_name: cmdb_rel_ci
  query: parent=[ci_sys_id]^ORchild=[ci_sys_id]
  fields: parent,parent.name,parent.sys_class_name,child,child.name,child.sys_class_name,type.name,type.parent_descriptor,type.child_descriptor
  limit: 50

REST API を使用する場合:

GET /api/now/table/cmdb_rel_ci?sysparm_query=parent=[ci_sys_id]^ORchild=[ci_sys_id]&sysparm_fields=parent,parent.name,parent.sys_class_name,child,child.name,child.sys_class_name,type.name,type.parent_descriptor,type.child_descriptor&sysparm_limit=50&sysparm_display_value=true

複数の CI のリレーションシップを一括検索する:

Tool: SN-Execute-Background-Script
Parameters:
  description: Get relationships for multiple CIs from search results
  script: |
    var ciIds = ['sys_id_1', 'sys_id_2', 'sys_id_3']; // Replace with actual IDs
    var results = [];

    ciIds.forEach(function(ciId) {
      var ci = new GlideRecord('cmdb_ci');
      if (!ci.get(ciId)) return;

      var entry = {
        sys_id: ciId,
        name: ci.name.toString(),
        class: ci.sys_class_name.toString(),
        upstream: [],
        downstream: []
      };

      var rel = new GlideRecord('cmdb_rel_ci');
      rel.addQuery('child', ciId);
      rel.setLimit(20);
      rel.query();
      while (rel.next()) {
        entry.upstream.push({
          name: rel.parent.name.toString(),
          class: rel.parent.sys_class_name.toString(),
          relationship: rel.type.parent_descriptor.toString()
        });
      }

      rel = new GlideRecord('cmdb_rel_ci');
      rel.addQuery('parent', ciId);
      rel.setLimit(20);
      rel.query();
      while (rel.next()) {
        entry.downstream.push({
          name: rel.child.name.toString(),
          class: rel.child.sys_class_name.toString(),
          relationship: rel.type.child_descriptor.toString()
        });
      }

      results.push(entry);
    });

    gs.info(JSON.stringify(results, null, 2));
ステップ 4:関連するビジネスサービスを特定する

見つかった CI を、それらがサポートするビジネスサービスに対応付けます。

MCP を使用する場合:

Tool: SN-Query-Table
Parameters:
  table_name: service_ci_assoc
  query: ci_id=[ci_sys_id]
  fields: service_id,service_id.name,service_id.operational_status,service_id.business_criticality
  limit: 10

REST API を使用する場合:

GET /api/now/table/service_ci_assoc?sysparm_query=ci_id=[ci_sys_id]&sysparm_fields=service_id,service_id.name,service_id.operational_status,service_id.business_criticality&sysparm_limit=10&sysparm_display_value=true
ステップ 5:構造化された検索レポートを生成する

検索結果、リレーションシップ、サービスのコンテキストをまとめ、包括的なレポートを作成します。

完全な分析にバックグラウンドスクリプトを使用する場合:

Tool: SN-Execute-Background-Script
Parameters:
  description: Generate structured CMDB search report
  script: |
    var searchQuery = 'nameLIKEprod-web^operational_status=1';
    var targetTable = 'cmdb_ci_server';
    var report = { query: searchQuery, table: targetTable, timestamp: new GlideDateTime().getDisplayValue(), results: [] };

    var gr = new GlideRecord(targetTable);
    gr.addEncodedQuery(searchQuery);
    gr.setLimit(25);
    gr.query();

    while (gr.next()) {
      var ciData = {
        sys_id: gr.sys_id.toString(),
        name: gr.name.toString(),
        class: gr.sys_class_name.toString(),
        ip_address: gr.ip_address ? gr.ip_address.toString() : '',
        environment: gr.environment ? gr.environment.getDisplayValue() : '',
        criticality: gr.business_criticality ? gr.business_criticality.getDisplayValue() : '',
        status: gr.operational_status.getDisplayValue(),
        support_group: gr.support_group ? gr.support_group.getDisplayValue() : '',
        location: gr.location ? gr.location.getDisplayValue() : '',
        relationships: { upstream: 0, downstream: 0 },
        services: []
      };

      var upRel = new GlideAggregate('cmdb_rel_ci');
      upRel.addQuery('child', gr.sys_id);
      upRel.addAggregate('COUNT');
      upRel.query();
      if (upRel.next()) ciData.relationships.upstream = parseInt(upRel.getAggregate('COUNT'));

      var downRel = new GlideAggregate('cmdb_rel_ci');
      downRel.addQuery('parent', gr.sys_id);
      downRel.addAggregate('COUNT');
      downRel.query();
      if (downRel.next()) ciData.relationships.downstream = parseInt(downRel.getAggregate('COUNT'));

      var svcAssoc = new GlideRecord('service_ci_assoc');
      svcAssoc.addQuery('ci_id', gr.sys_id);
      svcAssoc.query();
      while (svcAssoc.next()) {
        ciData.services.push(svcAssoc.service_id.getDisplayValue());
      }

      report.results.push(ciData);
    }

    report.totalFound = report.results.length;
    gs.info(JSON.stringify(report, null, 2));
ステップ 6:クラスを横断した検索

ユーザーのクエリが複数の CI クラスにまたがる場合は、ベースの cmdb_ci テーブルまたは複数の子テーブルを横断して検索します。

すべての CI タイプを横断する広範な検索:

Tool: SN-Query-Table
Parameters:
  table_name: cmdb_ci
  query: nameLIKEpayment^operational_status=1
  fields: sys_id,name,sys_class_name,operational_status,environment,business_criticality,support_group
  limit: 50
  order_by: sys_class_name,name

REST API を使用する場合:

GET /api/now/table/cmdb_ci?sysparm_query=nameLIKEpayment^operational_status=1&sysparm_fields=sys_id,name,sys_class_name,operational_status,environment,business_criticality,support_group&sysparm_limit=50&sysparm_display_value=true

ツールの使用方法

MCP ツールリファレンス
ツール使用する場面
SN-Natural-Language-Search自然言語のクエリを CMDB 検索に変換する
SN-Query-TableCMDB テーブルに対して構造化クエリを実行する
SN-List-CmdbCisクラス別の一般的な CI 検索に便利なツール
SN-Get-Recordsys_id で単一の CI レコードを取得する
SN-Discover-Table-Schema利用可能なフィールドと CI クラスを調べる
SN-Execute-Background-Script集計を含む複雑な複数テーブルクエリを実行する
REST API リファレンス
エンドポイントメソッド用途
/api/now/table/cmdb_ciGETすべての CI タイプを横断して検索する
/api/now/table/cmdb_ci_*GET特定の CI クラスのテーブルを検索する
/api/now/table/cmdb_rel_ciGETCI 関係をクエリする
/api/now/table/cmdb_ci_serviceGETビジネスサービスをクエリする
/api/now/cmdb/metaGETCMDB クラス階層のメタデータを取得する

ベストプラクティス

  • 適切なクラスから始める: CI タイプがわかっている場合は、ベースの cmdb_ci テーブルを検索するよりも、cmdb_ci_server にクエリするほうが高速で正確です
  • 表示値を使用する: REST 呼び出しに sysparm_display_value=true を追加すると、sys_id の代わりに人が読みやすいラベルを取得できます
  • 結果セットを制限する: 常に妥当な上限を設定してください。CMDB テーブルには数百万件のレコードが含まれることがあります
  • フィルターを組み合わせる: 複数の条件(名前+環境+ステータス)を使って結果を絞り込み、誤一致を減らします
  • クラス階層を確認する: クエリを実行する前に、スキーマの検出を使って各 CI クラスにどのフィールドがあるかを確認します
  • 頻繁に使うクエリをキャッシュする: 検索を繰り返す場合は、再利用できるようにエンコードされたクエリ文字列を記録しておきます
  • 関係のコンテキストを含める: 生の CI リストは依存関係のコンテキストがないと有用性が低くなります。可能な場合は常に関係情報を追加してください
  • 運用ステータスを考慮する: 特に検索対象としている場合を除き、廃止または使用停止になった CI を除外するため、operational_status=1(Operational)でフィルターします

トラブルシューティング

検索結果がありません

症状: CI の存在がわかっているのに、クエリの結果が空です 原因: テーブルが間違っている(CI が別のクラスに属している)、CI 名が少し異なる、または CI が稼働中ではない 解決策: ベースの cmdb_ci テーブルで広範な LIKE フィルターを使って検索するか、稼働中ではない CI も含めるために operational_status フィルターを削除します

検索結果が多すぎます

症状: 数千件の結果が返され、正しい CI を特定するのが困難です 原因: クエリの範囲が広すぎます(例:nameLIKEweb は数百件の CI に一致します) 解決策: 環境、場所、サポートグループ、またはクラスのフィルターを追加して結果を絞り込みます。名前の一致には LIKE ではなく STARTSWITH を使用します。

関係データがありません

症状: CI が明らかにアプリケーションスタックの一部なのに、関係が表示されません 原因: CMDB に関係が登録されていません。ディスカバリーが実行されていないか、手動入力が不足している可能性があります 解決策: この CI に Service Mapping または Discovery が設定されているか確認します。cmdb/relationship-mapping を使用して、不足している関係を作成します。

クラスが見つかりません

症状: 特定の CI クラステーブルへのクエリでエラーが発生します 原因: テーブル名が間違っているか、CI クラスのプラグインがインストールされていません 解決策: cmdb_ci に対して SN-Discover-Table-Schema を使用して利用可能な子クラスを一覧表示するか、sys_db_object にクエリして想定される名前に一致するテーブルを探します。

例

例 1:本番環境の Web サーバーをすべて検索する
# 1. Search for production web servers
Tool: SN-Query-Table
Parameters:
  table_name: cmdb_ci_server
  query: nameLIKEweb^environment=production^operational_status=1
  fields: sys_id,name,ip_address,os,environment,business_criticality,location,support_group
  limit: 50

# 2. Get relationships for top result
Tool: SN-Query-Table
Parameters:
  table_name: cmdb_rel_ci
  query: child=[first_result_sys_id]
  fields: parent.name,parent.sys_class_name,type.parent_descriptor

# 3. Find associated services
Tool: SN-Query-Table
Parameters:
  table_name: service_ci_assoc
  query: ci_id=[first_result_sys_id]
  fields: service_id.name,service_id.business_criticality
例 2:自然言語による CI 検索

ユーザーの質問: 「給与計算アプリケーションをサポートしているデータベースサーバーはどれですか?」

# 1. Find the payroll application CI
Tool: SN-Query-Table
Parameters:
  query: nameLIKEpayroll^ORshort_descriptionLIKEpayroll
  table_name: cmdb_ci_appl
  limit: 5

# 2. Find downstream database dependencies
Tool: SN-Query-Table
Parameters:
  table_name: cmdb_rel_ci
  query: parent=[payroll_app_sys_id]^child.sys_class_nameLIKEdb
  fields: child.name,child.sys_class_name,child.ip_address,child.environment,type.child_descriptor

# Result: Lists all database CIs that the payroll application depends on
例 3:環境の比較

ユーザーの質問: 「CRM システムの本番サーバーとステージングサーバーを比較してください」

# 1. Find CRM-related servers in production
Tool: SN-Query-Table
Parameters:
  table_name: cmdb_ci_server
  query: nameLIKEcrm^environment=production^operational_status=1
  fields: sys_id,name,ip_address,os,cpu_count,ram,disk_space

# 2. Find CRM-related servers in staging
Tool: SN-Query-Table
Parameters:
  table_name: cmdb_ci_server
  query: nameLIKEcrm^environment=staging^operational_status=1
  fields: sys_id,name,ip_address,os,cpu_count,ram,disk_space

# 3. Compare and report differences in specs, count, and configuration

関連スキル

  • cmdb/relationship-mapping - CI 関係の作成と検証
  • cmdb/ci-discovery - CI の作成と分類
  • cmdb/data-quality - CMDB データの正確性の確保
  • cmdb/impact-analysis - 検索結果を使用した変更影響の分析
  • cmdb/service-graph-diagnosis - Service Graph Connector とディスカバリーのトラブルシューティング
  • admin/schema-discovery - テーブルスキーマとフィールド定義の調査

コメント