Azure cosmosdb CosmosDB是否有记录CRUD请求的固有方法?

Azure cosmosdb CosmosDB是否有记录CRUD请求的固有方法?,azure-cosmosdb,audit-trail,Azure Cosmosdb,Audit Trail,我试图找出CosmosDB是否有任何内置功能可以用作审核日志,即现有Azure诊断/监视功能之一会注销对数据库的特定更改,包括写入的JSON数据 这是存在的,还是我必须自己写 到目前为止,我发现的最接近的是诊断日志记录,它包含大量信息,但不包括实际写入、更改或删除的内容。根据您提到的azure cosmos db中的官方记录,诊断日志可以记录数据平面请求,MongoRequests,度量请求。但是,没有此类信息表明数据库、集合、文档等的具体更改 因此,我建议您深入挖掘azure cosmos数据

我试图找出CosmosDB是否有任何内置功能可以用作审核日志,即现有Azure诊断/监视功能之一会注销对数据库的特定更改,包括写入的JSON数据

这是存在的,还是我必须自己写

到目前为止,我发现的最接近的是诊断日志记录,它包含大量信息,但不包括实际写入、更改或删除的内容。

根据您提到的azure cosmos db中的官方记录,
诊断日志可以记录
数据平面请求
MongoRequests
度量请求
。但是,没有此类信息表明数据库、集合、文档等的具体更改

因此,我建议您深入挖掘azure cosmos数据库中的内容。它内置于azure cosmos数据库中,使我们能够捕获对集合所做的所有更改,而不必考虑系统所做的更改。您可以通过三种不同的方式阅读更改提要:

1.使用Azure功能

请在Azure Functions应用程序中创建Azure Cosmos DB触发器,您选择要连接的Azure Cosmos DB集合,并且每当对集合进行更改时都会触发该函数

2.使用Azure Cosmos DB SDK

foreach(PartitionKeyRange中的PartitionKeyRange pkRange){
字符串继续=空;
checkpoints.TryGetValue(pkRange.Id,out continuation);
IDocumentQuery=client.CreateDocumentChangeFeedQuery(
collectionUri,
新的ChangeFeedOptions
{
PartitionKeyRangeId=pkRange.Id,
startFromStart=真,
请求继续=继续,
MaxItemCount=-1,
//设置读取时间:仅显示自StartTime以来修改的更改提要结果
StartTime=DateTime.Now-TimeSpan.FromSeconds(30)
});
while(query.HasMoreResults)
{
FeedResponse readChangesResponse=query.ExecuteNextAsync().Result;
foreach(读取更改响应中的动态更改文档)
{
WriteLine(“文档:{0}”,changedDocument);
}
检查点[pkRange.Id]=readChangesResponse.ResponseContinuation;
}
}
3.


希望它能对您有所帮助。

但请小心,因为更改源无法处理删除请求“您可以从容器的原始位置读取更改源,但如果某个项目被删除,它将从更改源中删除。”
foreach (PartitionKeyRange pkRange in partitionKeyRanges){
    string continuation = null;
    checkpoints.TryGetValue(pkRange.Id, out continuation);
    IDocumentQuery<Document> query = client.CreateDocumentChangeFeedQuery(
        collectionUri,
        new ChangeFeedOptions
        {
            PartitionKeyRangeId = pkRange.Id,
            StartFromBeginning = true,
            RequestContinuation = continuation,
            MaxItemCount = -1,
            // Set reading time: only show change feed results modified since StartTime
            StartTime = DateTime.Now - TimeSpan.FromSeconds(30)
        });
    while (query.HasMoreResults)
        {
            FeedResponse<dynamic> readChangesResponse = query.ExecuteNextAsync<dynamic>().Result;

            foreach (dynamic changedDocument in readChangesResponse)
                {
                     Console.WriteLine("document: {0}", changedDocument);
                }
            checkpoints[pkRange.Id] = readChangesResponse.ResponseContinuation;
        }
}