注:翻译的不完整,主要是有些地方翻译后反而妨碍理解,有些不知道怎么翻,anyway,需要时拿来用用也是可行的,顺便共享啦。欢迎提意见。

  一个OpenStack Object Storage(OSOS)集群是一个复杂的野兽-大量的后台进程遍布各个节点,共同工作。因为有如此多的“moving parts“,了解集群内部每时每刻究竟在做些什么就显得相当重要。服务器层级的测量包括CPU利用率,负载,内存消耗,磁盘的用法及利用率等等,这些是必须的,但是还不够。我们需要知道每个服务器中不同的进程都在做什么。比如:node8中的备份对象有多少?备份要花多长时间?如果备份出错会怎么办?
在这个复杂的生态系统里,毫不惊讶,面对这些问题,有很多种方法或以获知答案。下面让我们来了解一下OSOS现有的监控方法。

Swift Recon
  Swift Recon中间件可以提供通用的机器状态(负载均值,socket状态,/proc/meminfo等),同时还有以下swift特有的metrics:

  • 每个ring文件的MD5和
  • 最近的对象备份时间
  • 每种隔离文件的个数
  • 磁盘上“async_pending“(deferred container updates)的个数

  Swift Recon是一个安装在对象服务器的pipeline上的中间件,它有一个必填选项:一个本地缓存目录。async_pendings要求每个对象服务器上有一个对应的cron job。可以通过发送HTTP请求到对象服务器去访问数据,或者使用swift-recon命令行工具。
OSOS集群里已经有不错的状态工具,但是通用的服务器测评同已有的服务器监控系统有交叉,要把swift专用测评放到监控系统里的话,数据需要被修整。Swift Recon本质上是一个中间测量收集器。常用的测量工具如collectd,gmond等很可能已经在存储节点运行,它们的数据会加入到状态系统里。因此,它们可以直接同Swift Recon交互。
  Swift Recon的下一步计划是拓展支持到account和container服务器上。The auditors, replicators, and updaters也可以报告统计数据,但是仅限最近一次的运行情况。

Swift-Informant
Florian Hines开发的Swift-Informant中间件可以获得OS客户请求的实时visibility。它位于proxy server的pipeline,在每一个请求到达Proxy server之后,它发送3类统计数据到StatsD server.

  • 一个类似obj.GET.200 or cont.PUT.404的增量计数器。
  • Timing data for a metric like acct.GET.200 or obj.GET.200. [The README says the metrics will look like duration.acct.GET.200, but I don’t see the “duration” in the code. I’m not sure what Etsy’s server does, but our StatsD server turns timing metrics into 5 derivative metrics with new segments appended, so it probably works as coded. The first metric above would turn into acct.GET.200.lower, acct.GET.200.upper, acct.GET.200.mean, acct.GET.200.upper_90, and acct.GET.200.count]
  • A counter increase by the bytes transferred for a metric like tfer.obj.PUT.201.

  timing metrics有利于了解客户正体验的服务品质,也可以了解各种服务类型,命令以及响应码的不同排列的数量。Swift-Informant也要求no change to core Swift code因为它是用中间件实现的。然而,也因为如此,它不能让人看到代理服务器后面的工作情景。如果一个存储节点的响应降低,你也可能看到你的请求变差-要么是高延迟,要么返回错误状态码。你不会知道具体是为什么,或者请求是要去哪里。或许你所考虚的container服务器是在一个好的节点的,而对象服务器是在另一个性能差的节点。
因此我们需要深入视觉到proxy server的后面,集群的操作里去。

Statsdlog
  Florian的statsdlog工程增加了StatsD基于日志事件的计数器。正如Swift-Informant,它也是非侵入式的。但是statsdlog可以从Swift后台进程中追踪事件,而不仅仅是代理服务器。后台进程监听syslog信息的UDP流,当一条日志匹配于一个正则表达式时,StatsD计数器递增。Metric名字映射到JSON文件中的正则pattern。JSON文件允许灵活配置以能从日志流中抽取出想要的metrics。
