Azure应用程序网关常见问题场景分析

Azure应用程序网关常见问题场景分析

场景一:WAF功能对应用程序网关性能的影响

在开启了WAF功能后,WAF功能模块运行会占据很大一部分系统负载。以下针对有安全性合规需求的前提(必须开启WAF)做进一步性能分析:

开启了WAF后,随之会有基于一些列OWASP规则的HTTP层的安全扫描,这些扫描会产生大量的CPU开销,涉及前后文规则匹配,评分计算,执行动作等等逻辑。因此,规则匹配是消耗CPU的主要因素。

这里需要注意两点:

  • 所有有效且网络上已经到达应用程序网关的http请求均会被WAF模块做安全过滤。

无论是检测模式(detection)还是阻止(blocking)模式,只有匹配了规则的请求才会被记录到WAF的防火墙日志记录中。

  • 没有被记录进WAF的防火墙日志的请求,并不代表其没有被WAF规则扫描,相反,它们都是经过了规则的前后逻辑扫描,没有匹配任何规则,被视为“安全合规”的请求。

因此,基于以上两点,当我们做性能评估时,规则匹配是性能消耗的重要因素,但没有WAF的防火墙日志记录并不代表没有规则匹配,相反,没有日志记录说明所有请求被规则过滤后,没有任何匹配,因此不会被日志进程记录,因为日志进程仅会记录有规则匹配的请求。

但我们实际往往会观察到,当在短时间内有大量WAF防火墙日志匹配记录时,通常会伴随有处理请求慢,性能下降等情况出现。原因经后台工程师排查确认大多是由于系统负荷高引起。

既然如上阐述中已经提到,无论日志记录匹配数多与少,规则扫描都在进行,为什么往往匹配数量大时往往会引起系统符合高?

究其原因,系统在规则扫描时,匹配的确比没有任何匹配所需的系统符合高,虽然即使仅开启检测(detection)模式,不需要阻断,但系统仍需要额外资源来处理匹配,例如前后文匹配,综合评分等等逻辑。此外,日志进程本身也会消耗系统负荷,尤其是在短时间内有大量匹配时,日志进程有大量日志需要记录,对于系统的CPU和内存都有大量消耗。

综上,当开启了WAF功能后,首要性能指标为WAF防火墙日志条目数,即可以统计在存储日志中,一段时间内日志条目数,例如每五分钟的日志条目数。但日志存储在存储账户中毕竟是异步的,通常存在五分钟左右的延迟。如果需要实时监控,及时做出是否扩容的决定,建议通过event hub方式统计。方法可参考:Azure应用程序网关诊断日志详解及合规要求

一旦通过如上监控方式感知到如上性能问题,可以在第一时间做应用程序网关的扩容,这里建议先做SKU的扩容,再做实例数的扩容,从而将性能对业务影响最大程度降低。

这里列举一些容易造成大量安全规则匹配的常见触发条件:

  1. 业务逻辑中频繁被调用API的URL设计不合规,导致针对这些API的调用频繁触发并匹配安全规则
  2. Cookie中出现敏感字段,同样频繁触发并匹配安全规则

例如:

{
 
"instanceId": "ApplicationGatewayRole_IN_0",
 
"clientIp": "219.1xx.xxx.xxx",
 
"clientPort": "0",
 
"requestUri": "/go/pipelineHistory.json?pipelineName=sims-integration-master",
 
"ruleSetType": "OWASP",
 
"ruleSetVersion": "3.0",
 
"ruleId": "942450",
 
"message": "SQL Hex Encoding Identified",
 
"action": "Detected",
 
"site": "Global",
 
"details": {
   
"message": "Warning. Pattern match \"(?i:(?:\\\\A|[^\\\\d])0x[a-f\\\\d]{3,}[a-f\\\\d]*)+\"
at REQUEST_COOKIES:JSESSIONID.",
   
"data": "Matched Data: e0x00e09b7 found within
REQUEST_COOKIES:JSESSIONID: node0x00e09b7gkafqim8699b2xkw44438.node0",
   
"file": "rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf",
   
"line": "1085"
  },
 
"hostname": "api.test.com.cn"
}

  1. API中包含一些针对后端数据库的敏感请求语句

一旦遇到以上情况,建议与开发工程师做更细致的安全合规性技术沟通,避免业务上线后产生大规模业务影响。

场景二:应用程序网关性能和服务的监控

