【发布时间】:2014-11-25 11:01:32
【问题描述】:
我在 Mongo 中有很多 syslog 文档,下面是一个示例。我想做的是在图表中按天/小时/月对它们进行分组。该值将是特定时间段内的文档计数。
{
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 用 Flask 在 Python 中呈现这些数据,结果很好,但所有消息都在图表上一一显示。我想制作几个月、几周、几个小时等的水桶。
为此,我可以使用键“@timestamp”中的值。这工作正常,但在 Python 中按计数分组意味着首先检索所有文档,这不可能是正确的:D
问题:
什么是我可以在 Pymongo 中使用来获取 count_by_week 等的正确查询,或者我应该在服务器上使用聚合之类的东西,这会是什么样子?
四台服务器,请注意上面的平线,因为缺少计时分组。
【问题讨论】: