- 公司拥有付费的Gsuite帐户,该帐户拥有托管在公司Google驱动器上的所有电子表格。
- 每个员工都有自己的“用户”电子表格,该电子表格从公司Gsuite帐户共享到员工的个人Gmail帐户中。
- 每个用户电子表格都有一个容器绑定脚本,可以访问一个中央库脚本。
- 库脚本允许我们集中更新脚本,并且对每个用户的影响是立即的。 它还防止用户看到中央脚本并干预它。
- 每个用户容器绑定脚本都有可安装的触发器,这些触发器由公司帐户授权,因此运行的代码具有完全的权限来执行所需的操作。
这个设置对我们来说已经相当好用,大约有40个用户在使用。然而,这种设置的缺点是,由于所有脚本活动都是通过触发器由公司账户运行的,所以所有用户的活动都记录在单个公司账户下,并受到应用程序脚本服务器针对单个用户的配额限制。只要我们的脚本运行方式高效,这对我们还不是太大的问题。我尝试将该项目部署为我们公司的 Web 应用程序,但似乎没有一种好的方法来控制/限制用户访问中央文件。换句话说,如果该项目作为每个用户安装的 Web 应用程序运行,那么每个用户都需要访问项目在后台使用的所有中央电子表格。我们不想要这样。
因此,基于上述背景,我的问题是:如何高效地跟踪应用程序脚本的活动,以了解我们离达到服务器配额的限制有多近,并确定需要优化哪些函数?
我开始通过在“活动日志”电子表格中每次调用脚本时写入条目来跟踪项目活动。它记录了调用的函数是什么以及用户是谁,并且有一个开始时间和结束时间条目,因此我可以看到唯一执行花费了多长时间以及哪些失败了。这非常好,因为我可以实时查看项目活动并使用电子表格图表工具绘制图表。但问题在于,每次执行脚本都需要两个写操作:一个用于初始化,另一个用于完成。由于脚本每次在用户编辑其电子表格时都会被执行,因此在高流量期间,活动日志电子表格变得不可访问,并且出现错误。
因此,我已经过渡到通过将每个脚本文件连接到单个Google Cloud Platform(GCP)项目并使用Logger API来跟踪活动。写入日志比写入电子表格条目更有效,因此高流量错误几乎不会发生。现在的问题是,GCP日志浏览器不像电子表格那样易于使用,我无法绘制日志图表或总结活动以查看我们的服务器配额状况。
我花了一些时间来尝试自动从GCP导出日志,以便能够实时处理日志。我知道如何将日志下载为CSV文件,然后将其导入Google电子表格并进行所需的计算和绘图,但这是一个手动过程,并且无法显示实时数据。
我还发现如何通过设置“接收器”来将日志从GCP流式传输到“存储桶”中,理论上可以被其他服务读取。这让我很兴奋地尝试使用Google Data Studio,我看到它能够使用Google Cloud Storage“存储桶”作为数据源。不幸的是,Google Data Studio只能读取云存储中的CSV文件,而不能读取我的“接收器”在日志“存储桶”中生成的JSON文件。
所以我遇到了瓶颈。我在这里错过了什么吗?我只是想显示我们应用程序项目上的当前活动,以便能够识别失败的执行、查看总处理时间并按用户或函数对日志进行排序,以便快速确定需要优化脚本的位置。