如何从 AngularJS 应用程序登录到 Google Cloud Logging?

Posted

技术标签:

【中文标题】如何从 AngularJS 应用程序登录到 Google Cloud Logging?【英文标题】:How can I log to Google Cloud Logging from an AngularJS application? 【发布时间】:2016-12-19 21:36:06 【问题描述】:

我希望能够在 Google Cloud Log 查看器中查看客户端错误。是否可以从 AngularJS 应用程序创建日志条目,如果可以,如何创建?

【问题讨论】:

不知道为什么 Google 没有将 nodejs stackdriver 插件移植到客户端。如果有人获得了使用 webpack 和 typescript 的 browserify 节点堆栈驱动程序,请发表评论! 【参考方案1】:

Stackdriver Error Reporting 专为应用错误而设计,我鼓励您使用它而不是 Stackdriver Logging 来报告错误。

对于客户端错误报告,您需要使用带有 API 密钥的 HTTP report API。

我编写了一个 javascript 库来帮助您从客户端调用此端点:https://github.com/GoogleCloudPlatform/stackdriver-errors-js

我还没有使用 Angular 应用程序对其进行测试(但有 a tracking issue 用于此)。它被标记为实验性的,但应该已经相当稳定了。如果您遇到问题或想提供帮助,欢迎您的贡献

【讨论】:

通过stackdriver日志报错和“Stackdriver Error Reporting”有什么区别? @y3sh Stackdriver Error Reporting 是一个崩溃报告解决方案:它不仅仅是一个条目列表,而是有意义地分组错误并跟踪每个组的计数。【参考方案2】:

如果您真的想在日志查看器中查看错误,在 GCE 或 AWS EC2 上执行此操作的方法是安装 Stackdriver Logging agent 或者

将您的日志消息以 JSON 格式写入端口 24224(请参阅in_forward documentation)

将您的日志写入磁盘并告诉代理查看这些文件(请参阅in_tail documentation)。

转发端口已在代理中预先配置。如果您选择使用日志文件,则必须编写自己的配置,将代理指向您的日志文件。

以上两个都是服务器端的,因此您的客户端代码需要以某种方式将错误传输到服务器。也可以向客户端公开转发端口,但请参见下文。

另一种选择是使用Stackdriver Error Reporting API 并从服务器或直接从您的客户端代码发布到那里。这样错误就会出现在Stackdriver Error Reporting console 而不是日志查看器中。

请记住,让客户端直接写入代理端口或错误报告 API 本质上是不安全的,因为相关的端口/API 密钥必须暴露在互联网上(因此条目可能被欺骗和攻击者例如,可以用完您的配额)。

感谢您使用 Google Stackdriver。

【讨论】:

感谢您的回答。我使用了一个服务器解决方案,在该解决方案中创建了一个用于日志记录的 REST API,部署到代理已经运行的 node.js AppEngine 实例。然后只需以 Stackdriver JSON 日志条目格式写入 /var/log/app_engine/custom_logs/client.log.json 即可。 你是对的,这是一个解决方案。我针对您的问题发布了一个替代答案,可能会帮助您摆脱此代理 AppEngine 实例。

以上是关于如何从 AngularJS 应用程序登录到 Google Cloud Logging?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PostgreSQL 将数据从 AngularJS 前端传递到 Nodejs 后端?

如何获取登录用户 SpringSecurity + AngularJS 的用户信息

如何在 Angularjs 中使用 3rd 方登录来处理身份验证

如何使用angularjs登录到spring security

jHipster - 即使从实体中删除权限,AngularJS 路由也会重定向到登录

如何从渲染的html向angularjs应用程序添加初始数据