PropertySourcesの作成
最終更新日: 28 年 2024 月 XNUMX 日PropertySourcesの自動割り当て プロパティ GroovyまたはPowerShellスクリプトの出力に基づくリソースレベルで。 プロパティの割り当てを自動化すると、在庫の追跡とレポートが改善されるという幅広いメリットがあります。 トラブルシューティング; 共有プロパティに基づいてデバイスを動的にグループ化します。
大まかに言えば、PropertySourcesは次のように機能します。
- スクリプトはデバイスと対話して、指定されたシステム情報(シリアル番号、ポート速度、ファームウェアバージョンなど)を識別します。
- この情報をキーと値のペアとして確立します(たとえば、port.number = 443)
- 次に、このキーと値のペアをデバイスのプロパティとして割り当てます
確立されると、PropertySourcesは実行されます。
- PropertySourceが更新されるたび
- PropertySourceが適用されるリソースに対してActiveDiscoveryが手動で実行されるたび
- PropertySourceが手動で実行されるたび(選択 詳細| PropertySourceを実行します PropertySource定義から)。
- XNUMX日にXNUMX回自動的に(または、PropertySourceがERISourceタイプの場合は、 すべてを収集する フィールド)。
ご注意: PropertySourcesがクラウドリソースに対して適切に機能するためには、最初に ローカルコレクターを介した監視を有効にする.
PropertySourceの作成
新しいPropertySourceを作成するには、 設定| PropertySources | 追加| PropertySource。 [新しいPropertySourceの作成]ダイアログから、確立する必要のあるいくつかの構成があります。
お名前
ベストプラクティスとして、PropertySourceにわかりやすい名前を付けます。 プラットフォームまたはアプリケーションを指定し、必要に応じて、プラットフォームの特定のコンポーネントを指定します。
Description
ベストプラクティスとして、PropertySource名がPropertySourceが収集しているものを十分に説明していない場合、 Description フィールドには、名前と説明を表示している人がPropertySourceの目的を簡単に認識できるように、十分な追加の詳細を提供する必要があります。
グループ
[グループ]フィールドで、PropertySourceが追加されるPropertySourceグループを指定します。 このフィールドを空のままにすると、PropertySourceはデフォルトの「@ungrouped」グループに追加されます。 既存のPropertySourceグループと一致しないテキストを入力すると、新しいグループがその場で作成されます。
に適用されます
この に適用されます フィールドは、LogicMonitorのAppliesToスクリプトを入力として受け入れ、このPropertySourceに関連付けられるリソースを決定します。 このフィールドの使用に関する詳細情報(ウィザードおよびテスト機能を含む)、およびAppliesToスクリプト構文の概要については、を参照してください。 AppliesToスクリプティングの概要.
Data Type
ノーザンダイバー社の データ・タイプ トポロジーマッピングのために外部リソースID(ERI)をリソースに割り当てる目的でPropertySourceが作成されている場合は、フィールドのドロップダウンメニューで[ERISource]を選択します。 それ以外の場合は、デフォルトの「PropertySource」のままにします。 ERIを割り当てるPropertySourcesの詳細については、を参照してください。 トポロジマッピングの概要.
すべて収集
「ERISource」が選択されている場合 データ・タイプ フィールド、 すべてを収集する フィールドが表示されます。 ドロップダウンメニューから、このPropertySourceがデータをポーリングする間隔を選択します。 この間隔は、ERISource以外のPropertySourcesのデフォルトのXNUMX日XNUMX回のポーリングスケジュールを上書きします。
PropertySourceスクリプト
PropertySourceスクリプトは、GroovyまたはPowerShellで記述できます。
PureStorage配列から情報を収集するPropertySourceを作成する方法を見てみましょう。 このPropertySourceは、アレイ名、ID、リビジョン、およびバージョン番号を識別し、この情報をプロパティとしてデバイスに保存します。
これを行うには、次のGroovyスクリプト形式を使用します。
- Java HelperクラスとJsonSlurperクラス(JSONテキストをスクリプトで読みやすいGroovyデータ構造に解析するために使用)をインポートします。
import java.net.*; import java.io.*; import java.util.*; import java.text.*; import groovy.json.JsonSlurper;
- アレイのホスト名とAPIトークンを取得します。これらはデバイスのプロパティとして設定する必要があります。 これらの応答を、それぞれ「hostName」変数と「apitoken」変数の値として確立します。
hostName = hostProps.get("system.hostname"); apitoken = hostProps.get("purestorage.apitoken.pass");
- API URLを開始して、リクエストを行う準備をします。
base_url = "https://" + hostName; arrayInfo_commmand = "/api/1.4/array"; api_url = new URL(base_url + arrayInfo_commmand);
- 前のステップで定義されたAPI認証パラメーターに基づくGETセッション。
cookie = getSession();
- HTTP接続を開き、arrayInfoリクエストを発行します。
connection = api_url.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Cookie", cookie);
- APIエンドポイントから有効な応答を受信したかどうかを確認します。
if (connection.getResponseCode() != 200) { // no -- return an error code that indicates failure return(2); }
- ペイロードを収集し、JSONをマップオブジェクトに解析します。
jsonslurper = new JsonSlurper(); arrayInfo_map = jsonslurper.parseText(connection.content.text);
- 結果のマップを繰り返し処理します。
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
- SNMPの基本情報
- Windowsのシリアル番号とBIOS
- Postgresデータベースは実行されていますか
- Hyper-Vの
- Web_server
- Active Directory
- 応募者と
- MS_SQL
- MS_SQLバージョン
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;
Active Directory
説明:
サービス「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ファイルとしてエクスポートします。