环境说明

1. windows server 2012 R2 64位

2. log4net.ElasticSearch

3. kibana-5.5.0-windows-x86.zip

架构说明

数据采集有两种方案Beats或Logstash,Logstash支持很多种数据源,有log4j但没有log4net,本想使用log4net.redis+redis+logstash的方式实现日志收集。无意间发现了log4net.ElasticSearch可以直接写日志到ES,经过测试非常好用、方便。

log4net.ElasticSearch is a module for the log4net library to log messages to the ElasticSearch document database. ElasticSearch offers robust full-text searching an analyzation so that errors and messages can be indexed quickly and searched easily.

Features:

  • Supports .NET 4.0+
  • Easy installation and setup via Nuget
  • Full support for the Elasticsearch _bulk API for buffered logging

安装kibana

1.下载kibana

首先下载windows版本的kibana文件,地址:https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-windows-x86.zip,解压到E:\elk\kibana目录

2.配置Kibana

打开配置文件E:\elk\kibana\config\kibana.yml,修改server.host和server.host,如下:

server.host: "192.168.5.175"

elasticsearch.url: "http://192.168.5.175:9200"

3.运行Kibana

命令行下执行E:\elk\kibana\bin\kibana.bat文件

使用log4net.ElasticSearch

1.安装log4net.ElasticSearch

log4net.ElasticSearch可以通过Nuget安装,要注意保持和正在使用的log4net版本一致

Install-Package log4net.ElasticSearch -Version 2.3.

log4net.ES.Example是一个测试Demo,修改配置后就能使用。

2.配置log4net.config文件

 <!-- Default style appender. You can change the name but make sure you reference it corectly. Change the type if you're using .NET 4.0 -->
<appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" />
</layout> <!-- You can also use scheme, user, password here if you need https and http authentication, see the docs -->
<connectionString value="Server=192.168.5.175;Index=log;Port=9200;rolling=true"/> <!-- false means do not eject older messages when the buffer is full, try to keep them all. -->
<lossy value="false" /> <!-- Any buffer > 1 will use the Elasticsearch _bulk API. Tune as needed depending on how high volume your app is and how fast you want messages to show up in ES -->
<bufferSize value="1" /> <!-- When an event comes in that matches or is above the treshold, the buffer will flush. I don't reccommend setting to "ALL" or it will defeat the purpose of having a buffer -->
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ALL"/>
</evaluator>
</appender>
Index=log:索引的名字
rolling=true:每天生成一个索引,比如log-2017.07.13
bufferSize :批量提交到ES,这里为了演示设置成1
    <!-- Common to all log4net configs. See log4net docs for more details  -->
<root>
<level value="ALL"/>
<appender-ref ref="ElasticSearchAppender" />
</root>

2.写入日志

运行测试程序,即可写入几条日志到ES中。

--查询索引列表
http://192.168.5.175:9200/_cat/indices
返回值:
yellow open log-2017.07.13 UBT3YG2qQpWkfJKRNw-XCQ 5 1 1 0 16.5kb 16.5kb
yellow open log-2017.07.07 pMXjGKkiRRSsrBdl5qNlNw 5 1 4 0 62.6kb 62.6kb --查询索引内容
http://192.168.5.175:9200/log-2017.07.13/_search?q=*
返回值:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "log-2017.07.13",
"_type": "logEvent",
"_id": "AV05k9nbXp-PycfFP2XN",
"_score": 1,
"_source": {
"timeStamp": "2017-07-13T01:32:53.9948595Z",
"message": "System Error",
"messageObject": {},
"exception": {
"Type": "System.Exception",
"Message": "Something terrible happened.",
"HelpLink": null,
"Source": null,
"HResult": -2146233088,
"StackTrace": null,
"Data": {},
"InnerException": null
},
"loggerName": "log4net.ES.Example.Program",
"domain": "log4net.ES.Example.exe",
"identity": "",
"level": "ERROR",
"className": "log4net.ES.Example.Program",
"fileName": "F:\\soft\\elk\\log4net.ES.Example-master\\log4net.ES.Example\\Program.cs",
"lineNumber": "18",
"fullInfo": "log4net.ES.Example.Program.Main(F:\\soft\\elk\\log4net.ES.Example-master\\log4net.ES.Example\\Program.cs:18)",
"methodName": "Main",
"fix": "LocationInfo, UserName, Identity, Partial",
"properties": {
"log4net:Identity": "",
"log4net:UserName": "BJ-BL\\Administrator",
"log4net:HostName": "BJ-BL",
"@timestamp": "2017-07-13T01:32:53.9948595Z"
},
"userName": "BJ-BL\\Administrator",
"threadName": "1",
"hostName": "BJ-BL"
}
}
]
}
}

日志字段非常全。。。。很赞

配置kibana

1.创建索引模式

打开kibana,http://192.168.5.175:5601。

点击Management=>Index Patterns=>Create Index Pattern,输入log-*就可以匹配上log-yyyy.mm.dd的索引了。

2.查询日志

点击Discover,选中log-*索引,就可以查询日志了。


总结

ELK日志框架已经搭建完成,这里的L变成了Log4net,ES和Kibana的熟练使用还需要时间去积累。Logstash的插件功能真是强大,也写了几个简单的配置文件实现输入输出的转化,如下:

input {
redis {
host => "192.168.5.175"
port => 6379
data_type => "list"
key => "logstash"
codec=> json
} }
output {
elasticsearch {
hosts => ["192.168.5.175:9200"]
}
stdout { codec => rubydebug }
}

logstash-redis2es.conf

