Links#
1. YACE Config#
apiVersion: v1alpha1
sts-region: ap-northeast-1
discovery:
jobs:
- type: AWS/ApplicationELB
regions: [ap-northeast-1]
customTags:
- key: environment
value: uat
period: 300
length: 600
nilToZero: true
metrics:
- name: RequestCount
statistics: [Sum]
- name: HealthyHostCount
statistics: [Minimum]
- name: UnHealthyHostCount
statistics: [Maximum]
- name: HTTPCode_Target_2XX_Count
statistics: [Sum]
- name: HTTPCode_Target_4XX_Count
statistics: [Sum]
- name: HTTPCode_Target_5XX_Count
statistics: [Sum]
- name: HTTPCode_ELB_5XX_Count
statistics: [Sum]
- name: TargetResponseTime
statistics: [Average, p95, p99]
- name: TargetConnectionErrorCount
statistics: [Sum]
- name: RejectedConnectionCount
statistics: [Sum]
- name: ActiveConnectionCount
statistics: [Sum]
- name: NewConnectionCount
statistics: [Sum]
- name: ProcessedBytes
statistics: [Sum]2. Dashboard Rows#
| Row | Panels |
|---|---|
| Overview | request count, healthy hosts, target 5xx, ALB 5xx, target latency by target group |
| Drilldown | status code split, target group health, connection errors |
| Alert Signals | target 5xx rate in 5m, target 5xx count in 5m, request count in 5m, target response time p95 by target group |
| Capacity | request trend, active/new connections, processed bytes |
| Debug | rejected connections |
Trend note:
带 Trend 的 panel 不是原始单点值。
当前 ALB dashboard 里:
Request Trend
使用最近 1 小时 rolling sumperiod and length#
period: 300
length: 600这里的含义不是:
YACE 每 300 秒才拉一次数据而是:
period:
CloudWatch 每个 datapoint 的统计窗口
period: 300 表示每个 datapoint 是 5 分钟窗口
length:
每次查询 CloudWatch 时,向前回看的时间范围
length: 600 表示每次查询最近 10 分钟的数据对 ALB 这类 Sum 指标,period: 300 表示:
这一条 datapoint 是“过去 300 秒内的总数”
不是“YACE 每 300 秒只取一条以后就不管了”例如:
RequestCount + Statistic: Sum + period: 300
表示 5 分钟窗口内的请求总数
HTTPCode_Target_5XX_Count + Statistic: Sum + period: 300
表示 5 分钟窗口内 target 返回的 5xx 总数为什么 length 通常比 period 更长:
CloudWatch datapoint 可能有轻微延迟
length 比 period 长,可以让 YACE 查询最近多个窗口
降低短时漏点概率常见组合:
period: 300
length: 600
5 分钟 datapoint
每次查询最近 10 分钟
period: 60
length: 300
1 分钟 datapoint
每次查询最近 5 分钟metrics needed for the 2 alert-signal panels#
如果你的目标不是做完整 dashboard,而只是支持你现在关心的这 2 类告警信号:
1. Target 5xx rate high
2. TargetResponseTimeHigh那么最小采集集只需要围绕这两个信号:
Target 5xx rate high:
RequestCount Sum
HTTPCode_Target_5XX_Count Sum
TargetResponseTimeHigh:
TargetResponseTime p95对应的最小 YACE config 可以写成:
apiVersion: v1alpha1
sts-region: ap-northeast-1
discovery:
jobs:
- type: AWS/ApplicationELB
regions: [ap-northeast-1]
customTags:
- key: environment
value: uat
period: 300
length: 600
nilToZero: true
metrics:
- name: RequestCount
statistics: [Sum]
- name: HTTPCode_Target_5XX_Count
statistics: [Sum]
- name: TargetResponseTime
statistics: [p95]这份最小配置只够支持:
Target 5xx Rate (5m) By Target Group
Target 5xx Count (5m) By Target Group
Request Count (5m) By Target Group
TargetResponseTime p95 By Target Group如果你还要保留当前这份 ALB dashboard 里的完整视图,而不只是这 2 类告警信号:
还需要继续采:
HealthyHostCount
UnHealthyHostCount
HTTPCode_Target_2XX_Count
HTTPCode_Target_4XX_Count
HTTPCode_ELB_5XX_Count
TargetResponseTime Average / p99
TargetConnectionErrorCount
RejectedConnectionCount
ActiveConnectionCount
NewConnectionCount
ProcessedBytes3. Verify#
{__name__=~"aws_applicationelb_.*"}告警辅助面板里,TargetGroup 相关总量查询统一过滤:
dimension_AvailabilityZone=""这样只保留 LoadBalancer + TargetGroup 这一层聚合结果,不把 AvailabilityZone + LoadBalancer + TargetGroup 的明细重复加进去。
当前 Target Latency By Target Group 也使用同样的过滤思路:
avg by (dimension_LoadBalancer, dimension_TargetGroup) (
aws_applicationelb_target_response_time_p95{
environment=~"$environment",
dimension_LoadBalancer=~"$dimension_LoadBalancer",
dimension_TargetGroup=~".+",
dimension_AvailabilityZone=""
}
)这样展示的是 target group 级延迟,而不是把所有 target group 汇总成单个 ALB 级延迟。
这里额外加:
dimension_TargetGroup=~".+"是为了只保留真正带 target group 维度的时序,避免把只有 ALB 级别的时序混进来。
=~ / !~ 这类 PromQL matcher 的通用说明放在:
content/Grafana/DashboardPromQLReference.md
alert signals and rule alignment#
如果你的 rule 是:
Target 5xx rate > 5%
and request count in 5m >= 100
and target 5xx count in 5m >= 10那么 dashboard 里新增的 Alert Signals row 就是用来解释这条 rule 为什么触发的。
Target 5xx Rate (5m) By Target Group:
100 *
sum by (dimension_LoadBalancer, dimension_TargetGroup) (
sum_over_time(
aws_applicationelb_httpcode_target_5_xx_count_sum{
environment=~"$environment",
dimension_LoadBalancer=~"$dimension_LoadBalancer",
dimension_AvailabilityZone=""
}[5m]
)
)
/
clamp_min(
sum by (dimension_LoadBalancer, dimension_TargetGroup) (
sum_over_time(
aws_applicationelb_request_count_sum{
environment=~"$environment",
dimension_LoadBalancer=~"$dimension_LoadBalancer",
dimension_AvailabilityZone=""
}[5m]
)
),
1
)Target 5xx Count (5m) By Target Group:
sum by (dimension_LoadBalancer, dimension_TargetGroup) (
sum_over_time(
aws_applicationelb_httpcode_target_5_xx_count_sum{
environment=~"$environment",
dimension_LoadBalancer=~"$dimension_LoadBalancer",
dimension_AvailabilityZone=""
}[5m]
)
)Request Count (5m) By Target Group:
sum by (dimension_LoadBalancer, dimension_TargetGroup) (
sum_over_time(
aws_applicationelb_request_count_sum{
environment=~"$environment",
dimension_LoadBalancer=~"$dimension_LoadBalancer",
dimension_AvailabilityZone=""
}[5m]
)
)TargetResponseTime p95 By Target Group:
avg by (dimension_LoadBalancer, dimension_TargetGroup) (
aws_applicationelb_target_response_time_p95{
environment=~"$environment",
dimension_LoadBalancer=~"$dimension_LoadBalancer",
dimension_TargetGroup=~".+",
dimension_AvailabilityZone=""
}
)这 4 个 panel 的目的不是替代告警,而是:
rule 触发后
你能立刻看到是哪一个 target group 触发
以及它的 rate / request / target 5xx 三个量分别是多少4. Optional: Shorten LoadBalancer and TargetGroup Labels#
如果你不想在 Grafana 里看到这种完整值:
dimension_LoadBalancer="app/ping-uat-alb/d12dac00d9c29937"
dimension_TargetGroup="targetgroup/ping-ninedata/9f7333c03055bfe4"可以在 Prometheus / vmagent scrape yace 时做 metric_relabel_configs,只保留中间那段业务名:
scrape_configs:
- job_name: yace
static_configs:
- targets:
- yace:5001
metric_relabel_configs:
- source_labels: [dimension_LoadBalancer]
regex: '[^/]+/([^/]+)/[^/]+'
target_label: dimension_LoadBalancer
replacement: '$1'
action: replace
- source_labels: [dimension_TargetGroup]
regex: '[^/]+/([^/]+)/[^/]+'
target_label: dimension_TargetGroup
replacement: '$1'
action: replace效果:
app/ping-uat-alb/d12dac00d9c29937
-> ping-uat-alb
targetgroup/ping-ninedata/9f7333c03055bfe4
-> ping-ninedata这个改法只影响 label value,不会改 metric name。
适合:
想让 Grafana legend 更短
想让 dashboard 更容易读
不需要在面板里保留 AWS 生成的后缀 id注意:
如果两个不同 ALB 或 target group 的中间名字相同
relabel 后它们会看起来一样