Angular 错误日志发送到elasticsearch

ryhaxcpt  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(624)

我有一个angular项目版本10.0.2,我想把开发人员控制台上的所有错误记录到elastic search中。当我在全局错误处理程序中发现一个错误时,我的内部处理程序是这样的。

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包,然后将所有错误从angular发送到elastic,然后我可以在kibana上看到所有这些错误
谢谢你的建议

djp7away

djp7away1#

这个 @elastic/elasticsearch npm包是nodejs唯一的包,所以你不能在你的前端应用程序中使用它。原因是,它不安全(实际上甚至不受支持)。
不建议对es集群提供公共ish访问,以便人们可以检查es查询。尤其是像

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

因为这看起来像是一个活的es示例,可能会或可能不会受到恶意攻击的保护 _search 可能导致集群崩溃的查询,甚至 DELETE 可能会完全清除日志的呼叫。
您可以做的是启动一个小型nodejs后端日志转发服务(gcp cloud function、aws lambda、netlify……),它将利用 @elastic/elasticsearch 包,但坐在一个你可以控制的网关后面。然后你就可以发邮件了 POST /../_doc 将有效载荷转发给es的服务。

相关问题