【问题标题】:angular errors log send to elasticsearch角度错误日志发送到 elasticsearch
【发布时间】:2021-03-26 21:00:35
【问题描述】:

我有一个 Angular 项目版本 10.0.2 我想将开发人员控制台上的所有错误记录到弹性搜索。 当我在全局错误处理程序上发现错误时,我的处理程序内部是这样的。

export class GlobalErrorHandlerService extends ErrorHandler {
    constructor(private log: LogService) {
        super();
    }
    handleError(error: any) {
        var client = new Client();
        if (error instanceof HttpErrorResponse) {
            this.log.level = LogLevel.Error;
            this.log.error("API/Back-End Proccess request error   " + JSON.stringify(error), JSON.stringify(error));
        }
        else {
            this.log.level = LogLevel.Warn;
            this.log.warn("Client side error " + JSON.stringify(error), JSON.stringify(error));
        }
        this.log.publishers.push(error);
    }
} 

LogService 是我的自定义日志服务。但我可以改变它来捕捉错误 我像这样发送弹性。

entry: 包含错误信息

log(entry: LogEntry): Observable<boolean> {

        var headers = new HttpHeaders();
        const date = moment();

        let body = {
            "@timestamp": date,
            "index": "clientapplication",
            "body": {
                "entry": entry,
                "date": date
            },
            "user": {
                "fullname": "ahmetu",
                "userrecordno": "190909"
            }
        }

        headers.append('Content-Type', 'application/json');
        headers.append('Accept', 'application/json');
        return this.hbhttp.post(`${this.location}/hbizclient/_doc`, body, headers)
    }

我在log.elastic.ts 做了这个操作 我写了一个自定义的日志记录操作。我的文件夹结构如下

实际上我可以记录所有错误,但我只是想学习。我如何使用 Elasticsearch 自己的 npm 包然后将所有错误从角度发送到弹性然后我可以在 kibana 上看到所有这些

感谢您的建议

【问题讨论】:

    标签: javascript angular elasticsearch logging error-handling


    【解决方案1】:

    @elastic/elasticsearch npm 包是 NodeJS-only 包,因此您无法在前端 Angular 应用程序中使用它。原因是,它不安全(实际上甚至不支持)。

    不建议授予对 ES 集群的公开访问权限,以便人们可以检查 ES 查询。特别是。像

    this.hbhttp.post(`${this.location}/hbizclient/_doc`...
    

    因为它看起来像一个实时 ES 实例,它可能会或可能不会受到可能导致集群崩溃的恶意 _search 查询的保护,甚至可能完全清除日志的 DELETE 调用。

    您可以做的是启动一个小的 nodejs 后端日志转发服务(GCP 云功能、AWS Lambda、Netlify 等),该服务将利用 @elastic/elasticsearch 包,但位于网关后面,您可以控制。然后,您将您的 POST /../_doc 发送到该服务,该服务会将有效负载转发到 ES。

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      相关资源
      最近更新 更多