av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Docker安裝ELK并實現(xiàn)JSON格式日志分析

ELK是什么

10多年的祿勸網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整祿勸建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“祿勸網(wǎng)站設計”,“祿勸網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

ELK是elastic公司提供的一套完整的日志收集以及前端展示的解決方案,是三個產(chǎn)品的首字母縮寫,分別是ElasticSearch、Logstash和Kibana。

其中Logstash負責對日志進行處理,如日志的過濾、日志的格式化等;ElasticSearch具有強大的文本搜索能力,因此作為日志的存儲容器;而Kibana負責前端的展示。

ELK搭建架構(gòu)如下圖:

加入了filebeat用于從不同的客戶端收集日志,然后傳遞到Logstash統(tǒng)一處理。

ELK的搭建

因為ELK是三個產(chǎn)品,可以選擇依次安裝這三個產(chǎn)品。

這里選擇使用Docker安裝ELk。

Docker安裝ELk也可以選擇分別下載這三個產(chǎn)品的鏡像并運行,但是本次使用直接下載elk的三合一鏡像來安裝。

因此首先要保證已經(jīng)有了Docker的運行環(huán)境,Docker運行環(huán)境的搭建請查看:https://blog.csdn.net/qq13112...

拉取鏡像

有了Docker環(huán)境之后,在服務器運行命令:

 
 
 
 
  1. docker pull sebp/elk 

這個命令是在從Docker倉庫下載elk三合一的鏡像,總大小為2個多G,如果發(fā)現(xiàn)下載速度過慢,可以將Docker倉庫源地址替換為國內(nèi)源地址。

下載完成之后,查看鏡像:

 
 
 
 
  1. docker images 

Logstash配置

