真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志

本篇文章給大家分享的是有關(guān)如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元麟游做網(wǎng)站,已為上家服務(wù),為麟游各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

ELK是什么

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

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

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

如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志

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

ELK的搭建

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

這里選擇使用Docker安裝ELk。

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

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

拉取鏡像

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

docker pull sebp/elk

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

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

docker images

如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志

Logstash配置

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

input {    beats {      port => 5044    }  }

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

output {    elasticsearch {      hosts => ["localhost"]      manage_template => false      index => "%{[@metadata][beat]}"    }  }

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

運(yùn)行容器

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

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的意思是后臺運(yùn)行容器;

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

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

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

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

運(yùn)行后查看容器:

docker ps

如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志

查看容器日志:

docker logs -f elk

進(jìn)入容器:

docker exec -it elk /bin/bash

修改配置后重啟容器:

docker restart elk

查看kinaba

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

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

Filebeat搭建

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

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

修改配置文件

進(jìn)入filebeat,修改filebeat.yml。

filebeat.prospectors:  - type: log    #需要設(shè)置為true配置才能生效    enabled: true    path:      #配置需要采集的日志路徑      - /var/log/*.log    #可以打一個tag以后分類使用    tag: ["my_tag"]    #對應(yīng)ElasticSearch的type    document_type: my_type  setup.kibana:    #此處為kibana的ip及端口,即kibana:5601    host: ""  output.logstash:    #此處為logstash的ip及端口,即logstash:5044    host: [""]    #需要設(shè)置為true,否則不生效    enabled: true  #如果想直接從Filebeat采集數(shù)據(jù)到ElasticSearch,則可以配置output.elasticsearch的相關(guān)配置

運(yùn)行Filebeat

運(yùn)行:

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

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

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

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"}

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

Logback配置

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

    net.logstash.logback    logstash-logback-encoder    5.2  

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

              service                                                  ${LOG_PATH}/${APPDIR}/log_error.log                                                ${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log                                              2MB                                            true                                  %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n              utf-8                                            error              ACCEPT              DENY                                                ${LOG_PATH}/${APPDIR}/log_warn.log                                                ${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log                                              2MB                                            true                                  %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n              utf-8                                            warn              ACCEPT              DENY                                                ${LOG_PATH}/${APPDIR}/log_info.log                                                ${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log                                              2MB                                            true                                  %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n              utf-8                                            info              ACCEPT              DENY                                          ${LOG_PATH}/${APPDIR}/log_IPInterceptor.log                        ${LOG_PATH}/${APPDIR}/log_IPInterceptor.%d{yyyy-MM-dd}.log                                                                          10                      \u2028                                                                                                                {                          "timestamp":"%date{ISO8601}",                          "uid":"%mdc{uid}",                          "requestIp":"%mdc{ip}",                          "id":"%mdc{id}",                          "clientType":"%mdc{clientType}",                          "v":"%mdc{v}",                          "deCode":"%mdc{deCode}",                          "dataId":"%mdc{dataId}",                          "dataType":"%mdc{dataType}",                          "vid":"%mdc{vid}",                          "did":"%mdc{did}",                          "cid":"%mdc{cid}",                          "tagId":"%mdc{tagId}"                          }                                                                                                                                                        ${CONSOLE_LOG_PATTERN}              utf-8                                            debug                                                                                                                                                                                      

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

          

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

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

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

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

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

如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志

修改Logstash配置

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

input {    beats {      port => 5044      codec => "json"    }  }

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

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

docker restart elk

這樣,當(dāng)我們的日志生成完畢之后,使用Filebeat導(dǎo)入到elk中,就可以通過Kibana來進(jìn)行日志分析了。

以上就是如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:如何進(jìn)行Docker安裝ELK并實現(xiàn)JSON格式日志
當(dāng)前地址:http://weahome.cn/article/gpesed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部