PropertySourcesの作成

最終更新日: 20 年 2023 月 XNUMX 日

PropertySourcesの自動割り当て プロパティ GroovyまたはPowerShellスクリプトの出力に基づくリソースレベルで。 プロパティの割り当てを自動化すると、在庫の追跡とレポートが改善されるという幅広いメリットがあります。 トラブルシューティング; 共有プロパティに基づいてデバイスを動的にグループ化します。

大まかに言えば、PropertySourcesは次のように機能します。

  1. スクリプトはデバイスと対話して、指定されたシステム情報(シリアル番号、ポート速度、ファームウェアバージョンなど)を識別します。
  2. この情報をキーと値のペアとして確立します(たとえば、port.number = 443)
  3. 次に、このキーと値のペアをデバイスのプロパティとして割り当てます

確立されると、PropertySourcesは実行されます。

  • PropertySourceが更新されるたび
  • PropertySourceが適用されるリソースに対してActiveDiscoveryが手動で実行されるたび
  • PropertySourceが手動で実行されるたび(選択 詳細| PropertySourceを実行します PropertySource定義から)。
  • XNUMX日にXNUMX回自動的に(または、PropertySourceがERISourceタイプの場合は、 すべてを収集する フィールド)。

注: PropertySourcesがクラウドリソースに対して適切に機能するためには、最初に ローカルコレクターを介した監視を有効にする.

PropertySourceの作成

新しいPropertySourceを作成するには、 設定| PropertySources | 追加| PropertySource。 [新しいPropertySourceの作成]ダイアログから、確立する必要のあるいくつかの構成があります。

お名前

ベストプラクティスとして、PropertySourceにわかりやすい名前を付けます。 プラットフォームまたはアプリケーションを指定し、必要に応じて、プラットフォームの特定のコンポーネントを指定します。

説明

ベストプラクティスとして、PropertySource名がPropertySourceが収集しているものを十分に説明していない場合、 説明 フィールドには、名前と説明を表示している人がPropertySourceの目的を簡単に認識できるように、十分な追加の詳細を提供する必要があります。

グループ

[グループ]フィールドで、PropertySourceが追加されるPropertySourceグループを指定します。 このフィールドを空のままにすると、PropertySourceはデフォルトの「@ungrouped」グループに追加されます。 既存のPropertySourceグループと一致しないテキストを入力すると、新しいグループがその場で作成されます。

に適用されます

  に適用されます フィールドは、LogicMonitorのAppliesToスクリプトを入力として受け入れ、このPropertySourceに関連付けられるリソースを決定します。 このフィールドの使用に関する詳細情報(ウィザードおよびテスト機能を含む)、およびAppliesToスクリプト構文の概要については、を参照してください。 AppliesToスクリプティングの概要.

データ型

ノーザンダイバー社の データ・タイプ トポロジーマッピングのために外部リソースID(ERI)をリソースに割り当てる目的でPropertySourceが作成されている場合は、フィールドのドロップダウンメニューで[ERISource]を選択します。 それ以外の場合は、デフォルトの「PropertySource」のままにします。 ERIを割り当てるPropertySourcesの詳細については、を参照してください。 トポロジマッピングの概要.

すべて収集

「ERISource」が選択されている場合 データ・タイプ フィールド、 すべてを収集する フィールドが表示されます。 ドロップダウンメニューから、このPropertySourceがデータをポーリングする間隔を選択します。 この間隔は、ERISource以外のPropertySourcesのデフォルトのXNUMX日XNUMX回のポーリングスケジュールを上書きします。

PropertySourceスクリプト

PropertySourceスクリプトは、GroovyまたはPowerShellで記述できます。

PureStorage配列から情報を収集するPropertySourceを作成する方法を見てみましょう。 このPropertySourceは、アレイ名、ID、リビジョン、およびバージョン番号を識別し、この情報をプロパティとしてデバイスに保存します。

