Swift开启StatsD后出现上传数据出现返回503的Bug

转载请说明出处:http://blog.csdn.net/cywosp/article/details/40781569

swift在版本2.1.0之前如果各个服务的配置文件中打开以下配置后,且系统没有配置正确将会出现上传对象出错的情况

log_statsd_host = localhost

log_statsd_port = 8125

log_statsd_default_sample_rate = 1.0

log_statsd_sample_rate_factor = 1.0

log_statsd_metric_prefix =

具体错误log信息大概如下:

object-server ERROR __call__ error with PUT /sdc/2468/AUTH_8f9dbbadd64a43a0abb5e832c6ea766a/000008/013781 : #012Traceback (most recent call last):#012  File "/usr/lib/python2.6/site-packages/swift/obj/server.py", line 938, in __call__#012
   res = method(req)#012  File "/usr/lib/python2.6/site-packages/swift/common/utils.py", line 1558, in wrapped#012    return func(*a, **kw)#012  File "/usr/lib/python2.6/site-packages/swift/common/utils.py", line 520, in _timing_stats#012    resp = func(ctrl,
*args, **kwargs)#012  File "/usr/lib/python2.6/site-packages/swift/obj/server.py", line 712, in PUT#012    file.put(fd, metadata)#012  File "/usr/lib64/python2.6/contextlib.py", line 34, in __exit__#012    self.gen.throw(type, value, traceback)#012  File "/usr/lib/python2.6/site-packages/swift/obj/server.py",
line 286, in mkstemp#012    yield fd#012  File "/usr/lib/python2.6/site-packages/swift/obj/server.py", line 680, in PUT#012    ‘PUT.‘ + device + ‘.timing‘, elapsed_time, upload_size)#012  File "/usr/lib/python2.6/site-packages/swift/common/utils.py", line
654, in wrapped#012    return func(self.logger.statsd_client, *a, **kw)#012  File "/usr/lib/python2.6/site-packages/swift/common/utils.py", line 506, in transfer_rate#012    sample_rate)#012  File "/usr/lib/python2.6/site-packages/swift/common/utils.py", line
496, in timing#012    return self._send(metric, timing_ms, ‘ms‘, sample_rate)#012  File "/usr/lib/python2.6/site-packages/swift/common/utils.py", line 481, in _send#012    return sock.sendto(‘|‘.join(parts), self._target)#012  File "/usr/lib/python2.6/site-packages/eventlet/greenio.py",
line 371, in sendto#012    return self.fd.sendto(*args)#012error: [Errno 1] Operation not permitted (txn: tx8d76698250304466817aa99061637421)

根据log信息查到是在swift/common/utils.py文件的StatsdClient._send函数抛出了异常没有被捕捉导致的,该函数代码如下:

def _send(self, m_name, m_value, m_type, sample_rate):

if sample_rate is None:

sample_rate = self._default_sample_rate

sample_rate = sample_rate * self._sample_rate_factor

parts = [‘%s%s:%s‘ % (self._prefix, m_name, m_value), m_type]

if sample_rate < 1:

if self.random() < sample_rate:

parts.append(‘@%s‘ % (sample_rate,))

else:

return

# Ideally, we‘d cache a sending socket in self, but that

# results in a socket getting shared by multiple green threads.

with closing(self._open_socket()) as sock:

return sock.sendto(‘|‘.join(parts), self._target)     #该函数调用抛出了异常

解决办法:

在return sock.sendto(‘|‘.join(parts), self._target)中加入异常处理即可,具体代码可参考官方最新代码

同时系统的/var/log/messages日志中出现大量的如下信息:

proxy-access Error sending UDP message to (‘127.0.0.1‘, 8125): [Errno 1] Operation not permitted

proxy-access Error sending UDP message to (‘127.0.0.1‘, 8125): [Errno 1] Operation not permitted

kernel: __ratelimit: 89 callbacks suppressed

kernel: nf_conntrack: table full, dropping packet.

kernel: nf_conntrack: table full, dropping packet.

kernel: nf_conntrack: table full, dropping packet.

解决办法:

