ServiceNow への SFTP からの CMDB インポート

このページには、SSHファイル転送プロトコル(SFTP)サーバーからServiceNowへのデータをインポートするための手順が記載されています。

Nexthinkは、設定管理データベース(CMDB)にデータをインポートするためにServiceNowの標準プロシージャの使用を推奨します。

以下に、参考用の公式ServiceNowドキュメントをご紹介します:

さらに、Nexthinkは更新セットの形式で設定変更のグループを参考として提供します。 この更新セットの詳細は以下でご確認ください:

前提条件

Nexthink SFTPインポートコネクタには、Nexthink cloudプラットフォームインスタンスが必要です。 システムは、Nexthinkプラットフォームのアウトバウンド統合を使用して生成され、ServiceNowデータソースの消費のためにSFTPサーバーに保存された、SFTPサーバーからCSVファイル形式でServiceNowにデータをインポートします。

プロセスが円滑に進行することを確実にするためには、以下のコンポーネントが必要です:

  • Nexthink cloudインスタンス。

  • SFTPサーバー。

  • ServiceNowインスタンス。

  • SFTPサーバーにCSVファイルをエクスポートするために「アウトバウンドコネクタ」セクションを使用して作成されたデータエクスポーター。

  • CMDB戦略

インポートプロセスに関与するユーザーは、対象テーブルのACLルールに準拠するために必要な役割を持っている必要があります。

主要なServiceNowコンポーネント

データソース

プロセスの最初のステップは、SFTPサーバーからデータを取得してインポートセットテーブルに指定されたデータを反映させるためのアーティファクトを作成することです。

詳細は公式ServiceNowドキュメントをご覧ください:データソース | ServiceNow

データソースを作成する方法

データソースを作成するには、システムインポートセット > 管理 > データソースモジュールに移動し、_新規_ボタンをクリックします。

以下の表は、アーティファクトの各フィールドにおいてデータをどのように設定するかを説明しています。

フィールド
詳細

名前

任意の名前を設定できます。

インポートセットテーブルラベル

任意のテーブルラベルを設定できます。

インポートセットテーブル名

前のフィールドの値に基づいて自動的に設定されます。

タイプ

SFTPを取得方法として使用するには、値を「ファイル」に設定する必要があります。

フォーマット

CSV

ファイル取得方法

SFTP

サーバー

SFTP DNS情報

ポート

SFTPポート。 デフォルトは「22」です。 SFTPサーバーの設定でカスタマイズされている場合は、異なるポートを設定してください。

ファイルパス

システムがサーバーにファイルを保存する絶対パス。 ファイル名を含める必要があります。例:/folder/folder/file_name.csv。

ユーザー名

SFTPユーザー名。

パスワード

SFTPユーザーパスワード。

CSVデリミタ

システムが異なる列に分割するためにファイルに設定されたデリミタ。

データソースを設定した後、関連するリンク「20レコードのロードテスト」をクリックして接続性をテストします。 このユーティリティで、提供したすべての詳細が正しいことを確認し、システムがSFTPサーバーからのデータをServiceNowのインポートセットテーブルにインポートしたことを確認します。

このテストで挿入されたデータは、テスト目的で作成されたインポートセットを生成するため、ターゲットテーブルに転送できない点に注意してください。 CMDBテーブルにデータをインポートするには、関連するリンク「すべてのレコードをロード」をクリックしてください。

更新セットに含まれるデータソースの例は以下でご確認ください:

ServiceNow経由でのSFTPインポートインストールガイド | スケジュールされたインポート構成

変換マップ

変換マップはインポートセット内のフィールドと既存のServiceNowテーブル内のフィールド間の関係を定義するフィールドマップのセットです。 このプロセスの一環で、データセットにインポートされた任意のデータを変更、分割、または変換して、要件に基づいて最終テーブルに保存することも可能です。

変換マップを作成する方法

システムはすべての変換マップをテーブル_sys_transform_map_内に作成します。 システムはテーブルフォームで直接それらを作成することができます。 しかし、リンクされるデータソースから始めて変換マップを作成することをお勧めします。

データソースフォームの下部には関連リスト「変換」があります。 このタブをクリックして「新規」をクリックすると、システムは新しい変換マップを作成するフォームにリダイレクトされます:

新しいレコードフォームで、次のフィールドを入力する必要があります:

