65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2019 年 2 月 25 日

CPOL

2分钟阅读

viewsIcon

8223

在本教程中,我们将看到使用 Microsoft Enterprise Logging 进行 JSON 格式日志记录的示例,将日志发送到 Elasticsearch,并使用 Kibana 查看我们的日志。

引言

Elasticsearch 是当今最好的开源搜索引擎之一,具有出色的 NoSQL 文档数据库功能,可以成为应用程序日志记录的绝佳工具。

今天我们将学习如何将日志写入滚动文件,使用 Filebeat 将日志发送到 Elasticsearch,并使用 Kibana 以美观的方式查看我们的日志。

必备组件

  • 使用 Microsoft Enterprise Library 进行日志记录(我们将在此示例中使用它,但也可以使用其他库,例如 NLOG)
  • Elasticsearch 集群已安装并准备就绪
  • Filebeat + Kibana 已安装(可选:Elasticsearch 'head' Chrome 扩展程序)

议程

  1. entlib.config 中添加新的监听器
  2. 创建自定义格式化程序以写入 JSON 日志
  3. 配置 Filebeat 将日志发送到 Elasticsearch
  4. 在 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="{&#34;Timestamp&#34;:&#34;{timestamp(MM/dd/yyyy HH:mm:ss.fff)}&#34;, 
 &#34;Message&#34;:&#34;{formatForJsonValue(message)}&#34;, 
 &#34;Category&#34;:&#34;{category}&#34;, &#34;Machine&#34;:&#34;{machine}&#34;, 
 &#34;Process Id&#34;:&#34;{processId}&#34; {dictionary(, &#34;{key}&#34;: &#34;{value}&#34;)} }"
  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 日:初始版本
© . All rights reserved.