0、整體架構
整體架構目錄:ASP.NET Core分布式項目實戰-目錄
一、介紹ELK
1、說明(此篇ELK采用rpm的方式安裝在服務器上)-牛刀小試
承接上一篇文章的內容准備部署ELK來展示asp.net core 的數據。目前此篇文章只用到單台服務器,等下一篇將會介紹如何做到集群部署ELK+filebeat+MQ,因為這個集群部署才是真正體現大項目的價值。當然如果是小項目或者是內部項目單台足以。
當然ELK只是在業界用的比較多,但是里面所用的工具是可以替換的,比如說 如下:
體現價值的解決方案就是:es+kibana+filebeat/logstash+MQ(RabbitMQ/Kfaka) 來實現日志記錄等。
多介紹一下吧:
Beats包含四種工具:
Packetbeat(搜集網絡流量數據)
Topbeat(搜集系統、進程和文件系統級別的 CPU 和內存使用情況等數據)
Filebeat(搜集文件數據)
Winlogbeat(搜集 Windows 事件日志數據)
它是一個輕量級的日志收集處理工具(Agent)
自此,解決方案很多,關鍵在於不同的項目用不同的解決方案,關鍵看大家的選擇啦。當然如果大家有興趣可以加一下QQ群,可以互相探討技術。
如果大家對NLog不會部署,請看上一篇文章:asp.net core添加全局異常處理及log4net、Nlog應用
好了接下來就要開始部署啦,請准備你們的服務器和VS吧。
2、環境說明
軟件 | 版本 |
CentOS | 7.4 |
Docker | ce-18.06 |
Elasticsearch | 5.5.0 |
Logstash | 5.5.0 |
Kibana | 5.5.0 |
VS2017 | 2017 |
介紹一下ELK實時日志分析平台。
Elasticsearch:是個開源分布式搜索引擎,提供收集、分析、存儲數據三大功能,它的特點:分布式、零配置、自動發現、索引自動分片、索引副本機制、restful風格接口、多數據源、自動搜索負載等。
Logstash:主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節點日志進行過濾、修改等操作在一並發往elasticsearch上去。
Kibana:Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數據日志。
二、部署ELK
目前由於我在公司部署的ELK,在使用docker下載官方的ELK鏡像時,無法下載。因此我在家里的時候就把ELK所需要的鏡像下載好后放在阿里雲的鏡像倉庫中,然后在公司的電腦里面直接下載,速度比較快。
如果有碰到以上下載鏡像問題的同學,可以嘗試我這中辦法。
0、前提需要安裝JAVA環境
命令:
wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.rpm
如果發現 下載地址失效請登錄:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 這個鏈接找尋下載地址
安裝JDK8:
rpm -ivh jdk-8u181-linux-x64.rpm
檢查 JDK是否安裝成功:
java -version
1、部署Elasticsearch
安裝
官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方網站有很多安裝方式,這里采用rpm安裝。
//進入local目錄
cd /usr/local
//創建elasticsearch文件夾
mkdir elasticsearch
//進入elasticsearch文件夾
cd elasticsearch
//開始下載
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.rpm
//開始安裝
rpm -ivh elasticsearch-5.5.0.rpm
配置
//查找安裝目錄
whereis elasticsearch
//進入安裝目錄
cd /etc/elasticsearch
//編輯配置文件
vi elasticsearch.yml
主要配置Network.host(本機ip)和http.port(默認9200)(目前單節點模式,其他參數請參考官方文檔)
啟動服務
//開啟端口9200
firewall-cmd --add-port=9200/tcp --permanent
//重新加載配置
firewall-cmd --reload
//設置服務開機啟動
systemctl enable elasticsearch
//啟動服務
systemctl start elasticsearch
在瀏覽器打開http://192.168.161.191:9200/,如下圖所示表示啟動成功了
2、部署kibana
官網文檔:https://www.elastic.co/guide/en/kibana/current/index.html
安裝
//進入elasticsearch目錄
cd /usr/local/elasticsearch
//下載Kibana rpm 64位包
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-x86_64.rpm
//安裝Kibana
rpm -ivh kibana-5.5.0-x86_64.rpm
配置
//進入安裝目錄
cd /etc/kibana
//編輯配置文件
vi kibana.yml
設置端口號:5601,Host地址:"192.168.161.191" ,elasticsearch服務地址為:"http://192.168.161.191:9200"
啟動服務
//開啟端口5601
firewall-cmd --add-port=5601/tcp --permanent
//重新加載配置
firewall-cmd --reload
//設置服務開機啟動
systemctl enable kibana
//啟動服務
systemctl start kibana
在瀏覽器打開http://192.168.161.191:5601,將進入到Kibana管理界面
3、部署logstash
官方文檔:https://www.elastic.co/guide/en/logstash/current/index.html
安裝
//進入elasticsearch目錄
cd /usr/local/elasticsearch
//下載logstash rpm包
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.rpm
//安裝rpm包
rpm -ivh logstash-5.5.0.rpm
配置
//進入安裝目錄
cd /etc/logstash
//進入conf.d目錄
cd conf.d
//新增配置信息
vi nlog.conf
直接在logstash.conf配置即可。
input{ tcp{ host=>"192.168.161.191" port=>8001 } } filter{ grok{ match=>{ "message"=>"#%{DATA:request_time}#%{DATA:log_level}#%{DATA:log_info}#" } } } output{ elasticsearch{ hosts=>["192.168.161.191:9200"] index=>"default" document_type=>"logs" } }
input:采用TCP監控本機8001端口的消息
filter:使用grok 插件,自定義消息格式,推薦使用grokdebug在線進行調試
output:使用elasticsearch作為數據存儲
5、重啟修改配置后的logstash
如果是上面的第二種方式,采用tcp端口,則重啟需要配置 8001端口
即: -p 8001:8001
docker run -d --restart always -p 8001:8001 --name logstash -v /home/logstashdata/config:/usr/share/logstash/config -v /home/logstashdata/pipeline:/usr/share/logstash/pipeline logstash:6.3.0
啟動服務
//開啟端口8001
firewall-cmd --add-port=8001/tcp --permanent
//重載配置
firewall-cmd --reload
//設置開機啟動
systemctl enable logstash
//啟動logstash
systemctl start logstash
三、asp.net core 結合NLog
1、在項目中的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" autoReload="true"> <!-- the targets to write to --> <targets> <!-- 輸出到文件,這個文件記錄所有的日志 --> <target xsi:type="File" name="allfile" fileName="Log\LogAll\${shortdate}.htm" layout="<HR COLOR=red>${longdate}<BR>${logger}<BR>${uppercase:${level}}<BR>${message} ${exception}<HR Size=1>" /> <!-- 輸出到文件,這個文件記錄錯誤日志 --> <target xsi:type="File" name="logError" fileName="Log\LogError\${shortdate}.htm" layout="<HR COLOR=red>【異常時間】:${date} <BR>【異常級別】:${level:uppercase=true} <BR>${message}<HR Size=1>" /> <!-- 輸出到文件,這個文件記錄操作日志 --> <target xsi:type="File" name="logInfo" fileName="Log\LogInfo\${shortdate}.htm" layout="<HR COLOR=red>【操作時間】:${date} <BR>【操作級別】:${level:uppercase=true} <BR>${message}<HR Size=1>" /> <target xsi:type="Network" name="ownLog-tcp-Info" keepConnection="false" address ="tcp://192.168.161.191:8001" layout="#【操作時間】:${date} #【操作級別】:${level:uppercase=true} #${message}#"/> <target xsi:type="Network" name="ownLog-tcp-Error" keepConnection="false" address ="tcp://192.168.161.191:8001" layout="#【異常時間】:${date} #【異常級別】:${level:uppercase=true} #${message}#"/> </targets> <!-- rules to map from logger name to target --> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <logger name="*" minlevel="Error" writeTo="logError" /> <logger name="*" minlevel="Info" writeTo="logInfo" /> <logger name="*" minlevel="Info" writeTo="ownLog-tcp-Info" /> <logger name="*" minlevel="Error" writeTo="ownLog-tcp-Error" /> <!--Skip non-critical Microsoft logs and so log only own logs--> <logger name="Microsoft.*" maxLevel="Trace" final="true" /> <!--<logger name="DotNetCore.CAP.*" maxLevel="Info" final="true" /> <logger name="IdentityServer4.*" maxLevel="Info" final="true" />--> </rules> </nlog>
配置結束,運行項目。
打開kibana,添加一下索引,當然這個索引名稱需要和上面在logstash中的es索引一樣,因為是要根據索引名稱來查找數據的。
添加索引完后,就可以查看數據啦。
等下一篇部署在Docker上。拭目以待吧。
參考文檔:https://www.cnblogs.com/piscesLoveCc/p/7230426.html
asp.net core 交流群:787464275 歡迎加群交流
如果您認為這篇文章還不錯或者有所收獲,您可以點擊右下角的【推薦】按鈕精神支持,因為這種支持是我繼續寫作,分享的最大動力!
微信公眾號:歡迎關注 QQ技術交流群: 歡迎加群