ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

導讀 ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。

Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。 建立一個網站或應用程序,並要添加搜索功能,令我們受打擊的是:搜索工作是很難的。希望我們的搜索解決方案要快,希望有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠一臺開始並擴展到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。Elasticsearch旨在解決所有這些問題和更多的問題。

ElasticSearch的Schema與其它DB比較:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

ElasticSearch三方訪問方式:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

環境是CentOS6.4,安裝方法有好幾種,在這兒我們直接從官網下載包, 1.71版解壓後,進入目錄執行:

bin/elasticsearch

檢查服務是否正常工作

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

elasticsearch默認是9200端口,返回一個JSON數據,有版本說明運行正常。

elasticsearch的伸縮性很高,如下示例數據分片:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

安裝前端elasticsearch-head

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

打開 http://localhost:9200/_plugin/head/,可以看如下UI,此處我們配置IP是192.168.0.103,它多語言版,已經自動識別爲中文UI

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

在這兒我們還安裝一個管理結點的前端 bigdesk, 安裝方式類似,也是推薦插件模式:

$ ./bin/plugin -install lukas-vlcek/bigdesk/

http://192.168.0.103:9200/_plugin/bigdesk/之後UI是這樣的:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

還有其他的前端項目,在這兒我們不一 一 描述,其目的爲了更好的管理ElasticSearch集羣。

ElasticSearch與Asp.net應用程序集成

好了,我們在Asp.net項目中已經安裝Elmah,現在我們安裝 Elmah.Elasticsearch,這裏是1.1.0.27

PM> Install-Package Elmah.Elasticsearch

讓我們來訪問一個不存在http://localhost:1960/KK webpage 故意引發異常,然後我們到前端head裏可以看到:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

完整記錄JSON數據,當然也可以使用查詢方式。

接下來,讓我們來配置NLOG的日誌也輸出到ElasticSearch,先安裝包 NLog.Targets.ElasticSearch 1.0.14

PM> Install-Package NLog.Targets.ElasticSearch

這樣我們可以把非異常的日誌自由輸出到ElasticSearch中,例如我們記錄webapi請求的日誌:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

devlogging是我們在配置文件已配置過的index名稱。 我們同時使用NLOG記錄了文件日誌。

搜索:

ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程ElasticSearch+NLog+Elmah實現Asp.Net分佈式日誌管理教程

基於REST方式請求按ID查詢:

http://localhost:9200///.

如:

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中,以便於我們查詢與分析。Linux就該這麼學

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章