web-dev-qa-db-ja.com

'df'出力をフェッチするNetAppAPI

私は現在、ONTAPI(パフォーマンス統計監視のようなもの)を使用してプロジェクトをいじっています。

私がやりたいのは、「df」と「df-s」からの情報を再現することです。

APIの「volume-list-info」には必要な情報のほとんどが含まれているように見えるため、これまでのところ順調に進んでいます。足りないものが1つだけあります。それは、実際に使用している「スナップリザーブ」の量です。

それも「スナップショット」カウンターでも見つからないようです。ボリュームごとの計算を行わなくても、理想的にはこれを実行できます。これは、サーバーで処理するためにソースXMLを「ただ」フェッチする軽量プロキシクライアントをサポートすることを望んでいるためです。

または、volume-list-infoのサイズ/使用済み/利用可能からこれを計算する方法はありますか?

2
Sobrique

この問題を解決し、 優れた「トースター」メーリングリストアーカイブ )のおかげで-私の最終的な解決策は、system-cliAPI呼び出しを利用することでした。

#!/usr/bin/env Perl
use strict;
use warnings;

use XML::Twig;
use LWP;

my $twig = XML::Twig->new( 'pretty_print' => 'indented' );
$twig->set_root(
    XML::Twig::Elt->new(
        'netapp',
        {   version => 1.7,
            vfiler  => "somevfiler",
            xmlns   => "http://www.netapp.com/filer/admin",
        },
    )
);
my $api_req = $twig->root->insert_new_elt('system-cli');
my $args    = $api_req->insert_new_elt('args');
$args->insert_new_elt( 'last_child', 'arg', 'df' );
$args->insert_new_elt( 'last_child', 'arg', '-k' );

$twig->set_doctype('netapp SYSTEM "file:/etc/netapp_filer.dtd"');
$twig->set_xml_version("1.0");
$twig->set_encoding('utf-8');

$twig->print;

exit;

my $user_agent = LWP::UserAgent->new(
    'ssl_opts' => {
        'verify_hostname' => 0,
        'SSL_version'     => 'SSLv3',
    }
);

my $request =
    HTTP::Request->new( 'POST' =>
        'https://myfilername/servlets/netapp.servlets.admin.XMLrequest_filer'
    );
$request->authorization_basic( 'username_here', 'password_here' );
$request->content( $twig->sprint );

my $results = $user_agent->request($request);
if ( not $results->is_success ) {
    print "Error: ", $results->status_line;
    exit;
}

my $results_xml = XML::Twig->new( 'pretty_print' => 'indented_a' );
$results_xml->parse( $results->content );
$results_xml->print;

これは、API呼び出しを介してdf -kの結果をキャプチャするために機能します。ただし、欠点が1つだけあります。プレーンテキストの「コマンド出力」blobしか取得できず、それをとにかく解析する必要があるため、ssh hostname df -kをあまり活用できません。認証とフェッチの方法が異なるだけですが、実際にはそれが問題です。私は後だった。

また、これはNetApp SDKを使用しません。あなたはそれが利点かどうかを考えるかもしれません。個人的には、XML::TwigLWPが非常に適していると思います--YMMV。

とにかく-他の提案は次のとおりです。

  • ssh hostname df -k
  • sNMPを使用してクエリを実行します
  • 2パスAPI呼び出しに、最初に列挙し、次にクエリします。
2
Sobrique

ご存知のように、system-cliが「df」出力を取得する唯一の方法である可能性があります。

「スナップショットに使用されるスペース」はスナップ予約を超える可能性があるため、別の方法を選択します。 snapshot-volume-info APIは、使用可能なサイズを返します(スナップショットを作成する機能が失われる前に、ボリュームで使用できるスペースの量)。

flexvolの他のスペース統計を収集するには、volume-space-get-iter(7mのvolume-space-list-info-iter)またはvolume-footprint-get-iter(7mのvol-footprint-info)APIを使用します。

netApp Manageability SDKのダウンロードには、ドキュメントが含まれています。私が言及した呼び出しは、例えば:の下にあります。

doc/ontapi/ontapi_1.20/Vserver/snapshot/index.html#snapshot-volume-info doc/ontapi/ontapi_1.20/Vserver/volume/index.html#volume-space-get-iter doc/ontapi/ontapi_1。 20/Vserver/volume/index.html#volume-footprint-get-iter

(古いドキュメントのダウンロードは http://community.netapp.com/t5/Software-Development-Kit-SDK-and-API-Discussions/Broken-link-for-SDK-API-Doc/ mp/97275

1
solvaholic