• ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理


    ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理

    ElasticSearch简介

    ElasticSearch是一个基于Lucene的搜索服务器。

    它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

    Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。

    希望我们的搜索解决方案要快,希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。

    ElasticSearch的Schema与其它DB比较:

    ElasticSearch三方访问方式:

    环境是CentOS6.4,安装方法有好几种,在这儿我们直接从官网下载包, 1.71版解压后,进入目录执行:

    bin/elasticsearch

    检查服务是否正常工作:

    curl -X GET http://localhost:9200/

    elasticsearch默认是9200端口,返回一个JSON数据,有版本说明运行正常。

    elasticsearch的伸缩性很高,如下示例数据分片:

    安装前端elasticsearch-head

    elasticsearch/bin/plugin –install  mobz/elasticsearch-head

    打开 http://localhost:9200/_plugin/head/,可以看如下UI,此处我们配置IP是192.168.0.103,它多语言版,已经自动识别为中文UI

     

     在这儿我们还安装一个管理结点的前端 bigdesk,  安装方式类似,也是推荐插件模式:

    $ ./bin/plugin -install lukas-vlcek/bigdesk/<bigdesk_version>

    http://192.168.0.103:9200/_plugin/bigdesk/ 之后UI是这样的:

    还有其他的前端项目,在这儿我们不一 一 描述,其目的为了更好的管理ElasticSearch集群。

    ElasticSearch与Asp.net应用程序集成

    好了,我们在Asp.net项目中已经安装Elmah,现在我们安装 Elmah.Elasticsearch,这里是1.1.0.27:

    PM> Install-Package Elmah.Elasticsearch

    web.config中配置节,我们配置index名称:elmahCurrent

    <elmah>
       <!--
           See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
           more information on remote access and securing ELMAH.
       --><security allowRemoteAccess="true" />
       <errorLog type="Elmah.Io.ElasticSearch.ElasticSearchErrorLog, Elmah.Io.ElasticSearch" connectionStringName="ElmahIoElasticSearch" defaultIndex="elmahCurrent" />
    </elmah>
    

    连接字符串增加

    <connectionStrings>
      <add name="ElmahIoElasticSearch" connectionString="http://192.168.0.103:9200/" />
    </connectionStrings>
    

    让我们来访问一个不存在http://localhost:1960/KK webpage  故意引发异常,然后我们到前端head里可以看到:

    完整记录JSON数据,当然也可以使用查询方式。

    接下来,让我们来配置NLOG的日志也输出到ElasticSearch,先安装包 NLog.Targets.ElasticSearch 1.0.14

    PM> Install-Package NLog.Targets.ElasticSearch

    对应的NLog.config文件是这样的,看加粗字体:

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <extensions>
        <add assembly="NLog.Targets.ElasticSearch"/>
      </extensions>
      <targets async="true">
    <strong>    <target name="elastic" xsi:type="ElasticSearch" uri="http://192.168.0.103:9200/"  index="DevLogging" documentType="logevent"></strong>
        </target>
        <target name="asyncFile" xsi:type="AsyncWrapper">
          <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
           layout="${longdate} ${logger} ${uppercase:${level}} ${message} ${exception:format=ToString,StackTrace,method:maxInnerExceptionLevel=5:innerFormat=ToString}" />
        </target>
      </targets>
      <rules>
        <logger name="*" minlevel="Trace" writeTo="f" />
       <strong> <logger name="*" minlevel="Trace" writeTo="elastic" /></strong>
      </rules>
    </nlog>
    

    这样我们可以把非异常的日志自由输出到ElasticSearch中,例如我们记录webapi请求的日志:

    devlogging是我们在配置文件已配置过的index名称。 我们同时使用NLOG记录了文件日志。

    搜索:

    基于REST方式请求按ID查询:

    http://localhost:9200/<index>/<type>/<id>.

    如:

    http://192.168.0.103:9200/devlogging/logevent/AU9a4zu6oaP7IVhrhcmO

    还有一些搜索示例如下:

    //索引
    $ curl -XPUT http://localhost:9200/twitter/tweet/2 -d '{
        "user": "kimchy",
        "post_date": "2009-11-15T14:12:12",
        "message": "You know, for Search"
    }'



    //lucene语法方式的查询
    $ curl -XGET http://localhost:9200/twitter/tweet/_search?q=user:kimchy




    //query DSL方式查询
    $ curl -XGET http://localhost:9200/twitter/tweet/_search -d '{
        "query" : {
            "term" : { "user": "kimchy" }
        }
    }'

    //query DSL方式查询
    $ curl -XGET http://localhost:9200/twitter/_search?pretty=true -d '{
        "query" : {
            "range" : {
                "post_date" : {
                    "from" : "2009-11-15T13:00:00",
                    "to" : "2009-11-15T14:30:00"
                }
            }
        }
    }'

    我们可以配置多个应用程序的日志统一输出到ES中,以便于我们查询与分析。

  • 相关阅读:
    rider中的gitbash如何从上次退出的目录启动
    docker swarm外部验证负载均衡时不生效
    css做一个可以变成关闭图标的菜单按钮
    mac外接键盘HOME,END键问题
    kubernetes实践录 使用Baget部署一个私有Nuget仓库
    C#中正确的实现IDisposable接口以释放非托管资源
    网络磁盘nfs使用笔记
    EFCore分组查询(GroupBy)后获取第一个元素
    Angular踩坑ExpressionChangedAfterItHasBeenCheckedError异常
    写了个适用于vscode的minio图床客户端插件 vscodeminiopicman
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/8548437.html
Copyright © 2020-2023  润新知