在現代化的軟件開發流程中,日誌顯得很是的重要,不可能再零散的遊離在各個項目中,等查看日誌的時候再登陸服務器去到特定的目錄去查看,這顯然很繁瑣且效率低下,全部整合一套日誌管理平臺,也顯得很是重要,這篇文章是日誌管理平臺搭建的第一篇,第二篇爲告警及郵件通知html
環境要求:CentOS Release: 7.5.1804java
ELK版本:6.3.1 爲方便下載我打包在百度網盤,點擊可直接下載spring
安裝json
1. Elasticsearch 解壓後上傳到服務器,直接用rpm命令安裝便可,如運行以下命令安裝elasticsearch瀏覽器
rpm -ivh ./elasticsearch-6.3.1.rpm
,等命令執行完成後,輸入服務器
systemctl status elasticsearch.service
,可查看當前運行的狀態,如圖所示,狀態爲active 說明咱們的elasticsearch 服務已經啓動。app
在瀏覽器輸入http://192.168.1.215:9200,查看返回結果,說明elasticsearch服務已經成功運行。elasticsearch
2. Logstashtcp
安裝logstash比較簡單,在命令行運行rpm -ivh ./logstash-6.3.1.rpm,等命令執行完成後,輸入systemctl status logstash.service 查看服務狀態以下圖所示,即表示logstash服務已經運行。測試
3. Kibana
最後,咱們安裝kibana,在解壓目錄下運行
rpm -ivh ./kibana-6.3.1-x86_64.rpm
命令,等命令執行完後,輸入
systemctl status kibana.service
,輸出以下圖所示,
說明kibana服務已經啓動,咱們在瀏覽器輸入http://192.168.1.215:5601來驗證下,若是不出意外,應該顯示以下所示
a) 若是遇到出現端口號被佔中的狀況,用netstat命令查看被哪一個進程佔中,殺掉便可,也能夠在配置文件修改端口,ELK默認端口:Elasticsearch:9200,Kibana:5601
b) 打開kibana,若是提示認證提示,則修改下kibana的配置文件,默認路徑在/etc/kibana/kibana.yml,添加以下設置 xpack.security.enabled: false便可。
日誌接入
a) 在添加logstash包
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.1</version> </dependency>
b) 日誌配置信息
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>xxx.xxx.xxx.xxx:xxxx</destination> <queueSize>1048576</queueSize> <!-- encoder必須配置,有多種可選 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"appname":"${Application_Name}"}</customFields> </encoder> <connectionStrategy> <roundRobin> <connectionTTL>5 minutes</connectionTTL> </roundRobin> </connectionStrategy> </appender>
c) Root配置
<springProfile name="log"> <root level="debug"><appender-ref ref="logstash" /></root> </springProfile>
d) 在logstash的配置文件路徑,默認爲/etc/logstash/conf.d添加文件biz_es.conf,文件名稱能夠本身根據實際需求修改。
input {
tcp {
##host:port就是上面appender中的 destination,這裏其實把logstash做爲服務,開啓9601端口接收logback發出的消息
host => "0.0.0.0"
#模式選擇爲server
mode => "server"
port => xxxx
##格式json
codec => "json"
type => "server"
}
}
output {
if[type]=="server"{
elasticsearch {
action => "index"
#ES地址
hosts => "192.168.1.215"
#指定索引名字,不適用默認的,用來區分各個項目
index => "%{[appname]}-%{+YYYY.MM.dd}"
}
}
}
e) 須要注意點
i. Logstash監聽的端口號要與日誌配置的端口號一致
ii. 防火牆要放開監聽的端口,測試環境也能夠把防火牆關閉
2. Net
a) 添加 NLog.Targets.ElasticSearch 程序包
b) 編輯Nlog.config
<extensions> <add assembly="NLog.Targets.ElasticSearch"/> </extensions> <target xsi:type="ElasticSearch" name="ElasticLog" uri="http://192.168.1.215:9200" index="nlog-${date:format=yyyy.MM.dd}" documentType="logevent" includeAllProperties="true"> <field name="private" layout="${assembly-version}" /> </target> <rules> <logger name="Kibana" minlevel="Info" writeTo="ElasticLog"/> </rules>
c) 添加日誌
i. 幫助 Utils
public class LogHelper { private static Logger logger; private static string logRuleName = "Kibana"; static LogHelper() { logger = LogManager.GetLogger(logRuleName); logger.LoggerReconfigured += logger_LoggerReconfigured; } static void logger_LoggerReconfigured(object sender, System.EventArgs e) { logger = LogManager.GetLogger(logRuleName); } public static void WirtError(string message) { logger.Log(LogLevel.Error, message); } public static void WirtDebug(string message) { logger.Log(LogLevel.Debug, message); } }
d) 記錄日誌
LogHelper.WirtError("elk log info");
到這裏elk搭建及java&net使用就完成了,下一篇主要介紹跟釘釘告警及郵件通知