これを行うには、次のGroovyスクリプト形式を使用します。

  1. Java HelperクラスとJsonSlurperクラス(JSONテキストをスクリプトで読みやすいGroovyデータ構造に解析するために使用)をインポートします。
    import java.net.*;
    import java.io.*;
    import java.util.*;
    import java.text.*;
    import groovy.json.JsonSlurper;
  2. アレイのホスト名とAPIトークンを取得します。これらはデバイスのプロパティとして設定する必要があります。 これらの応答を、それぞれ「hostName」変数と「apitoken」変数の値として確立します。
    hostName = hostProps.get("system.hostname");
    apitoken = hostProps.get("purestorage.apitoken.pass");
  3. API URLを開始して、リクエストを行う準備をします。
    base_url           = "https://" + hostName;
    arrayInfo_commmand = "/api/1.4/array";
    api_url            = new URL(base_url + arrayInfo_commmand);
  4. 前のステップで定義されたAPI認証パラメーターに基づくGETセッション。
    cookie = getSession();
  5. HTTP接続を開き、arrayInfoリクエストを発行します。
    connection   = api_url.openConnection();
    connection.setRequestMethod("GET");
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "application/json");
    connection.setRequestProperty("Cookie", cookie); 
  6. APIエンドポイントから有効な応答を受信したかどうかを確認します。
    if (connection.getResponseCode() != 200)
    {
        // no -- return an error code that indicates failure
        return(2);
    }
  7. ペイロードを収集し、JSONをマップオブジェクトに解析します。
    jsonslurper  = new JsonSlurper();
    arrayInfo_map = jsonslurper.parseText(connection.content.text);
  8. 結果のマップを繰り返し処理します。
    arrayInfo_map.each
    {  key, value ->
        // print out each key and value
        println "$key=$value";
    }

上記のスクリプトの形式に基づいて、次のような出力が期待されます。

array_name=MY-PURE-001
id=93f00dad-b1aa-1234-5678-ec55f5ba55d6
revision=201609291808+e9e9b09
version=4.7.6

これらのXNUMXつのキーと値のペアは、デバイスのプロパティとして自動的に保存されます。 値が変更された場合、プロパティは次のActiveDiscoveryの反復中に更新されます。

