SNMPを使用してCaché上のシステムを監視するためのカスタムOIDを作成します

すべてのhabrozhitelemに良い日(夜、夜、朝-必要なものに下線を引く)!
この投稿は、 SNMPを使用してCachéインスタンスを監視することに関するものです。 確かに、多くのCachéユーザーはすでにこれをある程度使用しています。 SNMPを介した監視は、標準のCachéインストールで長い間サポートされてきましたが、対象のすべてのパラメーターにボックスからアクセスできるわけではありません。 たとえば、CSPセッションの数の監視、ライセンスの使用に関する詳細情報、オペレーティングシステムのプライベートKPIなどを確認したいと思います。
この記事では、SNMPを使用してCachéを監視するための設定を追加する方法を学習します。

すでに持っているもの
Cachéは、SNMPを使用して監視できます。 既にサポートされているもののリストは、<Install_dir> / SNMPディレクトリーのファイルで見ることができます。 通常、 ISC-CACHE.mibISC-ENSEMBLE.mibの 2つのファイルがあります。 Cachéのファイル-ISC-CACHE.mibに興味があります。 たとえば、ライセンスとセッションに関して何が得られるか興味があります。 次の表に、Intersystems- 1.3.6.1.4.1.16563のルートから階層が取得された場合の対応するOIDを示します
オイド役職説明データ型
.1.1.1.1.10cacheSysLicenseUsedこのCachéインスタンスで使用されている現在のライセンス数整数
.1.1.1.1.11cacheSysLicenseHighこのCachéインスタンスで使用されるライセンスの最高水準点整数
.1.2.16cacheLicenseExceedライセンスのリクエストが利用可能なライセンスまたは許可されたライセンスを超えましたトラップメッセージ
.1.1.1.1.6cacheSysCurUserこのCachéインスタンスの現在のユーザー数整数

配信には多くの重要なインジケータ、たとえばCSPセッションの数、ライセンス情報が完全ではない、そしてもちろん、アプリケーション固有のインジケータの監視は含まれていません。
知りたいことの例:

また、パフォーマンスを評価するためのパラメーターをいくつか追加します。 パラメータ自体は供給にありますが、たとえば、1分あたりの成長を知りたいと思います。


独自のパラメーターを追加する方法
SNMPを使用したCachéの監視 」というドキュメントを利用できます
テストインスタンス(TEST)には、 Caché2013.1.3のバージョンがあります 。 オペレーティングシステム-Linux CentOSリリース6.5(最終) 。 Linux OSでのキャッシュのインストールについては、 オタク誌で説明されています InterSystemsのネイティブドキュメントも役立ちます。
短い作業計画は次のとおりです。
  1. メトリックを収集するためのクラスを作成します。
  2. ^%SYSMONMGRを使用して、Cachéで新しいクラスを登録およびアクティブ化します。
  3. MonitorTools.SNMPクラスのメソッドを使用してカスタムMIBを作成します まず、架空のPEN(プライベートエンタープライズ番号)99990を取得します。その後、IANAに登録する必要があります。 この手順は無料で、1〜2週間かかり、「PENが必要な理由」などの簡単な連絡が伴います。
  4. 接続されたサブエージェントCachéで監視サービスを開始します。
  5. snmpwalkで、新しく作成したカスタムOIDが利用可能であることを確認します。
  6. OIDをサードパーティの監視システムに追加します。 たとえば、 Zabbixを使用します。 Zabbixのドキュメントはこちらにあります 。 特にCentOSでのZabbixのインストールと設定については、 こちらをご覧ください 。 監視が機能することを確認します。
  7. システム起動時にTESTエリアにシステムモニターの起動を追加します。

