【问题标题】:C#-Azure function:How to log message to Queue storage when calling to "HTTP Trigger" azure function?C#-Azure 函数:调用“HTTP Trigger”天蓝色函数时如何将消息记录到队列存储?
【发布时间】:2017-10-12 19:27:30
【问题描述】:

我在 C# 中有一个带有“HTTP Trigger”的天蓝色函数。当我使用“HTTP 触发器”调用 azure 函数时,我想将消息记录到队列存储中。

当调用“HTTP 触发器”时,它会在其他地方记录一条消息 (log.info("C# Http trigger....");),但我想将此日志消息与 ipaddress 一起记录,(当用户向“HTTP 触发器”函数)存储在队列存储中 (log.info("C# Queue trigger ",ipaddress)) 这样我就可以阻止客户端 ipaddress 一天,如果用户对 api 的调用超过了尝试次数,第二天我可以通过获取所有 ipaddress 来取消阻止客户端 ipaddress云中的队列存储运行计时器触发器。

是否有可能实现这一点,否则除了队列存储之外,还有其他存储 ipaddress 的方法吗?

【问题讨论】:

    标签: azure azure-storage azure-functions serverless-architecture


    【解决方案1】:

    根据您所写的内容,我猜想您想为您的用户提供某种 API 并希望限制访问。为此,我宁愿建议使用 Azure API 管理 (https://azure.microsoft.com/en-us/services/api-management/)。它为您提供访问报价,根据不同的标准限制用户对 API 端点的访问。它还提供更多功能:用户管理、支付、订阅、安全等等。

    【讨论】:

    • 如果你想根据他的IP阻止用户(由于动态IP地址非常不安全),那么只需存储这个IP地址的最后一次“溢出”访问并检查最后一次访问是否是过去 24 小时...对于存储,您可以使用 DocumentDB、CosmosDB 或 RedisCache。也许还有 Azure Storage,但我会选择前者。
    【解决方案2】:

    要使用 HTTP 触发器在 Azure 函数下检索客户端 IP,可以使用以下代码 sn-p:

    run.csx:

    #r "System.Web"
    
    using System.Web;
    using System.Net;
    
    public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log)
    {   
        var address = ((HttpContextWrapper)req.Properties["MS_HttpContext"]).Request.UserHostAddress;
        log.Info($"Your client IP: {address}");
        return req.CreateResponse(HttpStatusCode.OK, $"Your client IP: {address}");
    }
    

    更多详情可以参考这个issue

    这样我就可以阻止客户端 IP 地址一天,如果用户对 api 的调用超过尝试次数,第二天我可以通过从队列存储中获取所有 IP 地址来取消阻止客户端 IP 地址,在云中运行计时器触发器。

    我更喜欢使用表存储来存储特定 IP 的访问日志。您可以将PartitionKey 列设置为日期,将RowKey 设置为ClientIPClientIP + ApiName,还可以添加其他列(时间戳、TotalRequests 等)。另外,您可以参考Azure Storage Table Design Guide来设计您的储物桌。

    对于您的 azure 功能,您可以使用 Storage table bindingsTable Storage SDK 读取特定 IP 的请求日志并更新特定 IP 的总请求数。另外,这里有一个类似的博客,可以参考here

    更新:

    您可以将日志配置为存储在“监控 > 诊断日志”下的文件系统或 Blob 存储中,如下所示:

    对于应用程序日志(文件系统),您可以通过kudu 找到日志:

    对于应用程序日志记录 (Blob),您可以利用 Storage Explorer 检索您的日志。

    【讨论】:

    • “Http 触发器”在哪里记录消息?我认为它可能会将该日志消息存储到某个存储中。
    • 我的答案更新了一些细节,你可以参考一下。
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多