通常,only the first matching regex triggers a StatsD counter increment, and the counter is always incremented by 1. There’s no way to increment a counter by more than one or send timing data to StatsD based on the log line content. 这个工具可以被扩展去为每一行数据处理多个metrics,包括timing数据。但是即便如此,在日志文本格式和日志分析正则式之间仍然有耦合,这样,为了支持单行多匹配与数据析取,事情变得更复杂。同时,日志处理也在触发事件与发送数据到StatsD之间引入一个延迟。我们当然更希望出错时有错误计数器,一有timing数据就马上发送,避免日志文本与解析正则式之间的耦合,事件与发送数据到StatsD之间没有时间延误。这带出了下一种收集Swift操作metrics的方法。

Swift StatsD Logging
  StatsD使用程序代码来作深入分析。Metrics被有针对性的代码实时发送。发送一个metric的开销相当低:一个sendto UDP包。如果你认为这样的开销还算高的话,StatsD client library可以只发送样本的随机比率部分,flushing metrics upstream时StatsD将估算实际数据。
要避免基于中间件的监控与事后日志处理所带来的弊端,我们把StatsD metrics发送过种整合到Swift本身。我们当前所提交的更改报告了遍布15个swift后台进程的124个metrics以及tempauth中间件。metrics细节可参考https://review.openstack.org/#patch,sidebyside,6058,2,doc/source/admin_guide.rst 。
metrics的发送被整合到日志框架中。要使能的话,在相关的配置文件中配置log_statsd_host信息。同时可以配置port与采样比率。log_statsd_port,log_statsd_default_sample_rate 。...

Then the LogAdapter object returned by get_logger(), usually stored in self.logger, has the following new methods:

set_statsd_prefix(self, prefix) Sets the client library’s stat prefix value which gets prepended to every metric. The default prefix is the “name” of the logger (eg. “object-server”, “container-auditor”, etc.). This is currently used to turn “proxy-server” into one of “proxy-server.Account”, “proxy-server.Container”, or “proxy-server.Object” as soon as the Controller object is determined and instantiated for the request.
update_stats(self, metric, amount, sample_rate=1) Increments the supplied metric by the given amount. This is used when you need to add or subtract more that one from a counter, like incrementing “suffix.hashes” by the number of computed hashes in the object replicator.
increment(self, metric, sample_rate=1) Increments the given counter metric by one.
decrement(self, metric, sample_rate=1) Lowers the given counter metric by one.
timing(self, metric, timing_ms, sample_rate=1) Record that the given metric took the supplied number of milliseconds.
timing_since(self, metric, orig_time, sample_rate=1) Convenience method to record a timing metric whose value is “now” minus an existing timestamp.

注意这些日志函数可以在任何你拥有logger对象的地方调用。如果StatsD日志没有配置,这些方法为空。这样可避免大量的逻辑判断。下面是两个例子。
...

Final Thoughts
...
  我们认为Swift集群动作最好的监控方法是综合了一个通用服务器监控系统,一个Swift特定统计指标收集(polling Swift-specific gauge metrics)机制,一个Swift内部counter与timing metrics深度StatsD日志手段的结合体。对于polling Swift-specific gauge metrics,最好使用一个通用的收集插件。这个插件即可以从swift-recon读数据,也可以自己直接收集信息。
在SwiftStack,我们使用collectd加上一些服务器监控用python插件代码。我们也在collectd中嵌入StatsD服务器,这样每个节点都有一个进程将stats数据“倒”给Graphite"(http://graphite.wikidot.com/)集群。有了这个装置,我们拥有前述所有问题的全覆盖解决方案:general purpose monitoring, Swift-specific gauge monitoring, and real-time counter and timing data directly from Swift.

...除了图形化,你也可以实现异常检测,触发警告,维护一个实时的实体健康状态视图,避免各种突发问题。