そして今、ポイントの計画を実行します。
1.メトリックを収集するためのクラスを作成します
メトリックコレクションクラスは、 %Monitor.Adaptorを継承します。 スタジオで、%SYSエリアに移動します。 モニターパッケージのエクスポート。 パッケージには、Studioからは見えないプライベートサンプルクラスが含まれていますが、xmlにエクスポートするときに使用できます。
ワークスペースがテスト領域であるとしましょう。 私たちはそれに通過します。 ここでMonitor.Sampleクラスをインポートします。 上記の「既にあるもの」のセクションで示した6つのメトリックの削除の実装を記述するクラスを作成します。
クラスmetrics.snmp.Metrics
クラスmetrics.snmp.Metrics Extends%Monitor.Adaptor
{
///アプリケーションに名前を付けます。 これにより、異なるグループを作成できます
/// SNMP MIBの同じアプリケーションレベルで一緒にクラス。
///デフォルトはパッケージ名と同じです。
パラメーター APPLICATION = "Monitoring" ;
/// CSPセッション数
プロパティ セッション As%Monitor.Integer ;
///ライセンスユーザーの制限
プロパティ KeyLicenseUnits As%Monitor.Integer ;
///ライセンスキーの有効期限
プロパティ KeyExpirationDate As%Monitor.String ;
///グローバル参照の速度
プロパティ GloRefSpeed As%Monitor.Integer ;
///実行されたコマンドの数
プロパティ ExecutedSpeed As%Monitor.Integer ;
///ルーチンのロード数/保存
プロパティ RoutineLoadSpeed As%Monitor.Integer ;
///メソッドは必須です。 アプリケーションモニターが
///データサンプルを収集するための呼び出し。
/// ^要求時のSNMPサーバープロセス。
メソッド GetSample() As%Status
{
set .. Sessions = .. getSessions ()
set .. KeyLicenseUnits = .. getKeyLicenseUnits ()
set .. KeyExpirationDate = .. getKeyExpirationDate ()

set perfList = .. getPerformance ()
set .. GloRefSpeed = $ listget perfList 、1)
set .. ExecutedSpeed = $ listget perfList 、2)
set .. RoutineLoadSpeed = $ listget perfList 、3)
$$$を終了OK
}
/// CSPセッション数を取得
メソッド getSessions() As%Integer
{
// q $ system.License.CSPUsers()//このメソッドは、WebAddonを使用しない場合にのみ機能します
//これは、WebAddonを使用しても機能します
csp = ""を 設定し ます
{
cn = $ NAMESPACEを 設定し ます
znspace "%SYS"
db = ##クラス SYS.Stats.Dashboard )を設定します。 サンプル ()
csp = dbを 設定し ます CSPSessions
znspace cn
} catch {
csp = "0"を 設定し ます
}
cspを 終了し ます
}
///ライセンスユーザーの権限を取得
メソッド getKeyLicenseUnits() As%Integer
{
$ system .Licenseを終了し ます。 KeyLicenseUnits ()
}
///ライセンスの有効期限を人間が読める形式で取得する
メソッド getKeyExpirationDate() As%String
{
quit $ zdate $ system .License。KeyExpirationDate ()、3)
}
///パフォーマンスメトリックを取得します(グローレフ、ルーチンなど)
メソッド getPerformance( param As%String As%Integer
{
cn = $ NAMESPACEを 設定し ます
znspace "%SYS"
set m = ## class SYS.Monitor.SystemSensors )。 %新規 ()
mを行い ます。 GetSensors ()
znspace cn
quit $ listbuild m。SensorReading "GlobalRefsPerMin" )、
m SensorReading "RoutineCommandsPerMin" )、
m SensorReading "RoutineLoadsPerMin" ))
}
}


必要なデータがアンロードされたGetSample()メソッドによって呼び出されることを確認します。
GetSample()の確認
TEST> sx = ## class(metrics.snmp.Metrics)。%New()

TEST> d x.GetSample()

テスト> zw x
x = <オブジェクト参照> [2@metrics.snmp.Metrics]
+ -----------------一般情報-| oref値:2
| クラス名:metrics.snmp.Metrics
| 参照カウント:2
+ -----------------属性値-| 実行速度= 1155679
| GloRefSpeed = 171316
| KeyExpirationDate = "2014-10-11"
| KeyLicenseUnits = 100
| RoutineLoadSpeed = 186
| セッション= 1

2. ^%SYSMONMGRを使用して、Cachéで新しいクラスを登録およびアクティブ化します
ターミナルを開き、テスト領域に移動します。
システムモニターを接続します
[root @ server〜]#csession test -U test
ノード:サーバー、インスタンス:TEST

テスト> d ^%SYSMONMGR
1. 項目5、[アプリケーションモニターの管理]を選択します。
2. アイテム2、モニタークラスの管理を選択します。
3. 項目3、モニターシステムクラスの登録を選択します。 コンパイルを確認します。

XMLへのエクスポートは2014年8月18日16:00:51に開始されました
エクスポートされたクラス:Monitor.Sample
エクスポートが正常に完了しました。

ダウンロードは2014年8月18日16:00:51に開始しました
ファイル/opt/intersystems/ensemble/mgr/Temp/45DDB3FppRHCuw.streamをxmlとしてダウンロードします
クラスのインポート:Monitor.Sample
クラスのコンパイル:Monitor.Sample
プログラムのコンパイル:: Monitor.Sample.G1.MAC
テーブルのコンパイル:Monitor.Sample
プログラムのコンパイル:Monitor.Sample.1
ダウンロードが正常に完了しました。

4. 項目1を選択し、モニタークラスをアクティブ化/非アクティブ化します
クラス??
Num MetricsClassNameがアクティブ化されました
1)%Monitor.System.AuditCount N
...
15)metrics.snmp.Metrics N