フィールド
詳細

名前

任意の名前を設定します。

ソーステーブル

データソースのために作成されたインポートセットテーブルを設定します。

アクティブ

このフィールドのボックスをチェックします。

ターゲットテーブル

システムがデータを挿入する必要がある最終的なCMDBテーブル。

上記で説明した詳細を設定した後、レコードを保存し、ページがリロードされるのを待ってから関連リンク「マッピングアシスト」でフィールドマッピングを作成します:

このツールはフィールドマップの作成を簡素化します。 変換マップにある関連リスト「フィールドマップ」を使用してすべてのマッピングを最初から作成する代わりに、この目的には「マッピングアシスト」を使用することを強くお勧めします。 必要に応じて、関連リスト「フィールドマップ」に小さな調整を加えてください。

このツールを使用するには、(ソース:データソース)の左の列と(ターゲットテーブル)の右の列のフィールドをディスプレイ中央にある「フィールドマップ」列に移動します。 その後、ソースとターゲットフィールドの順序を、この列の同じ行で一致させて、正しくマッピングされていることを確認します。

たとえば、ソースフィールド「device.name」をコンピュータテーブルの「Name」フィールドにマッピングするには、両フィールドが同じマップの同じ行にあることを確認してください。

最後に、将来それをインポートしようとする場合にシステムがレコードを更新することを確実にするために、集合フィールドを設定することが重要です。 たとえば、システムがテーブルのフィールド_ name _を使用してCIを識別している場合、重複を作成しないことが重要です。 これを避けるには、ターゲットテーブルレコードを更新し、再挿入されないことを確実にするために、変換マップ設定でフィールドを集合として設定する必要があります。

集合フィールドの動作に関する詳細はここでご確認ください:

集合を使用してレコードを更新する | ServiceNow

カスタム変換を作成する方法

時には、SFTPサーバーからの着信データが期待される形式でない場合や、システムが挿入されたデータ全体ではなくその一部を保持する必要がある場合があります。 これらの場合、「マッピングアシスト」は十分でないため、カスタム変換を_作成する必要があります。

次のセクションでは、カスタム変換を作成する方法の詳細を説明します。 詳細が必要な場合は、公式のServiceNowドキュメントをご覧ください:

カスタム変換を作成するには、スクリプトを使用するために「ソーススクリプトを使用」ボックスをチェックし、ソースフィールドの代わりに使用します。

これを有効にすると、ディスプレイにソーススクリプトエディターが表示されます:

ここでは、挿入される値を計算するためのJavaScriptコードを追加することができます。 返されるように設定されているものは、フィールドマップで設定されているターゲットフィールドに挿入されることに注意してください。

このことから、インポートセットテーブルの列のいずれもこのスクリプトからソースオブジェクトを介してアクセス可能であることが最も便利な部分です。 これにより、たとえば、このオブジェクトを任意のスクリプトの基礎として使用することが可能です:

更新セットに含まれる変換マップの例は以下でご確認ください:

ServiceNow経由でのSFTPインポートインストールガイド | 変換マップ構成

カスタム変換サンプル

Nexthinkからよくインポートされるフィールドの1つはディスクスペース情報です。 NQLデータモデルリファレンスに記載されているように、フィールド_system_drive_free_space_はデータをバイト形式で保存します。 しかし、コンピュータテーブルのターゲットフィールドは、この情報をGBで保存することを期待しています。 この状況を解決するには、カスタムスクリプトを使用します:

前のセクションで説明したように、フィールドマップ設定フォームに移動し、_ソーススクリプトを使用_ボックスを有効にしてください。 エディターが表示されたら、次のスクリプトを設定してください:

answer = (function transformEntry(source) {
    var value = source.u_disk_capacity;
 return value / Math.pow(1024, 3);
})(source);

上記のスクリプトは、Nexthinkから受信したデータ(バイト)を変数_value_に保存し、同じ値を1024で3回割ります。 言い換えれば、バイトをGBに変換します。

スケジュールされたインポート

スケジュールされたインポートは、システムが指定された時間間隔で指定されたインポート操作を実行することを示します。これは、毎日、毎週、周期的、または異なる時間枠として定義できます。 デフォルトでは、統合によって提供されるスケジュール済みインポートは非アクティブです。 このため、別のスクリプトがプログラム的にそれらを実行します。 詳細は下のセクションでご紹介します。

