我目前正在摆弄一个使用 ONTAPI(性能统计监控之类的东西)的项目。
我想要做的是重现来自“df”和“df -s”的信息。
到目前为止一切顺利,因为 api“volume-list-info”似乎包含了我想要的大部分信息。只缺少一件事 - 我实际使用了多少“快照保留”。
我似乎无法在那个或“快照”计数器中找到它。理想情况下,我能够在不进行每个卷计算的情况下做到这一点,因为我希望做的事情之一是支持轻量级代理客户端,该客户端“仅”获取源 XML 以在服务器上进行处理。
或者有没有办法我可以根据卷列表信息中的大小/已使用/可用来计算这个?
答案1
我一直在努力解决这个问题,感谢优秀的“烤面包机”邮件列表(档案) - 我最终的解决方案是利用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;
这可以捕获通过 API 调用的结果df -k
。但只有一个缺点 - 您只能获得纯文本“命令输出” blob,然后您必须自己解析它,因此您实际上并没有获得太多好处ssh hostname df -k
- 只是一种不同的身份验证和获取方法,但这确实是我所追求的。
还值得注意的是 -没有使用 NetApp SDK。您可能会认为这是一个优势,也可能不认为。我个人觉得它XML::Twig
非常LWP
好用 - YMMV。
无论如何-其他建议包括:
ssh hostname df -k
- 使用 SNMP 查询
- 进行两次 API 调用,第一次枚举,第二次查询。
答案2
正如您所发现的,system-cli 可能是获取“df”输出的唯一方法。
因为“用于快照的空间”可能超过快照保留空间,所以我更喜欢采用不同的衡量标准。快照卷信息 API 返回可用大小(在失去制作更多快照的能力之前,您可以在卷中使用多少空间)。
要收集 flexvol 的其他空间统计信息,我会使用 volume-space-get-iter(7m 内的 volume-space-list-info-iter)或 volume-footprint-get-iter(7m 内的 vol-footprint-info)API。
NetApp 可管理性 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)