根据上面的信息,得知8125端口是StatsD服务端口,因此是StatsD的客户端出了问题。同时内核报出了丢包错误,主要是由于服务器防火墙开启了过滤机制导致的(net.ipv4.netfilter.ip_conntrack_max太小),在此将防火墙关闭即可(service iptables stop)

参考:

[1] https://bugs.launchpad.net/swift/+bug/1183152

[2] http://www.cyberciti.biz/faq/ip_conntrack-table-ful-dropping-packet-error/

[3] http://stackoverflow.com/questions/6240951/sendto-operation-not-permitted-netsnmp

时间: 2024-11-01 22:31:22

Swift开启StatsD后出现上传数据出现返回503的Bug的相关文章

android后台上传数据demo

1.界面启动后开启服务 public class UploadlogActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent inte

Amazon MWS 上传数据 (一) 设置服务

Amazon 上传数据的流程为: 通过 SubmitFeed 操作.加密标头和所有必需的元数据(包括 FeedType 的值在内),来提交 XML 或文本型数据文件.正如亚马逊 MWS的所有提交内容一样,您还必须包括验证信息.SubmitFeed 操作可返回 FeedSubmissionId 的值,您可以使用该值,通过 GetFeedSubmissionList 操作,对上传数据状态进行定期检查. 如果亚马逊 MWS仍在处理请求,则 GetFeedSubmissionList 操作的 FeedP

_00017 Flume的体系结构介绍以及Flume入门案例(往HDFS上传数据)

博文作者:妳那伊抹微笑 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:hadoop,数据分析与挖掘 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # 学习前言 想学习一下Flume,网上找了好多文章基本上都说的很简单,只有一半什么的,简直就是坑爹,饿顿时怒火就上来了,学个东西真不容易,然后自己耐心的把这些零零碎碎的东西整理整理,各种

自动化上传数据(三)

excel处理类和上传类都已经写好,分别保存在excelHandle.py和upload.py中,最后我们需要写一个run.py去执行上传脚本. #!/usr/bin/python # -*- coding: utf-8 -*- import excelHandle import upload import Queue import time def run(filepath, username, password, url): 首先引入excelHandle,upload文件,time包,以及

Amazon MWS 上传数据 (二) 构造请求

上一篇文章提到了Amazon 上传数据有三个步骤,但是每个步骤都需要构造服务和构造请求,服务是一样的,请求各不相同:这个很容易理解,这三个步骤都需要和Amazon服务器交互,所以他们的服务构造是一样的,但是三个步骤的功能各不相同,所以他们的请求(完成的功能)也不相同. 现在先来说SubmitFeed的时候需要的请求文件,下面是请求文件的代码示例: 1 #region 构造请求 Submit Amazon信息 2 private SubmitFeedRequest GetSubmitFeedReq

Hibernate上传数据到数据库,从数据库读取数据到本地模板代码

Hibernate上传数据到数据库: 1 //创建一个session对象 2 Session session1=HibernateTools.getSession(); 3 //Fenciresult数据库表所对应的实体类,生成实体类对象,操作数据库表 4 Fenciresult fenciresult=new Fenciresult(); 5 //设置数据库对应字段的值,主键若是自增模式,无需人为设置 6 fenciresult.setWord("@"); 7 fenciresult

上传数据+上传一张图片

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ajax上传数据(1.解决传送数据乱码问题2.苹果手机上传图片翻转问题)</title> <meta name="viewport" content="width=device-width,initial-scale=1,

webDAV服务的开启以及客户端的上传、下载、删除、新建文件夾、列表的代码(C#)

windows server 2003开启webDAV服务 1. 启动“IIS管理器”选择“WEB服务扩展”,选择“WEBDAV”的允许按钮启动WEBDAV功能 2.建立一个虚拟目录,对应到一个本地目录. 3.启动系统“服务”中的“WebClient”服务 参考网址 WebDAV文档rfc2518    http://www.ietf.org/rfc/rfc2518.txt webdav常用方法和概念总结   http://blog.csdn.net/mahongming/archive/200

iOS开发--http协议 post上传数据

NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"123",@"longitude",@"30",@"latitude",@"上传数据",@"message",nil];    //dictionaryToNSJoson    NSError *err=nil;    NSData *jasonData=[NSJ