日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文介紹使用Docker安裝部署Filebeat與Elasticsearch、Logstash、Kibana(簡(jiǎn)稱ELK)全家桶7.5.1。如果熟悉框架的話,直接copy配置文件與docker命令,簡(jiǎn)單刪減和修改路徑,即可快速啟動(dòng)整個(gè)鏈路。

簡(jiǎn)單的ELK數(shù)據(jù)平臺(tái)是這樣的流程:

快速搞定docker部署Filebeat、ELK全家桶

 

由于Kafka并不是ELK中必須的組件,所以本博客跳過(guò)部署Kafka,直接將Filebeat數(shù)據(jù)打到logstash上。關(guān)于Kafka的相關(guān)知識(shí),以后再作詳細(xì)講解。

本文中的配置環(huán)境是這樣的:

Filebeat在A機(jī)器上采集日志,ELK部署在B機(jī)器上。其中Elasticsearch與Logstash都采用的是單節(jié)點(diǎn)安裝。

版本選擇

寫此文的時(shí)候,F(xiàn)ilebeat和ELK最新的版本為7.6.1,不過(guò)筆者看了Filebeat 7.6.1的發(fā)布日志,發(fā)現(xiàn)該版本屬于一個(gè)緊急bugfix版本——因?yàn)?.6.0的bug導(dǎo)致k8s pods的標(biāo)簽/注解存在問(wèn)題。但是7.6.1的穩(wěn)定性依舊不敢保證,畢竟筆者的項(xiàng)目接下來(lái)service mesh化是要結(jié)合k8s的,為了減小風(fēng)險(xiǎn),退而求其次,選擇7.5.2。后來(lái)因?yàn)椴瓤佑謸Q到7.5.1,原因在下面說(shuō)明。

filebeat7.5.2在搭建之后運(yùn)行幾小時(shí)之后,會(huì)出現(xiàn)filebeat io timeout的問(wèn)題。官方論壇有人提出從7.5.1升級(jí)到7.5.2之后也出現(xiàn)了同樣的問(wèn)題,但是筆者并沒(méi)有找到官方給出有效的解決方案。另外出于時(shí)間成本考慮沒(méi)有時(shí)間去查找問(wèn)題,所以選擇版本為7.5.1。目前數(shù)據(jù)流已經(jīng)穩(wěn)定運(yùn)行兩周了。

按照官方說(shuō)明,只要全家桶不是升級(jí)到8.0,都是可以輕松升級(jí)的。所以系統(tǒng)穩(wěn)定后隨時(shí)可以升級(jí)。

安裝Elasticsearch

Elasticsearch是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。它能很方便地使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。

# 創(chuàng)建自定義的網(wǎng)絡(luò)(用于連接到連接到同一網(wǎng)絡(luò)的其他服務(wù)(例如Logstash和Kibana))
docker network create somenetwork 
# 運(yùn)行 elasticsearch
docker run --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.5.1
# 查看容器狀態(tài)
docker ps
# 檢測(cè) elasticsearch 是否啟動(dòng)成功
curl 127.0.0.1:9200

安裝Logstash

Logstash作為Elasicsearch常用的實(shí)時(shí)數(shù)據(jù)采集引擎,可以采集來(lái)自不同數(shù)據(jù)源的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理后輸出到多種輸出源,是Elasticstack的重要組成部分。

增加logstash的聲明文件,logstash.yml。編輯內(nèi)容如下