input { stdin { } }
output {
elasticsearch { hosts => ["192.168.5.175:9200"] }
stdout { codec => rubydebug }
}

logstash-simple.conf

input { stdin { } }
output {
elasticsearch { hosts => ["192.168.5.175:9200"] }
file{path=>[
"stdin-log.txt"
]}
stdout { codec => rubydebug }
}

logstash-stdin2file.conf

input { stdin { } }
output {
redis {
host => "192.168.5.175"
port => 6379
data_type => "channel"
key => "logstash_list_0"
} stdout { codec => rubydebug }
}

logstash-stdin2redis.conf

用到的参考资料如下:

1.https://www.digitalocean.com/community/tutorials/how-to-use-kibana-dashboards-and-visualizations#kibana-dashboard

2.https://www.elastic.co/guide/en/logstash/current/plugins-inputs-redis.html#_description_30\

3.https://www.elastic.co/products/kibana,需要一行一行仔细看

4.ELK部署详解,CentOS7环境

5.logstash配合redis实例

6.转:ElasticSearch 索引查询使用指南——详细版

ELK日志框架(2):log4net.ElasticSearch+ Kibana实现日志记录和显示的更多相关文章

  1. 快速搭建应用服务日志收集系统(Filebeat + ElasticSearch + kibana)

    快速搭建应用服务日志收集系统(Filebeat + ElasticSearch + kibana) 概要说明 需求场景,系统环境是CentOS,多个应用部署在多台服务器上,平时查看应用日志及排查问题十 ...

  2. 日志框架之2 slf4j+logback实现日志架构 · 远观钱途

    如何从缤纷复杂的日志系统世界筛选出适合自己的日志框架以及slf4j+logback的组合美妙之处?此文可能有帮助 logback介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网 ...

  3. syslog+rsyslog+logstash+elasticsearch+kibana搭建日志收集

    最近rancher平台上docker日志收集捣腾挺久的,尤其在配置上,特写下记录 Unix/Linux系统中的大部分日志都是通过一种叫做syslog的机制产生和维护的.syslog是一种标准的协议,分 ...

  4. elasticsearch+kibana+fluentd 日志搜集集群搭建

    使用fluentd来搜集Nginx日志,准备3台服务器,列表如下 node1 elasticsearch/kibana/td-agent node2 td-agent/nginx node3 td-a ...

  5. Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器

    一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的 ...

  6. springboot的日志框架slf4j (使用logback输出日志以及使用)

    1.为什么使用logback? ——在开发中不建议使用System.out因为大量的使用会增加资源的消耗.因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序. ...

  7. 基于logstash+elasticsearch+kibana的日志收集分析方案(Windows)

    一 方案背景     通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.开源实时日志分析ELK平台能够完美的 ...

  8. logstash+elasticsearch+kibana搭建日志收集分析系统

    来源: http://blog.csdn.net/xifeijian/article/details/50829617 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散 ...

  9. logstash+elasticsearch+kibana管理日志(安装)

    logstash1.先安装jdk2.wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz tar -xzvf ...

随机推荐

  1. OAuth 2.0 / RCF6749 协议解读

    OAuth是第三方应用授权的开放标准,目前版本是2.0版,以下将要介绍的内容和概念主要来源于该版本.恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 . 四种角色定义: R ...

  2. 2017-5-22 ASP六大 内置对象

    ASP内置对象:提供内建对象,这些对象使用户更容易收集通过浏览器请 求发送的信息.响应浏览器以及存储用户信息(如用户首选项). 1.Request  --- 获取请求对象 获取通过地址栏传值过来的对象 ...

  3. C语言之字符串

    什么是字符串:使用双引号包含的字符序列. 简单的字符串"hello world" 一个'h'是一个字符 很多个字符组合在一起就是字符串了 字符串与字符数组 在C语言中没有专门的字符 ...

  4. Js实现京东无延迟菜单效果(demo)

    一个端午节,外面人山人海,又那么热,我认为宅在家里看看慕课网,充实自己来的实际... 这是一个js实现京东无延迟菜单效果,感觉很好,分享给大家... 1.开发基本的菜单结构 2.开发普通的二级菜单效果 ...

  5. jQuery UI 入门之实用实例分享

    jQuery UI 入门 jQuery UI 简介 jQuery UI 是一个建立在 jQuery JavaScript 库上的小部件和交互库,您可以使用它创建高度交互的 Web 应用程序.无论您是创 ...

  6. 跟着刚哥深入学maven

    前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下. 一.为什么使用Maven这样的构建工具[why] ① 一个项目就是一个工程 如果项目非常庞大,就 ...

  7. C. Friends

    C. Friends 题意 对于任一点,求到此点距离不超过6的节点数. 分析 第一次dfs,形成一个以 1 为根的有向树,设 down[i][j] 为以i为根节点,距离 i 点距离不超过 j 的节点数 ...

  8. javascript痛点之二作用域链

    1.执行环境(执行上下文) 先看段代码 var a = 10; var b = 20; function cc(){ var c = 30; alert("b="+b); } cc ...

  9. DDD理论学习系列(5)-- 统一建模语言

    DDD理论学习系列--案例及目录 1.引言 上一节讲解了领域模型,领域模型主要是将业务中涉及到的概念以面向对象的思想进行抽象,抽象出实体对象,确定实体所对应的方法和属性,以及实体之间的关系.然后将这些 ...

  10. 玩转nodeJS系列:使用cluster创建nodejs单机多核集群(多进程)

    前言: nodejs提供了cluster集群(支持端口共享的多进程),cluster基于child_process,process二次封装,方便我们使用该功能实现单机nodejs的web集群. 1.c ...