使用Windows Azure Storage Analytics新特性

昨天其发布以来,我就开始使用这个新特性,用Windows Azure存储日志分析数据。简而言之,这个分析让你记录有关存储账户(blob、表和队列)调用的细节(或多或少满足你的需要),包括详细的日志(API调用时)和总体指标(例如消耗多少存储空间以及在过去一小时内完成的请求数量)。

由于我正在学习这些新功能,我将我的实验结果放在网上,网址是https://storageanalytics.cloudapp.net 。这个程序可以让你修改分析设置(因此你需要使用一个真正的存储账户和密钥来登录)并且你还能够绘制“Get
Blob”图表。

使用这个程序需要注意几点:

  1. 当打开各种登录和分析功能时,你必须确保你的XML符合文档。这意味着,例如当你启用指标时,你还会添加<IncludeAPIs />标签,并且当你启用保持策略,你必须添加<Days/>标签。
  2. 图形页面需要浏览器支持<canvas>标签。(IE9将会支持,最近火狐浏览器、谷歌浏览器甚至苹果浏览器也将支持这个标签。)即使是在现代浏览器,我们已经得到了一些关于图表没有显示和其它问题bug报告。如果你遇到问题请在Twitter (我是@smarx) 让我知道,这样我就能探索这个问题。如果你将通过IE的F12(谷歌浏览器是Ctrl+Shift+I ,Firebug或类似浏览器)捕获的脚本错误提示发给我,你将有额外的加分。
  3. 该网站使用HTTPS来更好地保护您的用户名和密码,我已经使用了一个自签名的证书,所以当你浏览带有未经核实证书的网站,你需要在浏览器上选择OK选项。

接下来,我将与大家分享我目前所做的一些细节和代码。

打开Analytics

有一种用来打开和关闭analytics的新方法,它叫做“Set Storage Service Properties”。因为这是一个全新的方法,所以在.NET storage client库(Microsoft.WindowsAzure.StorageClient命名空间)里没有相关支持。为方便起见,我把关于这个的一些web UI和相应的“Get Storage Service Properties”方法贴出来了,你在https://storageanalytics.cloudapp.net的主页上就能看到。

如果你想自己写代码来改变这些设置,调用方法其实很简单。这只是将HTTP GET 或 PUT 到正确的URL的问题。有效负荷是一个简单的XML模式,打开和关闭各种功能。这里是https://storageanalytics.cloudapp.net 上贴出的相关源代码:

 [HttpPost]
[ValidateInput(false)]
public ActionResult Save(string service)
{
    var creds = new StorageCredentialsAccountAndKey(Request.Cookies["AccountName"].Value,
        Request.Cookies["AccountKey"].Value);
    var req = (HttpWebRequest)WebRequest.Create(string.Format(
        "https://{0}.{1}.core.windows.net/?restype=service&comp=properties",
        creds.AccountName, service));
    req.Method = "PUT";
    req.Headers["x-ms-version"] = "2009-09-19";
    req.ContentLength = Request.InputStream.Length;
    if (service == "table")
    {
        creds.SignRequestLite(req);
    }
    else
    {
        creds.SignRequest(req);
    }
 
    using (var stream = req.GetRequestStream())
    {
        Request.InputStream.CopyTo(stream);
        stream.Close();
    }
 
    try
    {
        req.GetResponse();
        return new EmptyResult();
    }
    catch (WebException e)
    {
        Response.StatusCode = 500;
        Response.TrySkipIisCustomErrors = true;
        return Content(new StreamReader(e.Response.GetResponseStream()).ReadToEnd());
    }
}

你可以在storage 团队的关于loggingmetrics的帖子里找到关于启用和禁用各种分析选项的更加完整的代码,这里我只是想证明该调用方法可以是很直接的。

阅读指标

新的分析功能实际上包括两个方面:logging和metrics。logging是记录存储的每次调用。metrics是有关数据和总量。分析文档 以及storage团队的关于loggingmetrics的博客文章对记录什么样的数据和如何使用这些数据做出了更多细节描述。如果你想得到那些细节,请阅读它们。

https://storageanalytics.cloudapp.net里,我只举出了一个关于如何使用指标的例子。我画了一个随着时间的推移“Get Blob”使用情况的图表。以下图表显示了在过去的24小时之内通过https://netflixpivot.cloudapp.net 所做的“Get Blob”调用的次数。(注意https://netflixpivot.cloudapp.net 是一个奇怪的例子,因为大多数访问是通过CDN的。我想下面的一大部分请求是由后端产生的,它正在进行图像处理来构建深缩放图像,包括大量不通过CDN的直接调用存储。这说明了图表的spikiness,因为大约每小时重建一次图像。)

通过点击 https://storageanalytics.cloudapp.net 左边的图表链接,你可以看到你的blob存储账户的类似于图表的一个东西。这个图表是由出色的jqPlot 库画出来的,而且数据是从$MetricsTransactionsBlob表中调出来的。

注意按名指定的$logs容器和$Metrics*系列的表仅仅是存储账户内部有规律的容器和表。(例如,将有一个关于它们使用情况的列表。)然而,当你执行一个List容器或ListTables操作时这些容器和表不显示。这意味着没有任何现有的存储工具将告诉你这些日志和指标。这让我有点措手不及,起初我还想是不是我没有正确的启用分析,因为分析似乎没有在我选择的存储资源管理器里出现(ClumsyLeaf 工具)。

下面是https://storageanalytics.cloudapp.net 上我用来查询存储指标的代码,尤其是获得在过去的24小时之内“Get Blob”的使用情况:

 public class Metrics : TableServiceEntity
{
    public string TotalRequests { get; set; }
    public Metrics() { }
}
...
IEnumerable<Metrics> metrics = null;
try
{
    var ctx = new CloudStorageAccount(new StorageCredentialsAccountAndKey(
        Request.Cookies["AccountName"].Value,
        Request.Cookies["AccountKey"].Value), false).CreateCloudTableClient().GetDataServiceContext();
    metrics = ctx.CreateQuery<Metrics>("$MetricsTransactionsBlob").Where(m =>
        string.Compare(m.PartitionKey,
            (DateTime.UtcNow - TimeSpan.FromDays(1)).ToString("yyyyMMddTHH00")) > 0
        && m.RowKey == "user;GetBlob").ToList();
}
catch { } // just pass a null to the view in case of errors... the view will display a generic error message
return View(metrics);

我创建了一个简单模型(仅仅包含我要查询的 TotalRequests 属性),重复一遍, storage团队关于metrics的博客文章里有更完整的源代码(包括读取这个表的实体及其所有可能属性的完全类)。

下载源代码

你可以在这里下载到关于https://storageanalytics.cloudapp.net的整个源代码: https://cdn.blog.smarx.com/files/StorageAnalytics_source.zip

更多信息

若要了解更多,请查询MSDN 文档和storage团队关于loggingmetrics的博客文章。

本文翻译自:https://blog.smarx.com/posts/playing-with-the-new-windows-azure-storage-analytics-features