クラス? 15 metrics.snmp.Metrics
クラスをアクティブにしますか? はい=>はい

5. アイテム6、終了を選択します
6.もう一度、 アイテム6、終了を選択します
7. アイテム1、システムモニターの開始/停止を選択します
8. アイテム2、システムモニターの停止を選択します
システムモニターを停止しています...システムモニターが実行されていません!

9. アイテム1、システムモニターの起動を選択します
システムモニターを起動しています...システムモニターが起動しました
10. アイテム3、終了を選択します
11. アイテム4、システムモニター状態の表示を選択します
コンポーネントの状態
システムモニターOK
%SYS.Monitor.AppMonSensor

3. カスタムMIBを作成します
MonitorTools.SNMPクラスのメソッドを使用して、カスタムMIBが作成されます。 たとえば、PEN(企業番号)を取り、架空の99990を取り、次にPENをIANAに登録する必要があります。 すでに登録されている番号はこちらでご覧ください 。 たとえば、PEN InterSystemsの番号は16563です。
16563
システム間
ロバート・デイビス
rdavis&intersystems.com
MIBファイルを作成するには、 MonitorTools.SNMPクラス、特にCreateMIB()メソッドを使用します。 このメソッドは、入力として10個の引数を取ります。
引数の名前とタイプ説明私たちは何を代用しますか
AppName As Stringアプリケーション名metrics.snmp.MetricsクラスのAPPLICATIONパラメーター値-モニター
%Stringとしての名前空間私たちの地域テスト
EntID As %Integerペン会社99990(フィクション)
IDとしてのAppID社内のOIDアプリケーション42
As String会社名(首都)小説
%文字列としてのプレフィックス作成するすべてのSNMPオブジェクトのプレフィックス小説
CompanyShort As %String会社の短いプレフィックス(大文字)フィクト
MIB名としての%文字列MIBファイル名ISC-TEST
%文字列として連絡連絡先情報(特に住所)デフォルト値のままにします:Earth、Russia、Somewhere in the forest、Subject:ISC-TEST.mib
%ブール値としてリストアナログ冗長。 MIBファイルを作成するタスクの進行状況を表示します1

実際には、MIBファイルを作成します。
CreateMIB()
%SYS> d ##クラス(MonitorTools.SNMP).CreateMIB( "Monitoring"、 "TEST"、99990.42、 "fiction"、 "fict"、 "fiction"、 "ISC-TEST" ,, 1)
アプリケーション用のSNMP構造の作成-監視
グループ-指標
ExecutedSpeed =整数
GloRefSpeed =整数
KeyExpirationDate = String
KeyLicenseUnits =整数
RoutineLoadSpeed =整数
セッション=整数

監視用のMIBファイルを作成する
テーブルメトリックを生成する
オブジェクトExecutedSpeedを追加、タイプ=整数
オブジェクトGloRefSpeedを追加、タイプ=整数
オブジェクトKeyExpirationDateを追加、タイプ=文字列
オブジェクトKeyLicenseUnitsを追加、タイプ=整数
オブジェクトRoutineLoadSpeedを追加、タイプ=整数
オブジェクトセッションの追加、タイプ=整数
MIBが完了しました。

新しいMIB ISC-TEST.mibが<Install_dir> / mgr / TESTディレクトリに現れました。

4. 接続されたサブエージェントCachéで監視サービスを開始します
コントロールパネルの[ システム管理]-> [セキュリティ]-> [サービス]->%Service_Monitor(クリック)-> [サービス有効](チェック)を開きます


また、Cachéの起動時にSNMPサブエージェントを起動することを示します([監視設定の構成]をクリック)。

Linux CentOSでは、SNMP監視にnet-snmpパッケージを使用します。 サブエージェントを使用するように設定し、マスターエージェントとサブエージェントの通信がこのために標準ポート705を介するようにします。

[root @ server〜]#grep -i agentx / etc / services
agentx 705 / tcp#AgentX
agentx 705 / udp#AgentX

snmpd.conf構成ファイルに関する小さな記事は、 マナに加えて cybercitiで見ることができます。 最終的なセットアップは次のとおりです。
snmpd.conf
[root @ server〜]#yum install net-snmp
[root @ server〜]#grep '^ [^#]' /etc/snmp/snmpd.conf
マスターagentx
agentXSocket TCP:localhost:705
com2sec local localhost public
グループMyRWGroup v1ローカル
グループMyRWGroup v2cローカル
グループMyRWGroup usm local
含まれているすべてを表示.1 80
含まれるビューシステム.iso.org.dod
MyROGroup ""にアクセスするnoauth exact all none none
MyRWGroup ""にアクセスします。
syslocationサーバー(/etc/snmp/snmpd.confを編集)
syscontact Root <root @ localhost>(/etc/snmp/snmp.local.confを設定)
dontLogTCPWrappersConnectsはい

