4

我正在寻找一个灵活的事件记录平台来存储 Django 的预定义(用户名、IP 地址)和非预定义(可以根据需要由任何代码生成)事件。我目前正在使用日志文件执行其中的一些操作,但它最终需要各种分析脚本并最终进入数据库,因此我正在考虑将其立即放入 MongoDB 或 Redis 等 nosql 存储中。

这个想法是为了能够轻松查询,例如,用户最常来自哪个 IP 地址、用户是否曾经执行过某些操作、查找特定事件的结果等。

有什么东西已经这样做了吗?

如果没有,我在想这个:

“事件”是附加到请求对象的字典。中间件填写各个部分(用户名、ip、sql 计时),其余部分根据需要由代码填写。

在为请求提供服务后,请求后挂钩将事件放入 mongodb/redis,规范化各个字段(例如,增加用户名:IP 地址计数器)并将其余部分按原样放入。

将不胜感激的智慧之言/指向执行部分/全部代码的代码。

4

3 回答 3

3

mongodb-log项目可能可以用作您想做的事情的基础。

于 2010-06-16T23:15:10.773 回答
1

我不确定是否存在一个库,它完全符合您对 NoSQL DB 的要求。但是,MongoDB 后端刚刚发布,它似乎可以与 Django 的 ORM 一起使用(以有限的方式)。

这是链接。

也许您可以将它与利用 Django 内置 ORM 的现有日志系统一起使用?我希望这会有所帮助,即使只是一点点。

于 2010-05-25T19:51:00.103 回答
0

这个问题是几年前做的。

但是,任何正在搜索相同问题的人都可以从这个答案中获得一些帮助。

基本上 Django 有一个LogEntry模型可以处理来自管理应用程序的所有用户日志:

from django.admin.models import LogEntry

例如,您可以轻松地使用它来使用 django-rest-framework 创建端点来使用日志数据,只需将此模型添加为 Meta.model = LogEntry 和 querysets = LogEntry.objects.all() 用于视图集。

为了在 django 中连接 mongodb,今天有一个名为djongo.

pip install djongo

在 settings.py 中,您可以添加以下代码:

# database setup to connect with mongodb.
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'demodatabase',
        'CLIENT': {
           'host': 'your-db-host',
        }
    }
}

下面是一个日志示例:

    {
        "id": 3,
        "action_time": "2021-09-24T17:19:51.252000Z",
        "object_id": "1",
        "object_repr": "Test title",
        "action_flag": 1,
        "change_message": "[{\"added\": {}}]",
        "user": 1,
        "content_type": 7
    },

您还可以添加多个数据库,例如仅添加 mongodb 来接收日志,您只需要创建路由器来处理哪个数据库做什么。

您可以查看文档以获得更好的解释

于 2021-09-27T19:05:39.150 回答