スケジュールされたインポートを作成する方法

スケジュールされたインポートを作成するには、システムインポートセット > 管理 > スケジュールされたインポートモジュールに移動し、_新規_ボタンをクリックします。 これにより、スケジュールされたデータインポートの新しいレコードフォームが表示されます:

新しいレコードフォームで、次のフィールドを入力します:

フィールド
詳細

名前

任意の名前を設定します。

データソース

データをインポートするようにデータソースをスケジュールします。

アクティブ

このフィールドのボックスをチェックします。

実行

これは、システムがインポートを実行する頻度です。 このフィールドで選択した内容によって、下のフィールドが異なります。

最も重要な設定はアクティブ設定です。 このフィールドをアクティブ化すると、「実行」フィールドの下に、新しいフィールドが表示されるので、スケジュールされたインポートの日付や間隔の詳細を設定できます。 これらのオプションの詳細はServiceNowドキュメントでご確認ください。

アプリケーションアップデートセット用に作成されたスケジュールされたインポートは以下でご覧いただけます:

ServiceNow経由でのSFTPインポートインストールガイド | スケジュールされたインポート構成

インポート手順の実行

データをインポートするための主な方法は2つあります:

手動実行

手動でデータインポート手順を実行するには、インポートセットを作成し、インポートセットテーブルにNexthinkデータを入力する必要があります。

この目的のために、データソースに移動し、関連リンク「すべてのレコードをロード」をクリックします:

システムはインポートステータスフォームにリダイレクトします:

成功と異なる結果を受け取った場合は、返されたエラーを参照し、データソース設定を調整するために構成を再確認してください。

このフォームで、変換の実行リンクをクリックし、インポートセットと変換マップがデータをどこにインポートするかを選択してください:

変換ボタンをクリックすると、変換は完了し、システムはインポートステータスフォームを再度表示します:

ステータスに加えて、インポートセット、変換履歴インポートログ をナビゲートして、すべてのCIが期待どおりにインポートされたことを確認することができます。

スケジュールされた実行

インポートセットの実行をスケジュールするには、フィルターナビゲーターで システムインポートセット → Administration → スケジュールされたインポート に移動します。新規をクリックし、以下の例に示されているようにフォームを完成させます:

It is important to accurately fill in the following 3 fields:

フィールド
詳細

データソース

最初に作成したデータソースを使用します。

実行者

システムはここにリストされたユーザーを代行してスケジュールされたインポートを実行します。 このユーザーに割り当てられたロールはプロセス全体に影響を与える可能性がありますのでご注意ください。

実行

インポートを実行したい頻度を選択します。

アクティブボックスをチェックすると、システムが選択した実行フィールドのオプションに応じて列の表示方法が異なります:

  • 月次

  • 週次

  • 日次

  • 定期的

スケジューリングに関する詳細はこちらをクリックしてください

よくある質問

CIタイプをインポートするにはどうすればよいですか?

まず、必要なNexthinkデータでCSVファイルを生成し、SFTPサーバーに保存します。

Nexthinkでは、Nexthink Infinity > Integrations > Outbound connector セクションでデータエクスポーターを作成することを推奨します。 ここで、例えば、このガイド に従ってSFTPサーバーにCSVファイルをエクスポートし、ワークステーションに関連する列をエクスポートするための次のクエリを使用することが可能です。

devices
| where hardware.machine_serial_number != "" and (hardware.type == laptop or hardware.type == desktop)
| include cpus
| compute num_of_cores = number_of_cores.count(), number_of_cpus = count(), freq = frequency.sum()
| include disks
| compute disk_capacity = capacity.sum()
| list group_name, entity, hardware.manufacturer, hardware.model, operating_system.architecture, hardware.machine_serial_number, name, hardware.memory, num_of_cores, number_of_cpus, freq ,disk_capacity, operating_system.name, operating_system.build 

一度CSVファイルをSFTPサーバーに保存したら、データソースを作成する方法 セクションで説明されているようにデータソースを設定し、インポート手順の実行 セクションで説明されているようにスケジュールまたは手動で実行します。

データをインポートするとき、参照およびsys_choiceフィールドはどうなりますか?

