这是一篇关于使用 Terraform 配置 AWS 资源并创建 Grafana 仪表盘来展示 AWS VPC 流量日志的文章,主要内容如下:
- 背景与目标:之前创建了展示 NAT Gateway 流量使用统计的 Grafana 仪表盘,但 Loki 处理原始日志和构建图表的时间较长,所以尝试使用 S3、Lambda 和 Promtail 以及 VictoriaLogs 来替代,创建新的 Grafana 仪表盘并迁移查询。
Terraform 配置:
- S3 和 Promtail Lambda:通过
alb-s3-logs
模块创建 S3 存储桶和 Lambda 函数,用于发送数据到 VictoriaLogs,包含创建存储桶、设置生命周期规则、阻止公共访问、创建存储桶策略和通知等步骤。 - VPC Flow Logs 模块:
terraform-aws-modules/vpc/aws
模块支持 VPC Flow Logs,但目前只设置了一个流向 Grafana Loki 的flow_log_destination_arn
,可以添加另一个aws_flow_log
资源来同时写入两个 S3 存储桶,还手动创建了流向 CloudWatch Logs 的 Flow Logs 用于验证查询结果。
- S3 和 Promtail Lambda:通过
创建 Grafana 仪表盘:
- NAT Gateway Total processed:在 Loki 和 VictoriaLogs 中分别编写查询语句来统计通过 NAT Gateway 的总流量,包括从 Kubernetes Pods 到 Internet 和从 Internet 到 Kubernetes Pods 的流量,并与 CloudWatch Logs Insights 和 Cost Explorer 进行验证。
- NAT Gateway Total OUT 和 IN processed:编写 Loki 和 VictoriaLogs 的查询语句来统计流量的方向,从 Internet 到 Kubernetes Pods 和从 Kubernetes Pods 到 Internet 的流量,并展示在 Grafana 仪表盘上。
- NAT Gateway Total processed bytes/sec:在 Loki 中使用
rate()
函数计算每秒的流量,在 VictoriaLogs 中使用math
管道来计算每秒的流量,并展示在 Grafana 仪表盘上。 - Kubernetes Pods IN From IP:编写 Loki 和 VictoriaLogs 的查询语句来统计接收来自 Internet 的流量最多的 Kubernetes Pods IP,并与 CloudWatch Logs Insights 进行验证。
- Kubernetes Pods IN From IP bytes/sec:编写 Loki 和 VictoriaLogs 的查询语句来获取流量的历史图片,并展示在 Grafana 仪表盘上,同时指出 Loki 和 VictoriaLogs 中
topk()
和limit
的问题。 - Kubernetes Pods IN by IP and Port:使用 Table 可视化类型编写 Loki 和 VictoriaLogs 的查询语句来显示 IP 和端口信息,并在 Grafana 仪表盘上进行展示和设置。
- 最终结果与性能比较:展示了 VictoriaLogs 和 Loki 在 Grafana 仪表盘上的结果以及 CPU 和内存资源使用情况,VictoriaLogs 在处理长时间范围的数据时表现更好。
- 后续计划:希望在日志字段中添加 Kubernetes Pods IP 和外部资源地址的字段,以便进行更长期的采样,可以尝试使用
vector.dev
来收集和处理日志。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。