1、背景
前阵子有园友留言,提到日志相关的东西,同时,最近圈子里也有提到日志这个东西。一个充分、集中的统一日志平台还是很有必要的,否则系统出问题了只能靠猜或者干瞪眼。何谓充分,日志记录满足最低要求、出问题方便定位、可追溯、可追责,最重要的,方便扯皮;何谓集中,各子系统或服务日志都怼到一个地方,想看日志直接去日志平台去看,且方便检索、聚类,而不是需要每个服务、每台服务器逐个远程去翻扯。这里,就结合项目实践,聊下怎么方便、快捷、低成本的实现统一日志平台。
2、技术栈
.NET CORE + log4net + EFK
.NET CORE自不必说,系统基于.NET CORE的;log4net用于将日志输出到服务器本地;EFK中E(ES)用于存储日志,F(filebeat)用于搜集本地日志发送到远程ES,K(Kibana)用于日志检索。
其中.NET CORE、log4net部分均可自由切换,是系统、能把日志输出到服务器本地即可;EFK则通用。
选择EFK是因为之前监控、PCI认证已经搭建好了ELK环境,这里就直接使用不再重复建设其他平台。
3、log4net配置
红框圈起来部分,[%d]设置输出行首日期部分被中括号([])包围,具体原因我们后文赘述。log4net与.NET CORE的集成很多资料自行查阅。设置完毕,日志本地输出类似如下:
4、filebeat配置
服务器上安装完成filebeat之后,编辑/etc/filebeat/filebeat.yml配置文件:
这里开启了多行日志匹配模式,正如上图的日志输出截图,实际当中一条日志记录占用多行再正常不过,filebeat不做任何设置则会每一行作为作为一条被收割,检索、分析、存储都是个问题。正则表达式代表匹配方括号括起来的时间,比如[2020-08-15 12:00:00],从这里开始只到下一个匹配项之间的部分作为该条日志记录被发送到ES。配置完毕,重启filebeat服务。
5、kibana中效果