使用 Elasticsearch & Enterprise Library 进行日志记录





4.00/5 (1投票)
在本教程中,我们将看到使用 Microsoft Enterprise Logging 进行 JSON 格式日志记录的示例,将日志发送到 Elasticsearch,并使用 Kibana 查看我们的日志。
引言
Elasticsearch 是当今最好的开源搜索引擎之一,具有出色的 NoSQL 文档数据库功能,可以成为应用程序日志记录的绝佳工具。
今天我们将学习如何将日志写入滚动文件,使用 Filebeat 将日志发送到 Elasticsearch,并使用 Kibana 以美观的方式查看我们的日志。
必备组件
- 使用 Microsoft Enterprise Library 进行日志记录(我们将在此示例中使用它,但也可以使用其他库,例如 NLOG)
- Elasticsearch 集群已安装并准备就绪
- Filebeat + Kibana 已安装(可选:Elasticsearch 'head' Chrome 扩展程序)
议程
- 在 entlib.config 中添加新的监听器
- 创建自定义格式化程序以写入 JSON 日志
- 配置 Filebeat 将日志发送到 Elasticsearch
- 在 Kibana 中查看日志
1. 在 entlib.config 中添加新的监听器
创建类型为 RollingFlatFileTraceListener 的新监听器。
将其命名为 Json TraceListener。
使用新的格式化程序 Json Text Formatter。
确保标题和页脚为空。
示例
<add fileName="D:\Logs\JsonLogs\rolling.log" footer=""
     formatter="Json Text Formatter" header=""
     rollFileExistsBehavior="Increment" rollInterval="Day" rollSizeKB="50000"
     timeStampPattern="yyyy-MM-dd" 
     listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.
     RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, 
     Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
     traceOutputOptions="None" filter="All" 
     type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, 
     Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, 
     PublicKeyToken=31bf3856ad364e35"
     name="Json TraceListener" />

2. 创建自定义格式化程序以写入 JSON 日志
Filebeat 默认以 JSON 格式发送日志,根据换行符 (\n) 分隔每个写入的日志。
在这种情况下,我们希望将每个日志写入不同的日志,并在写入每一行时删除所有空格字符。
我们将通过创建新的格式化程序来实现它,该格式化程序将包含用于清理空格的新方法
<add template="{"Timestamp":"{timestamp(MM/dd/yyyy HH:mm:ss.fff)}", 
 "Message":"{formatForJsonValue(message)}", 
 "Category":"{category}", "Machine":"{machine}", 
 "Process Id":"{processId}" {dictionary(, "{key}": "{value}")} }"
  type="Infrastructure.Logger.Formatters.CustomTextFormatter, Infrastructure.Logger"
  name="Json Text Formatter" />
CustomTextFormatter 继承自 Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter 并实现 formatForJsonValue 方法

有关自定义格式化程序的更多说明,请查看 此链接。
3. 配置 Filebeat 将日志发送到 Elasticsearch
在 filebeat.yml 中,添加路径和输出如下
filebeat.prospectors:
- paths:
   - E:\temp\logs\*.log
  input_type: log
  json.keys_under_root: true
  json.add_error_key: true   
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]
  index: "bingo-logs-%{[beat.version]}-%{+yyyy.MM.dd}"

运行 Filebeat 后,我们将能够看到发送到 Elasticsearch 的日志

4. 在 Kibana 中查看日志
转到 Kibana → 管理 → 索引模式 → 创建索引模式
并添加与您的 filebeat.yml 配置中相同的索引模式。

转到 发现 → 选择您的新索引。
创建您自己的自定义视图(保存您的视图以供将来使用)

历史
- 2019 年 2 月 25 日:初始版本