This kind of field, at first, doesn't work in the same way as any other kind of field (such as string, integer, or other types) where the data is simply inserted according to the transform map configuration.

これらのフィールドは実際には、他のテーブルの異なるCIを参照しているため、システムでは挿入する前に参照されているレコードが存在していることを期待しています。

アプリケーションの動作は一つのパラメータに依存します:

  • フィールドマップでの設定 選択アクション作成 に設定すると、システムは参照テーブルに新しい選択またはレコードを作成します。

  • フィールドマップでの設定 選択アクション無視 に設定すると、システムはソーステーブルからの新しい値を無視し、CIは挿入または更新され、参照フィールドは空白のままです。

  • フィールドマップでの設定 選択アクション拒否 に設定すると、システムは新しい値を含む全体のレコードをスキップし、インポートプロセスは次の行に進みます。

CI関係をインポートするにはどうしますか?

まず、必要なNexthinkデータでCSVファイルを生成し、SFTPサーバーに保存します。

私たちは、Nexthink Infinity > Integrations > Outbound connector セクションでデータエクスポーターを作成することをお勧めします。 ここで、例えば、このガイド に従ってSFTPサーバーにCSVファイルをエクスポートし、ワークステーション-ソフトウェアの関係に関連する列をエクスポートするための次のクエリを使用することが可能です。

package.installed_packages
| summarize c1=count() by package.name, package.version , device.name
| list package.name, package.version , device.name

一度CSVファイルをSFTPサーバーに保存したら、データソースを作成する方法 セクションで説明されているようにデータソースを設定し、インポート手順の実行 セクションで説明されているようにスケジュールまたは手動で実行します。

ServiceNowでの関係はどのように機能しますか?

関係用に設定されたテーブルのフィールドは、実際には外部テーブルを指す参照フィールドです。例えば、cmdb_rel_personテーブルには、他のテーブルを参照する2つのフィールドがあります:

  • CI → 参照 cmdb_ci.

  • ユーザー → 参照 sys_user.

したがって、要件に応じてフォローする戦略を決定する必要があります。

  1. 関係の欠落しているCIを作成したい場合 変換内で設定されたフィールドマップの 選択アクション 設定を 作成 に設定します。

  2. 参照されたCIを作成せずに関係を作成したい場合 変換内で設定されたフィールドマップの 選択アクション 設定を 無視 に設定します。 これによりキーが空白のまま関係が作成されます。 このオプションは推奨されません。

  3. CIの一つも存在しない場合に関係を作成したくない場合 フィールドマップで 選択アクション の設定を 拒否 にすると、新しい値を含む全レコードがスキップされ、インポートプロセスは次の行に進みます。

同時に他のインポートメカニズムが実行されている場合はどうなりますか?

CMDBテーブルにデータをインポートしている異なるコネクタがある場合、コアレスフィールドを正確に設定していることを確認してください。 変換マップを作成する方法 セクションで説明されているように、コネクタの動作はコアレスフィールドに依存します。 次に、もしコアレスフィールドの値が既に存在する場合、ターゲットテーブルでいずれかのレコードが見つかると、システムは前回のインポートセットの情報でCIを更新します。

なお、この手続き中、システムはIREエンジンを使用しません。 これは、システムが異なるソースから挿入されたデータを統合するための識別ルールを一切使用しないことを意味します。

このプロセスを自動的に実行することはできますか?

残念ながら、現時点では不可能です。

システムがデータをインポートする前にデータソースのファイルパスを更新する必要があるという制約があります。 将来のリリースでは、それを解決する自動的なメカニズムが提供されるかもしれません。

Flow を使用して、さらに自動化のレベルを追加することが可能です。これは、アクションを呼び出すSFTPステップを通して、Get File ListによりSFTPサーバーに保存されたCSVファイルをリストするものです。

システムがファイルを二度インポートした場合はどうなりますか?

ファイルパスを更新せずにインポートプロセスを二度スケジュールしている場合、システムはCMDBに同じ情報を挿入しようとします。 したがって、sys_import_set テーブルには2つの異なるインポートセットが表示され、最初のセットはすべてのレコードが挿入/更新され、2番目のセットはターゲットテーブルで情報がすでに同一のレコードを無視/スキップします。

将来のリリースでは、データソースのファイルパスを手動で更新する手順を回避するための自動メカニズムが提供されます。

Last updated