我在Mongo中有很多syslog文档,下面是一个示例。我想要做的是按日/小时/月将它们分组在图表中。该值将是一段时间内文档的计数。在MongoDB中按小时分组的时间戳
{
u'syslog_message': u'[10724525.839722] [UFW BLOCK] IN=venet0 OUT= MAC= SRC=1.2.3.4 DST=9.8.7.6 LEN=52 TOS=0x08 PREC=0x20 TTL=50 ID=55384 PROTO=TCP SPT=349 DPT=123 WINDOW=14600 RES=0x00 SYN URGP=0 ',
u'received_from': u'1.3.5.7:1234',
u'@version': u'1',
u'@timestamp': datetime.datetime(2014, 11, 20, 15, 9, 55),
u'syslog_timestamp': u'Nov 20 15:09:55',
u'syslog_facility': u'user-level',
u'syslog_severity': u'notice',
u'host': u'2.4.6.8:2468',
u'syslog_program': u'kernel',
u'syslog_hostname': u'server01',
u'received_at': u'2014-11-20 20:09:55 UTC',
u'message': u'<4>Nov 20 15:09:55 server01 kernel: [10724525.839722] [UFW BLOCK] IN=venet0 OUT= MAC= SRC=1.2.3.4 DST=2.3.4.5 LEN=52 TOS=0x08 PREC=0x20 TTL=50 ID=55384 PROTO=TCP SPT=1234 DPT=543 WINDOW=14600 RES=0x00 SYN URGP=0 ',
u'_id': ObjectId('546e4a93e98673fe8f11a4d2'),
u'type': u'syslog',
u'syslog_severity_code': 5,
u'syslog_facility_code': 1
}
我使用Chartkick在Python呈现这个数据与瓶,其结果是好的,但所有的消息都在图表逐个。我想te做桶,数月,数周,数小时等。
为此,我可以使用'@timestamp'键中的值。这工作得很好,但在Python中的计数分组装置,首先检索所有文件,并不能是正确的:d
问:
是什么,我可以使用内Pymongo得到正确的查询count_by_week等等,或者我应该在服务器上使用类似聚合的东西,这是什么样的?
四台服务器,由于缺少计时分组,所以请注意上面的扁平线。
谢谢,我认为这将工作,我的时间戳不在Mongo需要的格式,所以我不能告诉当然。 “无法从BSON类型字符串转换为日期” – Thijs 2014-11-25 08:04:35
将字符存储为字符串是一个错误 - 例如,您不能执行范围搜索。它是一个常见的错误,但你需要改变它 – alernerdev 2014-11-25 12:14:39