[译]OpenStack Object Storage Monitoring的更多相关文章

  1. OpenStack Object Storage(Swift)概述

    概述 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性. Swift并不是文件系统或者实时 ...

  2. 【译】Object Storage on CRAQ 上篇

    摘要 大型存储系统通常会在许多可能出故障的组件上进行数据复制和数据分区,从而保证可靠性和可扩展性.但是许多商业部署系统为了实现更高的可用性和吞吐量,牺牲了强一致性,特别是那些实时交互系统. 本论文介绍 ...

  3. [译] OpenStack Ocata 版本中的 53 个新功能盘点

    原文链接:https://www.mirantis.com/blog/53-new-things-to-look-for-in-openstack-ocata/ 原文作者:Nick Chase, Ra ...

  4. swift(Object Storage对象存储服务)(单节点)

    # 在部署对象存储服务(swift)之前,你的环境必须包含身份验证服务(keystone); # keystone需要MySQL数据库,Rabbitmq服务,Memcached服务; # 内存:4G ...

  5. openStack 对象存储object storage swift

  6. Openstack object list 一次最多有一万个 object

    When you request a list of containers or objects, Object Storage returns a maximum of 10,000 names f ...

  7. centos6.4 ceph安装部署之ceph object storage

    preface: ceph-deploy does not provide a rapid installation for Ceph Object Storage install Configura ...

  8. [转]Build An Image Manager With NativeScript, Node.js, And The Minio Object Storage Cloud

    本文转自:https://www.thepolyglotdeveloper.com/2017/04/build-image-manager-nativescript-node-js-minio-obj ...

  9. 对象存储服务(Object Storage Service,简称 OSS)

    阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.它具有与平台无关的RESTful API接口,能够提供99.99 ...

随机推荐

  1. table.appand(行数据) datagrid分页

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. docker与虚拟机性能比较

    http://blog.csdn.net/cbl709/article/details/43955687www.chenbiaolong.com 概要 Docker是近年来新兴的虚拟化工具,它可以和虚 ...

  3. java阻塞队列

    对消息的处理有些麻烦,要保证各种确认.为了确保消息的100%发送成功,笔者在之前的基础上做了一些改进.其中要用到多线程,用于重复发送信息. 所以查了很多关于线程安全的东西,也看到了阻塞队列,发现这个模 ...

  4. 将HTML5封装成android应用APK文件的几种方法(转)

    作为下一代的网页语言,HTML5拥有很多让人期待已久的新特性.HTML5的优势之一在于能够实现跨平台游戏编码移植,现在已经有很多公司在移动 设备上使用HTML5技术.随着HTML5跨平台支持的不断增强 ...

  5. jQuery eislideshow 图片轮播

    在线实例 基础演示 自动播放 使用方法 <div id="ei-slider" class="ei-slider"> <ul class=&q ...

  6. Displaying SharePoint Lists or Libraries in other sites 显示其他站点的List

    Child objects within SharePoint, like a list in a Site, share an inherent connection with that Paren ...

  7. This task is currently locked by a running workflow and cannot be edited

    转自:http://geek.hubkey.com/2007/09/locked-workflow.html 转自:http://blogs.code-counsel.net/Wouter/Lists ...

  8. 创建第一个Android 5.0应用程序

    1.新建一个Andriod项目,并配置相关参数 2.接着下一步 3.接着下一步,配置相关参数 4.完成后出现下面界面 5.运行此项目 6.你可以在菜单中看到刚才新建的Helloworld app图标

  9. C语言动态存储分配

    动态存储分配 C语言支持动态存储分配,即在程序执行期间分配内存单元的能力,利用动态存储分配,可以根据需要设计扩大(或缩小)的数据结构,虽然可以适用于所有类型的数据,但是动态存储分配更常用于字符串.数组 ...

  10. 【读书笔记】iOS-GCD-系统提供的dispatch方法

    系统提供的dispatch方法如下: //系统提供的dispatch方法 //后台执行: dispatch_async(dispatch_get_global_queue(0, 0), ^{ // s ...