短时间内没有大量安全规则匹配,或者没有开启WAF的情况下,如何第一时间监控到性能下降或服务异常。

如果排除安全规则扫描引起系统负荷高的因素,那么我们就需要从性能日志以及访问日志本身着手来分析。

有关诊断日志的访问日志(access log)中的字段的定义,可以参考:

https://docs.azure.cn/zh-cn/application-gateway/application-gateway-diagnostics#access-log

有关诊断日志的性能日志(performance log)中的字段定义,可以参考:

https://docs.azure.cn/zh-cn/application-gateway/application-gateway-diagnostics#performance-log

这里列出几个场景所参考的参数监控:

  1. requestCount(performance log)
  2. failedRequestCount(performance
    log)
  3. Time taken(access log)
  4. Throughput
  5. Unhealthy backend VM count

WAF规则匹配与平时相比正常,requestCount异常大,此时仅前端提示失败请求数增加,要判断是否由于应用程序网关性能引起;

此场景中,建议同时参考多个参数分析:

failedRequestCount也有明显增加;

timeTaken变大,与此同时,latency_d并无明显增加;

AzureDiagnostics

| where ResourceProvider ==
"MICROSOFT.NETWORK" and Category ==
"ApplicationGatewayAccessLog"

| summarize avg(timeTaken_d)
by Resource, bin(TimeGenerated, 1m)

| render timechart

unHealthyHostCount始终是0或与平时一致:

AzureDiagnostics

| where ResourceProvider ==
"MICROSOFT.NETWORK" and Category ==
"ApplicationGatewayPerformanceLog"

| summarize
max(unHealthyHostCount_d) by Resource, bin(TimeGenerated, 1m)

| render timechart

此时判断应用程序网关确有异常,可以通过监控告警在第一时间感知并扩容。

场景三:应用程序网关failedRequestCount异常增大

WAF规则匹配以及requestCount与平时相比正常,但是failedRequestCount异常大,此时,建议先检查Throughput是否远超出平时大小,以此观察是否存在频繁的超大尺寸的上传或下载导致系统异常。Analytics常用查询语句:Avg throughput per min (Mb)

Avg throughput per min
(Mb)

AzureDiagnostics

| where ResourceProvider ==
"MICROSOFT.NETWORK" and Category ==
"ApplicationGatewayPerformanceLog"

| summarize avg(throughput_d)
by Resource, bin(TimeGenerated, 1m)

| extend ThroughputMb =
(avg_throughput_d/1000)/1000

| project Resource,
TimeGenerated, ThroughputMb

| render timechart

场景四:应用程序网关timetaken明显增加

WAF规则匹配以及requestCount与平时相比有一定增加,但是failedRequestCount还未出现明显增加,但是timetaken已经有了明显增加:

AzureDiagnostics

| where ResourceProvider ==
"MICROSOFT.NETWORK" and Category == "ApplicationGatewayAccessLog"

| summarize avg(timeTaken_d)
by Resource, bin(TimeGenerated, 1m)

| render timechart

再看latency是否也有同样的增加:

AzureDiagnostics

| where ResourceProvider ==
"MICROSOFT.NETWORK" and Category ==
"ApplicationGatewayAccessLog"

| summarize avg(latency_d) by
Resource, bin(TimeGenerated, 1m)

| render timechart

如果latency_d也有明显增加,unHealthyHostCount或有增加,那说明此问题是由于后端池服务器本身响应慢导致。应该先解决后端池中的服务问题。

反之,即latency_d没有明显增加,那么初步判断此问题是应用程序网关自身有关。其中有关如何排查从应用程序网关得到HTTP返回代码502,可以参考:

如何排查应用程序网关返回 HTTP Code 502 或客户端得到应用程序网关响应慢的问题(一)

如何排查应用程序网关返回 HTTP Code 502 或客户端得到应用程序网关响应慢的问题(二)

更多关于应用程序网关性能指标的分析查询方法可参考:Azure应用程序网关性能的分析

原文地址:https://www.cnblogs.com/yubing83/p/12096460.html

时间: 2024-10-07 10:30:30

Azure应用程序网关常见问题场景分析的相关文章

10.Azure应用程序网关(上)