Linuxでsnmpdおよびsnmptrapdデーモンを再起動します。 ^ SNMPサービスを開始して、CachéSNMPサブエージェントとの連携を開始します。
%SYS> d start ^ SNMP

5. 新しく作成されたカスタムOIDが使用可能であることを確認します
これはsnmpwalkを使用して行うことができます-CSPセッションの数を表示するOIDを表示しましょう:

[root @ server mgr]#snmpwalk -On -v 2c -c public localhost 1.3.6.1.4.1.99990
.1.3.6.1.4.1.99990.42.1.1.1.1.4.84.69.83.84 = INTEGER:448035
.1.3.6.1.4.1.99990.42.1.1.1.2.4.84.69.83.84 =整数:64190
.1.3.6.1.4.1.99990.42.1.1.1.3.4.84.69.83.84 = STRING: "2014-10-11"
.1.3.6.1.4.1.99990.42.1.1.1.4.4.84.69.83.84 = INTEGER:200
.1.3.6.1.4.1.99990.42.1.1.1.5.4.84.69.83.84 = INTEGER:93
.1.3.6.1.4.1.99990.42.1.1.1.6.4.84.69.83.84 = INTEGER:1

OIDのシーケンスは、ISC-TEST.mibファイルに示されています。

FictMetricsR :: =
シーケンス{
fictExecutedSpeed Integer32、
fictGloRefSpeed Integer32、
fictKeyExpirationDate DisplayString、
fictKeyLicenseUnits Integer32、
fictRoutineLoadSpeed Integer32、
fictSessions Integer32
}

したがって、たとえば、セッション数は最後のOID 1.3.6.1.4.1.99990.42.1.1.1.6です。 SMPダッシュボードに表示されるセッションの数と比較できます。


6. OIDをサードパーティの監視システムに追加します。
たとえば、 Zabbixを使用します。 Zabbixのドキュメントはこちらにあります 。 特にCentOSでのZabbixのインストールと設定については、 こちらをご覧ください 。 Zabbixは、グラフの描画だけでなく、プレーンテキストの監視も可能にするシステムとして選択されました(この場合、これはライセンス有効期間とユーザーライセンス容量です)。 6つのメトリックをローカルホストのアイテムに追加し、4つのグラフと2つのPlainTextパラメーターを( 画面要素として)作成すると、次の図が表示されます(小さな「ライブ」システムの例が示されています)。

上記は、ライセンスの有効期限とライセンススロットの数に関する情報です。 グラフはそれ自体を物語っています。

7. システムの起動時にテスト領域にシステムモニターの開始を追加します
Cachéの起動と停止で機能するカスタムルーチンの使用に関する優れたドキュメントがあります。 それぞれ、%ZSTARTおよび%ZSTOPと呼ばれます。
これらすべてに関心があるのは、起動時にTESTのユーザー領域でシステムモニター(^%SYSMONMGR)を上げることです。 デフォルトでは、このモニターは%SYS領域でのみ開始されます。 したがって、^%ZSTARTプログラムのみを考慮します。 Source%ZSTART.mac(%SYS領域に作成して保存します)。
自動スタート
%ZSTART ユーザー起動ルーチン。
システム
; キャッシュ開始
do $ zu (9、 "" "^%ZSTART ... BeginによるTEST名前空間でのシステムモニターの開始"
znspace "TEST"
sc = ##クラス %SYS.Monitor )を設定します。 開始 ()
$ system .OBJを実行し ます。 DisplayError sc
if sc = 1) {
do $ zutil (9、 "" "^%ZSTART ... OKによるTEST名前空間でのシステムモニターの開始"
} else {
do $ zutil (9、 "" "^%ZSTART ... ERRORによるTEST名前空間でのシステムモニターの開始"
}
; SNMPの開始
znspace "%SYS"
開始 ^ SNMP
やめる
ログイン
; ユーザーがキャッシュにログインする(ユーザーアカウントまたはtelnet)
やめる
JOB ;
; Job'dプロセスが始まります
やめる
CALLIN ;
; CALLINインターフェイスを介してプロセスに入ります
やめる


(可能であれば)Cachéを再起動して、Cachéの再起動後もSNMP統計の収集が継続されるようにします。
以上です。 監視パラメータまたはコードの選択について誰かがコメントするかもしれませんが、タスクは原則としてそのような監視の可能性を示すことであり、必要なパラメータをいつでも追加したり、将来コードをリファクタリングすることができます。
ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J241271/


All Articles