在/usr/config/logstash目錄下新建beats-input.conf,用于日志的輸入:

 
 
 
 
  1. input {  
  2.   beats {  
  3.     port => 5044  
  4.   }  

新建output.conf,用于日志由Logstash到ElasticSearch的輸出:

 
 
 
 
  1. output {  
  2.   elasticsearch {  
  3.     hosts => ["localhost"]  
  4.     manage_template => false  
  5.     index => "%{[@metadata][beat]}"  
  6.   }  

其中的index為輸出到ElasticSearch后的index。

運行容器

有了鏡像之后直接啟動即可:

 
 
 
 
  1. docker run -d -p 5044:5044 -p 5601:5601 -p 9203:9200 -p 9303:9300 -v /var/data/elk:/var/lib/elasticsearch -v /usr/config/logstash:/etc/logstash/conf.d --name=elk sebp/elk 

-d的意思是后臺運行容器;

-p的意思是宿主機端口:容器端口,即將容器中使用的端口映射到宿主機上的某個端口,ElasticSearch的默認端口是9200和9300,由于我的機器上已經(jīng)運行了3臺ElasticSearch實例,因此此處將映射端口進行了修改;

-v的意思是宿主機的文件|文件夾:容器的文件|文件夾,此處將容器中elasticsearch 的數(shù)據(jù)掛載到宿主機的/var/data/elk上,以防容器重啟后數(shù)據(jù)的丟失;并且將logstash的配置文件掛載到宿主機的/usr/config/logstash目錄。

--name的意思是給容器命名,命名是為了之后操作容器更加方便。

如果你之前搭建過ElasticSearch的話,會發(fā)現(xiàn)搭建的過程中有各種錯誤,但是使用docker搭建elk的過程中并沒有出現(xiàn)那些錯誤。

運行后查看容器:

 
 
 
 
  1. docker ps 

查看容器日志:

 
 
 
 
  1. docker logs -f elk 

進入容器:

 
 
 
 
  1. docker exec -it elk /bin/bash 

修改配置后重啟容器:

 
 
 
 
  1. docker restart elk 

查看kinaba

瀏覽器輸入http://my_host:5601/

即可看到kinaba界面。此時ElasticSearch中還沒有數(shù)據(jù),需要安裝Filebeat采集數(shù)據(jù)到elk中。

Filebeat搭建

Filebeat用于采集數(shù)據(jù)并上報到Logstash或者ElasticSearch,在需要采集日志的服務器上下載Filebeat并解壓即可使用

 
 
 
 
  1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-linux-x86_64.tar.gz  
  2. tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz 

修改配置文件

進入filebeat,修改filebeat.yml。

 
 
 
 
  1. filebeat.prospectors:  
  2. - type: log  
  3.   #需要設置為true配置才能生效  
  4.   enabled: true  
  5.   path:  
  6.     #配置需要采集的日志路徑  
  7.     - /var/log/*.log  
  8.   #可以打一個tag以后分類使用  
  9.   tag: ["my_tag"]  
  10.   #對應ElasticSearch的type  
  11.   document_type: my_type  
  12. setup.kibana:  
  13.   #此處為kibana的ip及端口,即kibana:5601  
  14.   host: ""  
  15. output.logstash:  
  16.   #此處為logstash的ip及端口,即logstash:5044  
  17.   host: [""]  
  18.   #需要設置為true,否則不生效  
  19.   enabled: true  
  20. #如果想直接從Filebeat采集數(shù)據(jù)到ElasticSearch,則可以配置output.elasticsearch的相關(guān)配置 

運行Filebeat

運行:

 
 
 
 
  1. ./filebeat -e -c filebeat.yml -d "publish" 

此時可以看到Filebeat會將配置的path下的log發(fā)送到Logstash;然后在elk中,Logstash處理完數(shù)據(jù)之后就會發(fā)送到ElasticSearch。但我們想做的是通過elk進行數(shù)據(jù)分析,因此導入到ElasticSearch的數(shù)據(jù)必須是JSON格式的。

這是之前我的單條日志的格式:

 
 
 
 
  1. 2019-10-22 10:44:03.441 INFO rmjk.interceptors.IPInterceptor Line:248 - {"clientType":"1","deCode":"0fbd93a286533d071","eaType":2,"eaid":191970823383420928,"ip":"xx.xx.xx.xx","model":"HONOR STF-AL10","osType":"9","path":"/applicationEnter","result":5,"session":"ef0a5c4bca424194b29e2ff31632ee5c","timestamp":1571712242326,"uid":"130605789659402240","v":"2.2.4"} 

導入之后不好分析,之后又想到使用Logstash的filter中的grok來處理日志使之變成JSON格式之后再導入到ElasticSearch中,但是由于我的日志中的參數(shù)是不固定的,發(fā)現(xiàn)難度太大了,于是轉(zhuǎn)而使用Logback,將日志直接格式化成JSON之后,再由Filebeat發(fā)送。

Logback配置

我的項目是Spring Boot,在項目中加入依賴:

 
 
 
 
  1.   
  2.   net.logstash.logback  
  3.   logstash-logback-encoder  
  4.   5.2  
  5.  

然后在項目中的resource目錄下加入logback.xml:

 
 
 
 
  1.   
  2.   
  3.       
  4.     service  
  5.       
  6.       
  7.       
  8.       
  9.       
  10.           
  11.         ${LOG_PATH}/${APPDIR}/log_error.log  
  12.           
  13.           
  14.               
  15.             ${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log  
  16.               
  17.               
  18.                 2MB  
  19.               
  20.           
  21.           
  22.         true  
  23.           
  24.           
  25.             %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n  
  26.             utf-8  
  27.           
  28.           
  29.           
  30.             error  
  31.             ACCEPT  
  32.             DENY  
  33.           
  34.       
  35.       
  36.       
  37.           
  38.         ${LOG_PATH}/${APPDIR}/log_warn.log  
  39.           
  40.           
  41.               
  42.             ${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log  
  43.               
  44.               
  45.                 2MB  
  46.               
  47.           
  48.           
  49.         true  
  50.           
  51.           
  52.             %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n  
  53.             utf-8  
  54.           
  55.           
  56.           
  57.             warn  
  58.             ACCEPT  
  59.             DENY  
  60.           
  61.       
  62.       
  63.       
  64.          
  65.          ${LOG_PATH}/${APPDIR}/log_info.log  
  66.           
  67.           
  68.               
  69.             ${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log  
  70.               
  71.               
  72.                 2MB  
  73.               
  74.           
  75.           
  76.         true  
  77.           
  78.           
  79.             %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n  
  80.             utf-8  
  81.           
  82.           
  83.           
  84.             info  
  85.             ACCEPT  
  86.             DENY  
  87.           
  88.       
  89.       
  90.           
  91.         ${LOG_PATH}/${APPDIR}/log_IPInterceptor.log  
  92.           
  93.             ${LOG_PATH}/${APPDIR}/log_IPInterceptor.%d{yyyy-MM-dd}.log  
  94.           
  95.           
  96.               
  97.                   
  98.                     10  
  99.                     \u2028  
  100.                   
  101.               
  102.               
  103.                   
  104.                       
  105.                         {  
  106.                         "timestamp":"%date{ISO8601}",  
  107.                         "uid":"%mdc{uid}",  
  108.                         "requestIp":"%mdc{ip}",  
  109.                         "id":"%mdc{id}",  
  110.                         "clientType":"%mdc{clientType}",  
  111.                         "v":"%mdc{v}",  
  112.                         "deCode":"%mdc{deCode}",  
  113.                         "dataId":"%mdc{dataId}",  
  114.                         "dataType":"%mdc{dataType}",  
  115.                         "vid":"%mdc{vid}",  
  116.                         "did":"%mdc{did}",  
  117.                         "cid":"%mdc{cid}",  
  118.                         "tagId":"%mdc{tagId}"  
  119.                         }  
  120.                       
  121.                   
  122.               
  123.           
  124.       
  125.       
  126.       
  127.       
  128.     
  129.                     converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>  
  130.     
  131.                     converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>  
  132.       
  133.     
  134.               value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> 
  135.        
  136.           
  137.           
  138.             ${CONSOLE_LOG_PATTERN}  
  139.             utf-8  
  140.           
  141.           
  142.           
  143.             debug  
  144.           
  145.       
  146.       
  147.       
  148.       
  149.       
  150.       
  151.       
  152.       
  153.           
  154.           
  155.       
  156.       
  157.       
  158.           
  159.       
  160.       
  161.       
  162.           
  163.           
  164.           
  165.           
  166.           
  167.       
  168.  

其中的關(guān)鍵為:

 
 
 
 
  1.   
  2.         
  3.  

在需要打印的文件中引入slf4j:

 
 
 
 
  1. private static final Logger LOG = LoggerFactory.getLogger("IPInterceptor"); 

MDC中放入需要打印的信息:

 
 
 
 
  1. MDC.put("ip", ipAddress); 
  2.  MDC.put("path", servletPath);  
  3. MDC.put("uid", paramMap.get("uid") == null ? "" : paramMap.get("uid").toString()); 

此時如果使用了LOG.info("msg")的話,打印的內(nèi)容會輸入到日志的message中,日志格式如下:

修改Logstash配置

修改/usr/config/logstash目錄下的beats-input.conf:

 
 
 
 
  1. input {  
  2.   beats {  
  3.     port => 5044  
  4.     codec => "json"  
  5.   }  

只加了一句codec => "json",但是Logstash會按照JSON格式來解析輸入的內(nèi)容。

因為修改了配置,重啟elk:

 
 
 
 
  1. docker restart elk 

這樣,當我們的日志生成完畢之后,使用Filebeat導入到elk中,就可以通過Kibana來進行日志分析了。


網(wǎng)站標題:Docker安裝ELK并實現(xiàn)JSON格式日志分析
本文網(wǎng)址:http://uogjgqi.cn/article/dhgijpi.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流