使用AWS服务时注意时区的问题,aws服务注意时区


最近来到了新的公司,搞起了AWS,会陆续记录一些AWS的东西。今天要讲的就是时区问题,说起来挺简单的,没有服务器跨国的估计注意的人没几个。
我们的EMR机器在US,而实际应用的服务器在CH,同事针对log进行的parser的时候发现实际用户的时间跟我们机器的时间总是有差异,而且排除客户端网络问题差异还挺大。 刚开始没注意,就以为是网络问题,我后来看了看还是。
以下是查找思路:
--服务器时间 大部分为04-26
select collector_tstamp :: date,count(*) from dev.events
group by collector_tstamp :: date order by count(*) desc;
2015-04-26	1012769
2015-04-27	16932

—设备时间 大部分为04-26
select dvce_tstamp :: date,count(*) from dev.events
group by dvce_tstamp :: date order by count(*) desc;
2015-04-26	938746
2015-04-25	90488
2015-04-27	174
....(小于100)


从两点上看会误以为没什么问题。
下面来看diff的数据:
select datediff(m,collector_tstamp,dvce_tstamp) as minute,count(*) from dev.events
group by datediff(m,collector_tstamp,dvce_tstamp) order by count(*) desc;
Minutes cnt
-480	949916
-479	24772
-481	17785
-478	8325
-477	4397
-476	3000
-482	2852
-475	2492
-474	2219
-473	1628
-470	1384
-469	1103


确认后日志轮转没问题后,检查了EMR程序,发现在调用python的time库时进行localtime的转化 EMR python script:
row['dvce_tstamp'] = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(row['dvce_tstamp'])/1000))

所以问题就发现了。 RootCause: 本地代码上传AWS做时间处理需要进行timezone的指定
不指定的时候测试结果: 本地机器: >>> print time.localtime(1430378360) time.struct_time(tm_year=2015, tm_mon=4, tm_mday=30, tm_hour=15, tm_min=19, tm_sec=20, tm_wday=3, tm_yday=120, tm_isdst=0)
EMR机器: >>> print time.localtime(1430378360) time.struct_time(tm_year=2015, tm_mon=4, tm_mday=30, tm_hour=7, tm_min=19, tm_sec=20, tm_wday=3, tm_yday=120, tm_isdst=0)


--

相关内容