cmdb-search-analysis について
ServiceNow CMDBの検索・分析向けスキルです。自然言語の依頼をCIクエリに変換し、関係情報やビジネスサービスの文脈も加えて、アナリスト、変更管理者、インシデント対応担当者を支援します。
主な機能
- 01自然言語から構造化クエリへの変換
- 02クラスや複数条件によるCI検索
- 03CIの関係と依存関係の取得
- 04ビジネスサービスとの関連付けとレポート作成
- 05CIクラスとテーブルスキーマの探索
活用シーン
- 01指定環境内のサーバー検索
- 02アプリケーションCIと依存関係の分析
- 03環境間のCI比較
- 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 |
^ | AND | name=x^status=1 |
^OR | OR | name=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-Table | CMDB テーブルに対して構造化クエリを実行する |
SN-List-CmdbCis | クラス別の一般的な CI 検索に便利なツール |
SN-Get-Record | sys_id で単一の CI レコードを取得する |
SN-Discover-Table-Schema | 利用可能なフィールドと CI クラスを調べる |
SN-Execute-Background-Script | 集計を含む複雑な複数テーブルクエリを実行する |
REST API リファレンス
| エンドポイント | メソッド | 用途 |
|---|---|---|
/api/now/table/cmdb_ci | GET | すべての CI タイプを横断して検索する |
/api/now/table/cmdb_ci_* | GET | 特定の CI クラスのテーブルを検索する |
/api/now/table/cmdb_rel_ci | GET | CI 関係をクエリする |
/api/now/table/cmdb_ci_service | GET | ビジネスサービスをクエリする |
/api/now/cmdb/meta | GET | CMDB クラス階層のメタデータを取得する |
ベストプラクティス
- 適切なクラスから始める: 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- テーブルスキーマとフィールド定義の調査