关于GCP Logging:如何配置每日推送Compute Engine实例活动邮件通知
GCP Compute Engine 实例活动每日邮件推送实现方案
核心依赖组件
全程使用GCP原生服务即可实现,无需额外第三方工具:
- Cloud Audit Log:存储CE实例所有启停操作的审计日志
- Cloud Scheduler:配置每日定时触发任务
- Cloud Function:执行数据拉取、清洗、汇总、发邮件的全流程逻辑
- Cloud Monitoring:补充计算实例累计运行时长,避免审计日志遗漏
分步实现流程
1. 前置权限与日志配置
- 确认项目已开启Compute Engine的Admin Activity审计日志(默认开启,无需额外操作)
- 给后续创建的Cloud Function服务账号分配3个最小权限:
roles/logging.viewer(日志读取)、roles/monitoring.viewer(监控指标读取)、roles/compute.viewer(实例基础元数据读取)
2. 配置定时触发规则
在Cloud Scheduler中创建cron任务:
- 触发频率设置为每日凌晨1点,cron表达式为
0 1 * * *,时区选择你所在的对应时区即可 - 触发目标选择后续要创建的Cloud Function,HTTP调用即可
3. 编写Cloud Function数据处理逻辑
核心逻辑分为3块:
3.1 拉取前一日实例启停日志
用Cloud Logging的过滤规则筛选目标事件,示例过滤语句:
resource.type="gce_instance" timestamp>="YYYY-MM-DDT00:00:00Z" timestamp<="YYYY-MM-DDT23:59:59Z" protoPayload.methodName=("v1.compute.instances.start" OR "v1.compute.instances.stop")
遍历返回的日志条目,按实例ID分组,匹配每个实例的启停事件对,计算单次运行时长;如果实例到前一天结束仍在运行,截止到当日24点计算运行时长。
3.2 校验累计运行时长
调用Cloud Monitoring的compute.googleapis.com/instance/uptime指标,拉取每个实例前一日的累计运行时长,和日志匹配得到的时长做交叉校验,避免日志丢失导致数据不准。
3.3 汇总输出明细字段
最终每条实例活动明细包含以下字段:
- 实例名称、实例ID、所在可用区
- 启动时间、停止时间
- 单次运行时长、当日累计运行时长
- 启停操作人(可选,从审计日志的
protoPayload.authenticationInfo.principalEmail字段提取)
4. 邮件推送实现
可以直接用Python标准库smtplib实现邮件发送,无需开通额外邮件服务:
- 把汇总好的明细整理成HTML表格嵌入邮件正文,超出时长阈值的实例可以用红色高亮标注
- 支持附加CSV格式的明细文件,方便后续归档分析
- 收件人列表直接写在函数环境变量里即可,方便动态修改
可选优化项
- 把历史明细数据同步写入BigQuery,方便后续做长期成本核算、资源利用率分析
- 新增异常告警逻辑:如果有实例连续运行超过预设阈值,在邮件里做重点标注提醒
- 配置函数错误告警:如果Cloud Function执行失败,自动触发告警通知管理员排查
内容的提问来源于stack exchange,提问作者Deeksha
相关产品推荐
相关产品推荐