指定されたプロパティをデバイスに適切に割り当てるスクリプトの機能をテストするには、[ テストスクリプト ボタンをクリックして、スクリプトをテストするデバイスを選択します。 [適用先]式に一致するデバイスのみを選択できます。

PropertySourceスクリプトの例

便宜上、一般的なシナリオの開始点を提供するために、実際に機能するPropertySourceスクリプトをいくつか提供しています。

NetAppデバイスのSNMPOID

説明:
すべてのNetAppデバイスに関連するOIDのリストを返します。 productVersion、productModel、productFirmwareVersion、productSerialNumber、ProductPartnerSerialNumber、およびproductMachineTypeを、それぞれのデバイスのキーと値のペア形式のプロパティとして適用します。

に適用されます:
isNetApp()

Groovyスクリプト:

import com.santaba.agent.groovyapi.snmp.Snmp;
// get the snmp host from the device properties
def host = hostProps.get('system.hostname');
// define a list of product oids
def netapp_product_mib =
[
productVersion          : '.1.3.6.1.4.1.789.1.1.3.0',
productModel            : '.1.3.6.1.4.1.789.1.1.7.0',
productFirmwareVersion  : '.1.3.6.1.4.1.789.1.1.11.0',
productSerialNum        : '.1.3.6.1.4.1.789.1.1.14.0',
productPartnerSerialNum : '.1.3.6.1.4.1.789.1.1.15.0',
productMachineType      : '.1.3.6.1.4.1.789.1.1.16.0',
];
// iterate over each oid entry
netapp_product_mib.each
{ key, oid ->
    // retrieve the oid and print the value
    value = Snmp.get(host, oid);
    println "auto." + key + "=" + value;
}
return(0);

SNMPの基本情報

説明:
共通ブランチ1.3.6.1.2.1.1の下のSNMP値から取得するように、「location = something」や「contact = something」などを設定します。

に適用されます:
hasCategory( "SNMP")

Groovyスクリプト:

def hostname = hostProps.get("system.hostname") 
import com.santaba.agent.groovyapi.snmp.Snmp; //for SNMP get 
def OID_model = "1.3.6.1.2.1.1.1.0" // the OID we want 
def model = Snmp.get(hostname, OID_model); 
println "model=" + model //show on screen 
def OID_uptime = "1.3.6.1.2.1.1.3.0" // the OID we want 
def uptime = Snmp.get(hostname, OID_uptime); 
println "uptime=" + uptime 
def OID_contact = "1.3.6.1.2.1.1.4.0" // the OID we want 
def contact = Snmp.get(hostname, OID_contact); 
println "contact=" + contact 
def OID_system_name = "1.3.6.1.2.1.1.5.0" // the OID we want 
def system_name = Snmp.get(hostname, OID_system_name); 
println "system_name=" + system_name 
def OID_location = "1.3.6.1.2.1.1.6.0" // the OID we want 
def location = Snmp.get(hostname, OID_location); 
println "location=" + location 
return 0

Windowsのシリアル番号とBIOS

説明:
WMIを使用して「serial_number = something」および「BIOS_version = something」を設定します(ハイパーバイザーではなくベアメタルでWindowsを実行している場合に便利です)。

に適用されます:
system.model!〜“ Virtual” && system.model!〜“ domU” && isWindows()
(効率を上げるために、仮想ではなく、ベアメタル上のWindowsのみに絞り込みます)

Groovyスクリプト:

hostname=hostProps.get("system.hostname"); 
my_query="Select * from Win32_BIOS" 
namespace="CIMv2" 
import com.santaba.agent.groovyapi.win32.WMI; 
import com.santaba.agent.groovyapi.win32.WMISession; 
def session = WMI.open(hostname); 
def obj = session.queryFirst(namespace, my_query, 10); 
println "serial_number=" + obj.SERIALNUMBER 
println "bios_version=" + obj.SMBIOSBIOSVERSION 
return 0

Postgresデータベースは実行されていますか

説明:
特定のTCPポートが開いているかどうかを確認して、「postgres = yes」を設定します(多くのアプリケーションを検出するのに役立ちます。たとえば、Oracleはポート1521、Postgres = 5432などを使用します)。

に適用されます:
Servers()
(効率を上げるために、スイッチではなくサーバーのみに絞り込みます)

Groovyスクリプト:

def hostname = hostProps.get("system.hostname")
def port_number = 5432
try {
 new Socket(hostname, port_number).close(); // Socket try to open a REMOTE port
 println "postgres=yes" // remote port can be opened
 } catch(Exception e) {
 println "connection on port " + port_number + " failed"
 }
return 0

Hyper-Vの

説明:
'hyper-v = yes'を設定し、VMMS(Hyper-V仮想マシン管理)という名前のサービスが実行されているかどうかを検出することにより、MicrosoftHyper-Vを検出します。

に適用されます:
system.model!〜“ Virtual” && system.model!〜“ domU” && isWindows()
(効率を上げるために、ベアメタル上のWindowsのみに絞り込みます)

Groovyスクリプト:

hostname=hostProps.get("system.hostname") 
my_query="Select name,state from Win32_Service Where Name ='vmms'" 
import com.santaba.agent.groovyapi.win32.WMI; 
import com.santaba.agent.groovyapi.win32.WMISession; 
def session = WMI.open(hostname); 
def obj = session.queryFirst("CIMv2", my_query, 10); 
if (obj.STATE == "Running") { 
 println "hyper-v=yes" 
} else { 
 println "hyper-v=no" 
} 
return 0

ウェブサーバー

説明:
Webページを取得し、「SERVER:」の横のテキストを取得して、「Web_server = something」プロパティを設定します(例:Microsoft-IIS / 8.5)。

に適用されます:
isWindows()
(効率を上げるために、Windowsのみに絞り込みます)

Groovyスクリプト:

import com.santaba.agent.groovyapi.http.*; // needed for http.get 
def hostname=hostProps.get("system.hostname"); 
def my_url="https://" + hostname 
my_input_string = HTTP.get(my_url) 
def my_regex = /(?i)server: (.*)/ 
def my_matcher = (my_input_string =~ my_regex) 
my_stuff = my_matcher[0][1] 
println "web_server=" + my_stuff 
return 0;

説明:
サービス「NTDS」(つまり、Active Directoryドメインサービス)が実行されている場合は、「domain_controller = yes」プロパティを設定します。

に適用されます:
isWindows()
(効率を上げるために、Windowsのみに絞り込みます)

Groovyスクリプト:

hostname=hostProps.get("system.hostname"); 
my_query="Select name,state from Win32_Service Where Name ='NTDS'" 
import com.santaba.agent.groovyapi.win32.WMI; 
import com.santaba.agent.groovyapi.win32.WMISession; 
def session = WMI.open(hostname); 
def result = session.queryFirst("CIMv2", my_query, 10); 
if (result.STATE == "Running") { 
println "active_directory=yes" 
} else { 
println "active_directory=no" } 
return 0;

応募者と

説明:
サービス「MSExchangeADTopology」(つまり、Microsoft Exchange Active Directoryトポロジ)が実行されている場合は、「exchange = yes」プロパティを設定します。

に適用されます:
isWindows()
(効率を上げるために、Windowsのみに絞り込みます)

Groovyスクリプト:

hostname=hostProps.get("system.hostname"); 
my_query="Select name,state from Win32_Service Where Name ='MSExchangeADTopology'" 
import com.santaba.agent.groovyapi.win32.WMI; 
import com.santaba.agent.groovyapi.win32.WMISession; 
def session = WMI.open(hostname); 
def result = session.queryFirst("CIMv2", my_query, 10); 
if (result.STATE == "Running") { 
println "exchange=yes" 
} else { 
println "exchange=no" } 
return 0

MS_SQL

説明:
MSSQLSERVERという名前のサービスが実行されている場合は、「MS_SQL = yes」を設定します。

に適用されます:
isWindows()
(効率を上げるために、Windowsのみに絞り込みます)

Groovyスクリプト:

hostname=hostProps.get("system.hostname"); 
my_query="Select name,state from Win32_Service Where Name ='MSSQLSERVER'" 
import com.santaba.agent.groovyapi.win32.WMI; 
import com.santaba.agent.groovyapi.win32.WMISession; 
def session = WMI.open(hostname); 
def obj = session.queryFirst("CIMv2", my_query, 10); 
if (obj.STATE == "Running") { 
 println "MS_SQL=yes" 
} else { 
 println "MS_SQL=no" 
} 
return 0

MS_SQL_バージョン

説明:
'MS_SQL_version = something'を設定します。 SQLクエリを使用します。 Windows認証を使用しますが、SQL認証を使用するように変更できます。

に適用されます:
システム.db.mssql

(効率のために、(MS SQLコンピューターのみに限定)

Groovyスクリプト:

def hostname = hostProps.get("system.hostname"); 
import groovy.sql.Sql // needed for SQL connection and query 
def url = "jdbc:sqlserver://" + hostname + ";databaseName=master;integratedSecurity=true"; 
def driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  
sql = Sql.newInstance(url, driver) // connects to SQL server 
def query_result = sql.firstRow("SELECT @@version as info") 
full_version_info = query_result.info 
sql.close() // Close connection 
input_string_1 = full_version_info 
def regex_1 = /(?<=SQL Server)(.*)(?=-)/; //capture between 'SQL Server' until '-' 
def matcher_1 = (input_string_1 =~ regex_1) 
version = matcher_1[0][1].trim() 
input_string_2 = full_version_info 
def regex_2 = /(?<=\n)(.*)(?=Edition)/; //capture between line break until 'Edition' 
def matcher_2 = (input_string_2 =~ regex_2) 
edition = matcher_2[0][1].trim() 
println "ms_sql_version=" + version +" "+ edition 
return 0;

PropertySourcesの管理

PropertySourceを作成すると、そこから表示および編集できるようになります。 設定| LogicModules | PropertySources。 さらに、PropertySource設定ページ(次に表示)のヘッダーから、[ その他 次のいずれかのアクションを実行するためのボタン:

  • PropertySourceを実行します。 PropertySourceを手動で実行します。
  • デバイスの一致を強制します。 AppliesToコードを手動で実行して、該当するすべてのデバイスがキャプチャされ、このPropertySourceに関連付けられていることを確認します。
  • 関連するデバイスを表示します。 このPropertySourceの影響を受けるすべてのデバイスを含むテーブルを表示します。
  • 書き出す。 PropertySourceをJSONファイルとしてエクスポートします。
記事上で