# 配置文件讀取路徑
path.config: /home/ec2-user/docker_config/logstash/conf.d/*.conf
# 日志輸出路徑
path.logs: /var/log/logstash

在上面配置文件讀取路徑中,增加一個(gè)測(cè)試文件test.conf,內(nèi)容如下:

input {
    beats {
        port => 5044
    }
}
filter {
    if "JAVA-logs" in [tags]{
        grok {
            # grok正則化會(huì)按照順序許匹配送進(jìn)來(lái)的日志,當(dāng)碰到第一個(gè)匹配成功的日志就break掉這個(gè)循環(huán)。
            match => {
                # 分別是服務(wù)器記錄行為日志,不帶參數(shù)參數(shù)的請(qǐng)求,帶參的get請(qǐng)求,帶參的post請(qǐng)求,兼容舊版的記錄行為日志。這里的格式就跟具體業(yè)務(wù)的日志有關(guān)了
                "message" => ["%{TIMESTAMP_ISO8601:logtime} %{DATA} %{LOGLEVEL:loglevel}  %{DATA:classpath} - %{DATA:logcontent} %{DATA:logcontent} %{DATA:logcontent} %{DATA:logcontent} %{DATA:logcontent} %{word:logdata}",
                            "%{TIMESTAMP_ISO8601:logtime} %{DATA} %{LOGLEVEL:loglevel}  %{DATA:classpath} - REQUEST DATA : uri=%{URIPATHPARAM:request};client=%{IP:clientIp}];&&&&%{DATA:common_param}&&&&;耗時(shí):%{NUMBER:costtime}ms",
                            "%{TIMESTAMP_ISO8601:logtime} %{DATA} %{LOGLEVEL:loglevel}  %{DATA:classpath} - REQUEST DATA : uri=%{URIPATH:request}?%{DATA:get_param};client=%{IP:clientIp}];&&&&%{DATA:common_param}&&&&;耗時(shí):%{NUMBER:costtime}ms",
                            "%{TIMESTAMP_ISO8601:logtime} %{DATA} %{LOGLEVEL:loglevel}  %{DATA:classpath} - REQUEST DATA : uri=%{URIPATHPARAM:request};client=%{IP:clientIp};payload=%{DATA:payload}];&&&&%{DATA:common_param}&&&&;耗時(shí):%{NUMBER:costtime}ms",
                            "%{TIMESTAMP_ISO8601:logtime}  %{LOGLEVEL:loglevel} %{DATA} %{DATA:classpath}    : %{DATA:logcontent} %{DATA:logcontent} %{DATA:logcontent} %{DATA:logcontent} %{DATA:logcontent} %{WORD:logdata}"]
            }
            # 過(guò)濾完成之后刪除多余字段,節(jié)約磁盤空間。
            remove_field => ["@version","host.name"]
        }
        # 拆分common_param字段(采用ruby插件)
        ruby {
            code => "
                if !event.get('common_param').nil? then
                    array1 = event.get('common_param').split('%')
                    array1.each do |temp1|
                        if temp1.nil? then
                            next
                        end
                        array2 = temp1.split('=')
                        key = array2[0]
                        value = array2[1]
                        if key.nil? then
                            next
                        end
                        event.set(key, value)
                    end
                end
            "
            # 移除message字段
            remove_field => [ "message" ]
        }
        # 如果是debug級(jí)別日志,直接拋棄掉這條日志
        if [loglevel] !~ "(ERROR|WARN|INFO)" {
            drop { }
        }
        
        # 拋棄掉grok解析失敗的日志
        if "_grokparsefailure" in [tags] {
            drop { }
        }
        # 使用日志時(shí)間替換logstash的時(shí)間戳
        date {
            match => ["logtime", "yyyy-MM-dd HH:mm:ss.SSS"]
            target => "@timestamp"
        }
    }
}
output {
  elasticsearch {
       hosts => ["elasticsearch:9200"]
       index => "filebeat-logstash-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

 

grok過(guò)濾的message對(duì)應(yīng)的五種日志形式示例:

2020-03-04 13:25:27.488 [http-nio-9000-exec-11] INFO com.xxx.classpath - oper log b peron login 231148

2020-03-04 14:19:34.428 [http-nio-9000-exec-8] INFO com.xxx.classpath - REQUEST DATA : uri=/url;client=10.13.180.91];&&&®ion=TW%platform=2%version=unknown%mobileModel=unknown%osVersion=unknown%connectType=unknown%uuid=unknown&&&&;耗時(shí):6ms

2020-03-07 08:09:51.890 [http-nio-9000-exec-3] INFO com.xxx.classpath - REQUEST DATA : uri=/url?offset=10&playerUserUuid=231002;client=10.13.180.36];&&&®ion=unknown%platform=1%version=unknown%mobileModel=unknown%osVersion=unknown%connectType=unknown%uuid=unknown&&&&;耗時(shí):126ms

2020-03-02 09:55:28.196 [http-nio-9000-exec-4] INFO com.xxx.classpath - REQUEST DATA : uri=/url;client=10.13.180.91;payload={“ticket”:“xxx”}];&&&®ion=TW%platform=3%version=unknown%mobileModel=unknown%osVersion=unknown%connectType=unknown%uuid=unknown&&&&;耗時(shí):45ms

2020-03-03 03:05:33.634 INFO 13175[io-9000-exec-12] com.xxx.classpath : oper log c peron login 254264

記得要映射logstash.yml中的兩個(gè)路徑。

docker run --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -it -d -p 5044:5044 --name logstash --net somenetwork -v /home/ec2-user/docker_config/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /home/ec2-user/docker_config/logstash/conf.d/:/home/ec2-user/docker_config/logstash/conf.d/ -v /home/ec2-user/docker_logs/logstash:/var/log/logstash logstash:7.5.1
查看容器運(yùn)行狀態(tài)
docker ps 

寫logstash配置,grok插件是必須要學(xué)會(huì)的。

安裝Kibana

Kibana是一個(gè)開源的分析與可視化平臺(tái),設(shè)計(jì)出來(lái)用于和Elasticsearch一起使用的。你可以用Kibana搜索、查看、交互存放在Elasticsearch索引里的數(shù)據(jù),使用各種不同的圖表、表格、地圖等Kibana能夠很輕易地展示高級(jí)數(shù)據(jù)分析與可視化。

# 在本例中,Kibana使用默認(rèn)配置
# 運(yùn)行 Kibana
docker run --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -d --name kibana --net somenetwork -p 5601:5601 kibana:7.5.1
# 查看容器啟動(dòng)狀態(tài)
docker ps
1

安裝Filebeat

Filebeat是本地文件的日志數(shù)據(jù)采集器,可監(jiān)控日志目錄或特定日志文件,并將它們轉(zhuǎn)發(fā)給Elasticsearch或Logstatsh進(jìn)行索引、Kafka等。帶有內(nèi)部模塊(Apache,Nginx,System和MySQL等),可通過(guò)一個(gè)指定命令來(lái)簡(jiǎn)化通用日志格式的收集,解析和可視化。

filebeat.yml配置,更多配置選項(xiàng)可以查看官網(wǎng)。

filebeat.inputs:
- type: log
  enabled: true
  # 需要收集的日志所在的位置,可使用通配符進(jìn)行配置
  paths:
    - /home/ec2-user/jenkins/logs/server-api/*.log
  # 這個(gè)文件記錄日志讀取的位置,如果容器重啟,可以從記錄的位置開始取日志
  registry_file: /home/ec2-user/docker_config/filebeat_registry
  # 為每個(gè)項(xiàng)目標(biāo)識(shí),或者分組,可區(qū)分不同格式的日志
  tags: ["java-logs"]
  exclude_lines: ['.*uri=/basic/time/current;.*']
# 日志輸出配置
output.logstash:
  # 內(nèi)網(wǎng)B機(jī)器的ip:port
  hosts: ['10.13.180.42:5044']
  enabled: true

docker運(yùn)行filebeat,映射需要的配置文件

docker run --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name filebeat -d -v /home/ec2-user/docker_config/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml -v /home/ec2-user/jenkins/logs/server-api/:/home/ec2-user/jenkins/logs/server-api/ -v /home/ec2-user/filebeat_collect/:/home/ec2-user/filebeat_collect/ -v /home/ec2-user/docker_config/filebeat_registry:/home/ec2-user/docker_config/filebeat_registry docker.io/store/elastic/filebeat:7.5.1

啟動(dòng)Kibana查看數(shù)據(jù)

如果沒(méi)有配置Kibana所在服務(wù)器域名的話,可以瀏覽器訪問(wèn)"ip:5601"來(lái)訪問(wèn),不過(guò)值得注意的是Kibana自身沒(méi)有安全限制,一般采用網(wǎng)關(guān)鑒權(quán)限制或者第三方安全插件,可以谷歌搜索下。

進(jìn)入Kibana,點(diǎn)擊下面Discover菜單。

快速搞定docker部署Filebeat、ELK全家桶

 

作為初學(xué)者,直接輸入"*",然后點(diǎn)擊"next step"。先別理會(huì)是什么,看看數(shù)據(jù)建立初始成就感很重要。

快速搞定docker部署Filebeat、ELK全家桶

 

選擇@timestamp作為時(shí)間坐標(biāo)。點(diǎn)擊"Create index pattern"。然后再次查看Discover菜單,就發(fā)現(xiàn)日志數(shù)據(jù)輸出到kibana了。

快速搞定docker部署Filebeat、ELK全家桶

 

Kibana常用功能說(shuō)明:

  1. Discover 數(shù)據(jù)搜索查看
  2. Visualize 圖標(biāo)制作
  3. Dashboard 儀表盤制作
  4. Timelion (新版本在Visualize下)時(shí)序數(shù)據(jù)的高級(jí)可視化分析
  5. DevTools 開發(fā)者工具
  6. Management 配置

總結(jié)

本文采用最簡(jiǎn)單粗暴的docker命令行進(jìn)行構(gòu)建,更好的構(gòu)建方式是采用docker compose方式

分享到:
標(biāo)簽:全家 ELK
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定