云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_网站建设从入门到精通_12月免费

小七 141 0

边沿的原木

有了Cloudflare Workers,我们在边缘的JavaScript环境,可以将流量日志发送到任意位置。在这篇文章中,我们将讨论如何实现这一点的一个示例Worker实现。因此,如果您正在构建或维护自己的流量日志/分析环境,请继续阅读。为了构建底层脚本,我们将利用子请求。可以从初始HTTP/S请求派生的子请求可用于聚合和组合来自多个后端服务的响应,或者像这里讨论的示例一样,将数据发布到特定的端点。子请求可以异步地发出,并且在初始请求被完全服务之后,以避免给主请求增加不必要的延迟。工人代码在本例中,我们假设弹性堆栈已设置在elk.example.com网站并且已配置为通过HTTP/S PUT请求接收每个日志行的多个字段。下面是我们要看的完整脚本:addEventListener('fetch',事件=>{事件响应(fetchAndLog(event));})异步函数fetchAndLog(event){const response=等待获取(事件请求);事件.等待直到(logToElk公司(事件请求,响应));返回响应;}异步函数logToElk(请求,响应){变量射线=请求.headers.get('cf-ray')| |'';变量id=射线.切片(0,-4);变量数据={"时间戳":日期。现在(),"url":请求.url,"推荐人":请求推荐人,"方法":请求.方法,"雷":雷,"ip":请求.headers.get('cf-connecting-ip')| |',"主机":请求.headers.get('host')| |',"ua":请求.headers.get('user-agent')| |',"抄送":请求.headers.get('Cf-Ipcountry')| |',"科洛":请求cf.colo,"TLS版本":请求.cf.tls版本|| '','tlsCipher':请求。cf.tlsCipher|| '',"状态":响应.状态,};变量url="https://elk.example.com/weblogs/logs/"+id+"?管道=网络日志和漂亮"等待获取(url{method:'放入',正文:JSON.stringify(数据),标题:新标题({'内容类型':'应用程序/json',})})}让我们更详细地看一下脚本:addEventListener('fetch',事件=>{事件响应(fetchAndLog(event));})异步函数fetchAndLog(event){const response=等待获取(事件请求);事件.等待直到(logToElk公司(事件请求,响应));返回响应;}在脚本的开始,我们监听所有的请求事件,对于每个请求,我们调用fetchAndLog函数。此函数将按原样代理请求,并异步调用logToElk函数,该函数将向ELK堆栈发送一条日志行。由于此函数是异步执行的,所以在登录ELK时的延迟不会影响原始请求。让我们更深入地了解logToElk函数。变量射线=请求.headers.get('cf-ray')| |'';变量id=射线.切片(0,-4);变量数据={"时间戳":日期。现在(),"url":请求.url,"推荐人":请求推荐人,"方法":请求.方法,"雷":雷,"ip":请求.headers.get('cf-connecting-ip')| |',"主机":请求.headers.get('host')| |',"ua":请求.headers.get('user-agent')| |',"抄送":请求.headers.get('Cf-Ipcountry')| |',"科洛":请求cf.colo,"TLS版本":请求.cf.tls版本|| '','tlsCipher':请求。cf.tlsCipher|| '',"状态":响应.状态,};第一部分是收集我们希望记录的数据。其中一些字段是任何HTTP请求的标准字段的一部分(例如URL、HTTP方法等),但是,我们还添加了Cloudflare特有的字段,例如ray ID(通过Cloudflare代理的任何HTTP请求的唯一标识符)、Cloudflare IP向国家/地区逻辑提供的国家/地区代码,以及请求所命中的PoP/colo ID。变量url="https://elk.example.com/weblogs/logs/"+id+"pipeline=weblogs漂亮(&P)等待获取(url{method:'放入',正文:JSON.stringify(数据),标题:新标题({'内容类型':'应用程序/json',})})在我们的数据变量中保存了所有要记录的字段之后,我们需要执行一个子请求,将日志行放入后端ELK堆栈中。通过调用fetch函数,我们启动了一个新的HTTP请求,我们为其指定了请求方法、主体和ELK堆栈所期望的附加头(在本例中,我们将输入JSON内容)。就这样,通过一个小的Worker脚本,您可以将Cloudflare流量日志实时导入到ELK堆栈中。如果您觉得这很有用,我们还讨论了过去通过工作人员记录事件和向哨兵发出警报的情况,并且社区成员还为其他日志工具(如logdna)共享了类似的方法。通过Argo隧道和通道使其更好作为一个额外的改进,值得注意的是,弹性堆栈使用Kibana作为HTTP/S上可用的前端可视化接口kibana.example.com)也可以通过Cloudflare代理,但通常只在组织内部使用。因此,需要保护来源,并且只允许同事访问。我们可以使用两个Cloudflare功能来改进Kibana部署:Argo Tunnel允许Kibana源站直接连接到Cloudflare,从而避免了公开访问IP地址或主机名的需要;Cloudflare Access允许您将Cloudflare与您的身份和访问管理工具集成,并定义规则来指定哪些用户或组可以访问Kibana实例;所有人的日志在我们启动Workers之前,从Cloudflare检索原始日志仅对企业客户可用。只要做一点技术上的努力,您现在就可以通过利用worker从边缘接收日志,而不管您使用的是哪种计划。工人可以从按使用付费模式开始,而ELK堆栈是开源的。企业客户仍然可以使用我们的企业日志共享(ELS)功能检索原始流量日志。如果ELS已打开,则选定应用程序的所有请求都将被记录并存储在Cloudflare基础设施上。当需要时,可以通过restfulapi下载日志,或者直接推送到amazons3或googlecloud(很快也就是microsoftazure),以便在您最喜欢的日志分析工具中进行进一步处理。无论位置如何,在边缘处理请求后10分钟内,都可以使用带有ELS的日志,并且这些日志将具有许多工作环境尚不可用的其他字段。ELS还保证日志的传递和保留期,并允许您不必担心加载和存储。