Назад | Перейти на главную страницу

NetApp API для получения вывода 'df'

В настоящее время я возился с проектом с использованием ONTAPI (что-то вроде мониторинга статистики производительности).

Я хочу воспроизвести информацию из 'df' и 'df -s'.

Пока все идет хорошо, потому что api 'volume-list-info', похоже, содержит большую часть нужной мне информации. Не хватает только одного - сколько из «резерва моментальных снимков» я на самом деле использую.

Я не могу найти его ни в том, ни в счетчиках «снимков». В идеале я мог бы сделать это, не выполняя вычислений по объему, потому что одна из вещей, на которые я надеюсь, - это поддержка легкого прокси-клиента, который «просто» извлекает исходный XML для обработки на сервере.

Или есть способ рассчитать это по размеру / использованному / доступному в информации о том-списке?

Решив эту проблему, и благодаря отличный список рассылки "тостеров" (Архив) - мое возможное решение состояло в том, чтобы использовать system-cli Вызов API.

#!/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;

Это работает, чтобы зафиксировать результаты df -k через вызов API. Но есть только один недостаток - вы получаете только простой текстовый blob-объект вывода команды, который вам все равно придется разбирать самостоятельно, так что вы действительно не получите многого. ssh hostname df -k - просто другой метод аутентификации и выборки, но это действительно то, что мне нужно.

Также следует отметить - это не используйте NetApp SDK. Вы можете считать это преимуществом или нет. Лично я нахожу XML::Twig и LWP неплохо работать - YMMV.

В любом случае - другие предложения включают:

  • ssh hostname df -k
  • используйте SNMP для запроса
  • к двухпроходному вызову API, сначала для перечисления, а затем для запроса.

как вы обнаружили, system-cli может быть единственным способом получить вывод df.

поскольку «пространство, используемое для снимков», может превышать резерв снимков, я предпочитаю другую меру. API snapshot-volume-info возвращает доступный размер (сколько еще места вы можете использовать в томе, прежде чем вы потеряете возможность делать больше снимков).

чтобы собрать другую статистику пространства для flexvol, я бы использовал API-интерфейсы volume-space-get-iter (volume-space-list-info-iter в 7 м) или volume-footprint-get-iter (vol-footprint-info в 7 м) .

загрузка SDK 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/m-p/97275 )