应用程序网关这个功能主要又分2个子功能,一个叫"标准应用程序网关":一个叫"WEB应用程序防火墙(WAF)"."WEB应用程序防火墙(WAF)"是基于"标准应用程序网关"的升级版.Azure 应用程序网关是以服务形式提供应用程序传递控制的专用虚拟设备.提供七层的负载均衡功能.还提供其他第 7 层路由功能,包括传入流量的轮循机制分配.基于 Cookie 的会话相关性.基于 URL 路径的路由,以及在单个应用程序网关后面托管多个网

Azure应用程序网关证书

Azure AppGateway  证书问题 最近处理一个应用程序网关的工单,突发其想,后端池中的两台计算机可否一台Windows,另外一台Linux.网上搜罗一番,还真可以.其实核心点在于证书格式不同:   Windows :  .pfx..cer   Linux:.crt..key   本次实验目标: 以下截图中两台计算机,一台Windows和一台Linux计算机,后端运行状态都为"正常" 分析这个需求: 两种解决方案: Linux虚拟机apache使用windows的证书(更多的

Windows Azure Application Gateway 应用程序网关

 本文主要介绍Windows Azure 应用程序网关三种主要功能介绍:Http负载平衡.基于cookie会话连接.SSL卸载 Azure应用程序网关(Azure Application Gateway) 基础环境准备,在虚拟网络中为应用程序网关创建一个子网,在本文中使用AppGateway-1子网. New-AzureApplicationGateway -Name WinAppGW -VnetName AppGatewayVnet -Subnets AppGateway-1 #新建应用程序网

Azure-如何排查应用程序网关返回 HTTP Code 502 或客户端得到应用程序网关响应慢的问题(一)

问题描述 经过初步排查,应用程序网关本身工作正常,同时也排除了 Azure 平台网络的延迟.出现的现象通常是部分的 URL 响应正常.部分 URL 响应慢或是返回 HTTP Code 502. 问题分析 通过分析访问日志判断应用访问以及响应情况(有关如何启用以及获取诊断日志请参考:应用程序网关的后端运行状况.诊断日志和指标). 对比后端 Web 服务器的访问日志,通过时间戳或是 URL 来查询同一个请求在应用程序网关以及后端 Web 服务器的响应情况. 如果在应用程序网关以及后端 Web 服务器

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者.小象大学阶段在使用MATLAB做数据分析和自动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码:喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有

典型用户及用户场景分析

典型用户及用户场景分析 糖糖---一个热爱编程的准程序员 名字 糖糖 性别.年龄 男,刚21岁 收入 暂时还没有 比例和重要性 市场比例很大,很重要 典型场景 写了一段自认为很优秀的代码,想要保存在一个合适的地方 使用本软件/服务的环境 需要保存自己的代码 生活/工作情况 现在还是学生,努力学习 知识层次和能力 大学还未毕业,学习热情极高,编程能力较好 用户的动机.目的和困难 保存代码,但是没有合适的地方 用户的偏好 喜欢给代码增加自定义的标签 呆呆---热爱思考人生的缺乏编程联系的“小学生”

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源复制,一个slave可以有多个master,分别从各自的master复制不同的DB. 这个特性可以用在OLAP环境中,传统电商DB都是拆了再拆,分库分表,sharding,而OLAP环境或者大数据平台环境,通常需要各种数据的聚合,多个平台多个DB数据的复合查询,而这些数据分散在各个库中,怎么办了,当

用户分析和场景分析

用户分析: 名字:二柱子 年龄:30 收入:3000元一个月 代表的比例:代表的是程序维护人员 二柱子:二柱子是一名负责任的找到了网站的管理员,对电脑有很好的掌握,平常最反感得是那些在网站中发小广告的,严重影响了网站的秩序,对网站维护产生干扰, 用户偏好: 场景分析:在进行维护网站的时候,发现有人在网站中发小广告,这让他很生气,希望把这个用户移除出这个网站,并对这个ip进行判断,禁止这个ip访问该网站.

面向.Net程序员的dump分析

背景 Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到dump文件中.在 Windows 系统上, dump 文件分为内核 dump 和用户态 dump 两种.前者一般用来分析内核相关的问题,比如驱动程序:后者一般用来分析用户态程序的问题. 一般的程序员可能接触不到dump文件,反而是运维会用的多一些.不过如果你抗战在第一线,学会dump的分析无疑是掌握一柄利器.因为很多场景下,在线下的单元测试或者性能测试中由于测试用例的不充分或者生产与测试环境的硬件以及pv量级的不同等等情况