<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用docker-elk搭建并實(shí)踐ELK日志分析框架

          共 9255字,需瀏覽 19分鐘

           ·

          2020-11-08 21:19

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”

          優(yōu)質(zhì)文章,第一時間送達(dá)

          ? 作者?|??reddevil_zs

          來源 |? urlify.cn/3mYfuq

          66套java從入門到精通實(shí)戰(zhàn)課程分享

          1. ELK日志分析簡介

          1.1 ELK日志分析概述

          ??ELK可運(yùn)行于分布式系統(tǒng)之上,通過搜集、過濾、傳輸、儲存,對海量系統(tǒng)和組件日志進(jìn)行集中管理和準(zhǔn)實(shí)時搜索、分析,使用搜索、監(jiān)控、事件消息和報(bào)表等簡單易用的功能,幫助運(yùn)維人員進(jìn)行線上業(yè)務(wù)的準(zhǔn)實(shí)時監(jiān)控、業(yè)務(wù)異常時及時定位原因、排除故障、程序研發(fā)時跟蹤分析Bug、業(yè)務(wù)趨勢分析、深度挖掘日志的大數(shù)據(jù)價(jià)值。ELK主要可解決的問題如下:1.日志查詢,問題排查,上線檢查.2.服務(wù)器監(jiān)控,應(yīng)用監(jiān)控,錯誤報(bào)警,Bug管理. 3.性能分析,安全漏洞分析。綜上,ELK是一套方便、易用的日志分析開源解決方案。

          1.2 ELK主要組件介紹

          ??生產(chǎn)環(huán)境中,ELK通常由以下4個組件構(gòu)成:

          1.2.1 ElasticSearch組件

          ??ElasticSearch是一個基于Lucene的開源分布式搜索服務(wù)器。它的特點(diǎn)有:分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動搜索負(fù)載等。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是第二流行的企業(yè)搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時搜索,穩(wěn)定,可靠,快速,安裝使用方便。

          1.2.2 Logstash組件

          ??Logstash是一個完全開源的工具,它可以對你的日志進(jìn)行收集、過濾、分析,支持大量的數(shù)據(jù)獲取方法,并將其存儲供以后使用(如搜索)。一般工作方式為c/s架構(gòu),client端安裝在需要收集日志的主機(jī)上,server端負(fù)責(zé)將收到的各節(jié)點(diǎn)日志進(jìn)行過濾、修改等操作在一并發(fā)往elasticsearch上去。Logstash事件處理有三個階段:inputs → filters → outputs。是一個接收,處理,轉(zhuǎn)發(fā)日志的工具,如下圖所示:

          1.2.3 Kibana組件

          ??Kibana是一個基于瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費(fèi)的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志。

          1.2.4 Filebeat組件

          ??Filebeat是一個日志文件托運(yùn)工具,在你的服務(wù)器上安裝客戶端后,filebeat會監(jiān)控日志目錄或者指定的日志文件,追蹤讀取這些文件,并且轉(zhuǎn)發(fā)這些信息到賦予他的輸出位置(常見如elasticsearch、kafka或logstarsh)中存放。Filebeat等同于一個輕量級的logstash,當(dāng)你需要收集信息的機(jī)器配置或日志資源數(shù)量不是特別多時,最佳實(shí)踐是使用filebeat來代替logstash收集日志,filebeat十分小巧且穩(wěn)定。下圖是filebeat的工作流程:當(dāng)你開啟filebeat程序的時候,它會啟動一個或多個探測器(prospectors)去檢測你指定的日志目錄或文件,對于探測器找出的每一個日志文件,filebeat啟動收割進(jìn)程(harvester),每一個收割進(jìn)程讀取一個日志文件的新內(nèi)容,并發(fā)送這些新的日志數(shù)據(jù)到處理程序(spooler),處理程序會集合這些事件,最后filebeat會發(fā)送集合的數(shù)據(jù)到你指定的地點(diǎn)。

          2. Docker-elk搭建實(shí)驗(yàn)環(huán)境

          2.1 sebp/elk鏡像的獲取

          ??外網(wǎng)環(huán)境下,執(zhí)行命令:docker pull sebp/elk?將鏡像pull到本地來。

          2.2 制作上報(bào)日志到ELK的filebeat鏡像

          (1) 本地Window在官網(wǎng)下載filebeat,然后通過SecureCRT導(dǎo)入tar.gz壓縮包文件并在linux中解壓。

          (2) 安裝JDK 鏡像
          ??與elk鏡像同理,將JDK的官方鏡像pull到本地,作為基礎(chǔ)鏡像就好:java:8u111-jdk .
          (3) 開放filebeat訪問ELK的權(quán)限
          ??在我們使用的elk鏡像源碼的git倉庫中(地址是
          https://github.com/spujadas/elk-docker),下載該鏡像的logstash-beats.crt文件來給filebeat提供授權(quán),制作鏡像時要放在指定目錄下。

          (4) 修改配置文件filebeat.yml
          ??首先配置抓取WEB日志的目錄:

          ????-?type:?log
          ??????#?Change?to?true?to?enable?this?prospector?configuration.
          ??????enabled:?true
          ??????#?Paths?that?should?be?crawled?and?fetched.?Glob?based?paths.
          ??????paths:
          ????-?/applog/*.log

          ??接下來為filebeat提供ELK授權(quán):

          ????#output.logstash:
          ??????#?The?Logstash?hosts
          ??????hosts:?["localhost:5044"]
          ??????#?Optional?SSL.?By?default?is?off.
          ??????#?List?of?root?certificates?for?HTTPS?server?verifications
          ??????ssl.certificate_authorities:?["/home/hik/docker/logstash-beats.crt"]

          (5) 制作filebeat和web服務(wù)的啟動腳本
          ??編寫啟動filebeat和web應(yīng)用的腳本filebeat-springboot-entrypoint.sh,在docker容器啟動的時候執(zhí)行,這樣就能讓fliebeat和web應(yīng)用在容器啟動后也自動啟動了:

          echo?"start?filebeat?now?..."
          nohup?/opt/filebeat-6.2.2-linux-x86_64/filebeat?-e?-c?/opt/filebeat-6.2.2-linux-x86_64/filebeat.yml?>/dev/null?2>&1?&
          echo?"start?springboot?jar?now?..."
          java?-jar?$1

          (6) 通過Dockerfile完成filebeat鏡像構(gòu)建
          ??Dockerfile腳本的內(nèi)容如下:

          #基礎(chǔ)鏡像
          FROM?java:8u111-jdk

          #定義日志文件存放目錄,這個要和web應(yīng)用的日志配置一致
          ENV?APP_LOG_PATH?/applog

          #定義證書文件目錄,這個要和filebeat.yml的配置一致
          ENV?FILE_BEAT_CRT_PATH?/etc/pki/tls/certs

          #定義filebeat文件夾名稱
          ENV?FILE_BEAT_PACKAGE_NAME?filebeat-6.2.2-linux-x86_64

          #定義證書文件名稱
          ENV?FILE_BEAT_CRT_NAME?logstash-beats.crt

          #定義啟動文件名稱
          ENV?ENTRYPOINT_FILE_NAME?filebeat-springboot-entrypoint.sh

          #定義時區(qū)參數(shù)
          ENV?TZ=Asia/Shanghai

          #設(shè)置時區(qū)
          RUN?ln?-snf?/usr/share/zoneinfo/$TZ?/etc/localtime?&&?echo?$TZ?>?/etc/timezone

          #使之生效
          RUN?.?/etc/profile

          #創(chuàng)建日志目錄文件夾
          RUN?mkdir?$APP_LOG_PATH

          #存放證書的文件夾
          RUN?mkdir?-p?$FILE_BEAT_CRT_PATH

          #從當(dāng)前目錄將證書文件復(fù)制到鏡像中
          COPY?./$FILE_BEAT_CRT_NAME?$FILE_BEAT_CRT_PATH/

          #從當(dāng)前目錄將filebeat文件復(fù)制到鏡像中
          COPY?./$FILE_BEAT_PACKAGE_NAME?/opt/$FILE_BEAT_PACKAGE_NAME

          #復(fù)制啟動文件
          COPY?./$ENTRYPOINT_FILE_NAME?/$ENTRYPOINT_FILE_NAME

          #賦寫權(quán)限
          RUN?chmod?a+x?/$ENTRYPOINT_FILE_NAME

          ??如上所述,前面我們準(zhǔn)備的材料在腳本都統(tǒng)統(tǒng)用上了;將filebeat-6.2.2-linux-x86_64 文件夾、Dockerfile文件、filebeat-springboot-entrypoint.sh文件、logstash-beats.crt放在同一目錄下,執(zhí)行以下命令即可將鏡像構(gòu)建成功:

          docker?build?-t?springboot-app-filebeat:0.0.3?.

          ??注意:最后有一個空格和一個點(diǎn),這代表當(dāng)前路徑,不加的話會構(gòu)建失敗。

          2.3 通過2.2制作web工程鏡像

          (1) 用maven創(chuàng)建一個springboot的web工程,在工程的目錄src/main/resources下增加一個logback.xml文件,用于配置日志有關(guān)的參數(shù)。日志文件的目錄設(shè)置在/applog/,和filebeat.yml中搜集日志的目錄保持一致(完成)


          "FILE"
          ??????????class="ch.qos.logback.core.rolling.RollingFileAppender">
          ????"ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          ????????/applog/output.%d{yyyy-MM-dd}.log
          ????????7
          ????
          ????"ch.qos.logback.classic.encoder.PatternLayoutEncoder">
          ????????${ENCODER_PATTERN}
          ????

          (2) 在web工程的pom.xml中,新增一個插件docker-maven-plugin,用于將當(dāng)前工程構(gòu)建成的jar做成docker鏡像文件,基礎(chǔ)鏡像使用2.2中構(gòu)建好的filebeat鏡像。



          ???com.spotify
          ???docker-maven-plugin
          ???0.4.12
          ???
          ???
          ??????
          ??????bolingcavalry/${project.artifactId}
          ??????
          ??????
          ?????????${project.version}
          ??????

          ??????
          ??????springboot-app-filebeat:0.0.3
          ??????
          ??????["sh","/filebeat-springboot-entrypoint.sh","/${project.build.finalName}.jar"]
          ??????
          ??????http://10.66.35.173:2375
          ??????
          ?????????
          ????????????/
          ????????????${project.build.directory}
          ????????????${project.build.finalName}.jar
          ?????????

          ??????

          ???



          (3) 新增HelloController.java用于響應(yīng)web請求,并且每次收到請求時都會打印一行日志到指定文件中。

          ?@RequestMapping(value="/hello/{username}",method=?RequestMethod.GET)
          public?String?hello(@PathVariable?String?username)?{
          ????SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");
          ????String?time?=?sdf.format(new?Date());
          ????logger.info("execute?hello?from?{}?-?{}",?username,?time);
          ????return?"hello?"?+?username?+?",?"?+?time;
          }

          (4) 在pom.xml文件所在目錄執(zhí)行以下命令,即可編譯構(gòu)建當(dāng)前工程,并制作成docker鏡像:shell mvn clean package -U -DskipTests docker:build

          2.4 連接2.1和2.3實(shí)現(xiàn)ELK管理WEB服務(wù)

          ??通過docker-compose.yml來啟動ELK和最終鏡像。完成兩者的連接,使web工程在ELK容器中運(yùn)行。

          vi?docker-compose.yml

          version:?'2'
          services:
          ??elk:
          ????image:?elk:6.4.2
          ????ports:
          ??????-?"5601:5601"
          ??????-?"9200:9200"
          ????restart:?always
          ??webapp:
          ????image:?elkdemo:1.0
          ????depends_on:
          ??????-?elk
          ????links:
          ??????-?elk:elkhost
          ????ports:
          ??????-?"18080:8080"
          restart:?always

          啟動:shell sudo docker-compose up -d

          注意:1.ELK server容器的5601端口映射為當(dāng)前電腦的5601端口,用于訪問kibana;2.web應(yīng)用鏡像使用link參數(shù)綁定ELK server容器,3使用webapp作為域名的地方都會被解析為ELK server容器的IP地址;3.web容器的8080映射為當(dāng)前電腦的18080端口,訪問當(dāng)前電腦的18080端口即可訪問web服務(wù)。

          ??至此,整個ELK環(huán)境所需的鏡像和腳本都已做好,web服務(wù)和ELK服務(wù)也都成功運(yùn)行起來了,實(shí)驗(yàn)環(huán)境搭建完畢。

          3. Logstash與filter插件應(yīng)用

          3.1 Logstash常用filter插件

          ??Filter是Logstash功能強(qiáng)大的主要原因,它可以對Logstash Event進(jìn)行豐富的處理,比如說解析數(shù)據(jù)、刪除字段、類型轉(zhuǎn)換等等,常見的有如下幾個:

          (1)date: 日志解析,從字段解析日期以用作事件的Logstash時間戳。
          (2)grok:正則匹配解析。將非結(jié)構(gòu)化事件數(shù)據(jù)分析到字段中。這個工具非常適用于系統(tǒng)日志,Apache和其他網(wǎng)絡(luò)服務(wù)器日志,MySQL日志,以及通常為人類而不是計(jì)算機(jī)消耗的任何日志格式。
          (3)dissect:分割符解析。基于分隔符原理解析數(shù)據(jù),解決grok解析時消耗過多cpu資源的問題,使用分隔符將非結(jié)構(gòu)化事件數(shù)據(jù)提取到字段中。解剖過濾器不使用正則表達(dá)式,速度非常快。但是,如果數(shù)據(jù)的結(jié)構(gòu)因行而異,grok過濾器更合適。dissect的應(yīng)用有一定的局限性:主要適用于每行格式相似且分隔符明確簡單的場景 。
          (4)mutate:對字段做處理,比如重命名、刪除、替換等。
          (5)json:按照json解析字段內(nèi)容到指定字段中。
          (6)geoip:增加地理位置數(shù)據(jù)。根據(jù)ip地址提供對應(yīng)的地域信息,比如經(jīng)緯度、城市名等,方便進(jìn)行地理數(shù)據(jù)分析。

          3.2 Logstash日志過濾實(shí)踐

          (1) 修改filebeat.yml文件,將filebeat的輸出從elasticsearch改為logstash:

          #--------------------------?Elasticsearch?output?------------------------------
          output.elasticsearch:
          ??#?Array?of?hosts?to?connect?to.
          ??#?hosts:?["localhost:9200"]???#注釋掉這句,filebeat不再輸出到elasticsearch,改為向logstash輸出

          ??#?Optional?protocol?and?basic?auth?credentials.
          ??#protocol:?"https"
          ??#username:?"elastic"
          ??#password:?"changeme"

          #-----------------------------?Logstash?output?--------------------------------
          #output.logstash:
          ??#?The?Logstash?hosts
          ??hosts:?["localhost:5044"]

          ??#?Optional?SSL.?By?default?is?off.
          ??#?List?of?root?certificates?for?HTTPS?server?verifications
          ??ssl.certificate_authorities:?["/home/hik/docker/logstash-beats.crt"]

          (2) 查看正在運(yùn)行中的容器,找到ELK容器elk:6.4.2

          hik@root:~/docker/filebeat-6.2.2-linux-x86_64$?sudo?docker?ps
          CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS????????????????????????????????????????????????????????????????NAMES
          c02f0f0f6047????????elkdemo:1.0?????????"sh?/filebeat-springa€|"???8?weeks?ago?????????Up?About?an?hour????0.0.0.0:18080->8080/tcp??????????????????????????????????????????????docker_webapp_1
          308de13c21e0????????elk:6.4.2???????????"/usr/local/bin/stara€|"???8?weeks?ago?????????Up?About?an?hour????0.0.0.0:5601->5601/tcp,?5044/tcp,?9300/tcp,?0.0.0.0:9200->9200/tcp???docker_elk_1

          (3) 進(jìn)入ELK容器: sudo docker exec –it?/bin/bash ,此處的container-name為308de13c21e0

          hik@root:~/docker/filebeat-6.2.2-linux-x86_64$?sudo?docker?exec?-it?308de13c21e0?/bin/bash
          root@308de13c21e0:/#?ls
          bd_build??bin??boot??dev??etc??home??lib??lib64??media??mnt??opt??proc??root??run??sbin??srv??sys??tmp??usr??var

          (4) 修改/opt/logstash/config路徑下的logstash-sample.conf,增加JSON過濾插件

          #本操作使用json插件,處理結(jié)果刪除掉message字段。
          input?{
          ??beats?{
          ????port?=>?5044
          ??}
          }
          filter?{
          ????json?{
          ????????source?=>?"message"
          ????????remove_field?=>?["message"]
          ????}
          }
          output?{
          ??elasticsearch?{
          ????hosts?=>?["http://localhost:9200"]
          ????index?=>?"%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
          ????#user?=>?"elastic"
          ????#password?=>?"changeme"
          ??}
          }

          (5) 通過配置文件來啟動logstash,若出現(xiàn)端口占用需要先殺掉此前占用5044端口的進(jìn)程:

          bin/logstash?-f?logstash-sample.conf

          (6) 處理結(jié)果為

          ?{
          ??"_index":?"filebeat-2019.05.22",
          ??"_type":?"doc",
          ??"_id":?"CnCs3WoBtWWwz0jz3Y4z",
          ??"_version":?1,
          ??"_score":?null,
          ??"_source":?{
          ????"beat":?{
          ??????"name":?"be58d50b9f23",
          ??????"hostname":?"be58d50b9f23",
          ??????"version":?"6.2.2"
          ????},
          ????"tags":?[
          ??????"beats_input_codec_plain_applied"
          ????],
          ????"@version":?"1",
          ????"source":?"/applog/output.2019-05-22.log",
          ????"@timestamp":?"2019-05-22T03:53:09.901Z",
          ????"offset":?2722,
          ????"prospector":?{
          ??????"type":?"log"
          ????},
          ????"host":?"be58d50b9f23"
          ??},
          ??"fields":?{
          ????"@timestamp":?[
          ??????"2019-05-22T03:53:09.901Z"
          ????]
          ??},
          ??"sort":?[
          ????1558497189901
          ??]
          }

          4. 小結(jié)

          ??本文首先簡單介紹了ELK日志分析的總體框架和重要組件,接下來通過docker-elk完成了日志分析平臺的實(shí)驗(yàn)環(huán)境搭建,最后對logstash和它的filter插件做了簡單介紹和實(shí)驗(yàn)驗(yàn)證。后續(xù)會繼續(xù)研究ELK的配置優(yōu)化和插件運(yùn)用,為后續(xù)ELK集成的WEB打好基礎(chǔ)。





          粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取

          ???

          ?長按上方微信二維碼?2 秒
          即可獲取資料



          感謝點(diǎn)贊支持下哈?

          瀏覽 44
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国语对白中文字幕 | 亚洲天堂AV在线观看 | 啪啪啪视频在线观看 | 欧美性爱成| 久久成人片 |