我有一个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上看到所有这些错误
谢谢你的建议
1条答案
按热度按时间djp7away1#
这个
@elastic/elasticsearch
npm包是nodejs唯一的包,所以你不能在你的前端应用程序中使用它。原因是,它不安全(实际上甚至不受支持)。不建议对es集群提供公共ish访问,以便人们可以检查es查询。尤其是像
因为这看起来像是一个活的es示例,可能会或可能不会受到恶意攻击的保护
_search
可能导致集群崩溃的查询,甚至DELETE
可能会完全清除日志的呼叫。您可以做的是启动一个小型nodejs后端日志转发服务(gcp cloud function、aws lambda、netlify……),它将利用
@elastic/elasticsearch
包,但坐在一个你可以控制的网关后面。然后你就可以发邮件了POST /../_doc
将有效载荷转发给es的服务。