日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

容器日志管理 (2) 开源日志管理方案 ELK/EFK

發(fā)布時(shí)間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 容器日志管理 (2) 开源日志管理方案 ELK/EFK 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


本篇已加入《.NET Core on K8S學(xué)習(xí)實(shí)踐系列文章索引》,可以點(diǎn)擊查看更多容器化技術(shù)相關(guān)系列文章。上一篇《容器日志管理(1)》中介紹了Docker自帶的logs子命令以及其Logging driver,本篇將會(huì)介紹一個(gè)流行的開源日志管理方案ELK/EFK。

01

關(guān)于ELK

ELK簡(jiǎn)介

????????ELK 是Elastic公司提供的一套完整的日志收集以及展示的解決方案,是三個(gè)產(chǎn)品的首字母縮寫,分別是ElasticSearchLogstash?和?Kibana

  • Elasticsearch是實(shí)時(shí)全文搜索和分析引擎,提供搜集、分析、存儲(chǔ)數(shù)據(jù)三大功能

  • Logstash是一個(gè)用來搜集、分析、過濾日志的工具

  • Kibana是一個(gè)基于Web的圖形界面,用于搜索、分析和可視化存儲(chǔ)在 Elasticsearch指標(biāo)中的日志數(shù)據(jù)? 

ELK日志處理流程

?  上圖展示了在Docker環(huán)境下,一個(gè)典型的ELK方案下的日志收集處理流程:

  • Logstash從各個(gè)Docker容器中提取日志信息

  • Logstash將日志轉(zhuǎn)發(fā)到ElasticSearch進(jìn)行索引和保存

  • Kibana負(fù)責(zé)分析和可視化日志信息

  由于Logstash在數(shù)據(jù)收集上并不出色,而且作為Agent,其性能并不達(dá)標(biāo)。基于此,Elastic發(fā)布了beats系列輕量級(jí)采集組件。

  這里我們要實(shí)踐的Beat組件是Filebeat,Filebeat是構(gòu)建于beats之上的,應(yīng)用于日志收集場(chǎng)景的實(shí)現(xiàn),用來替代?Logstash Forwarder?的下一代?Logstash?收集器,是為了更快速穩(wěn)定輕量低耗地進(jìn)行收集工作,它可以很方便地與?Logstash?還有直接與?Elasticsearch?進(jìn)行對(duì)接。

  本次實(shí)驗(yàn)直接使用Filebeat作為Agent,它會(huì)收集我們?cè)诘谝黄禗ocker logs & logging driver》中介紹的json-file的log文件中的記錄變動(dòng),并直接將日志發(fā)給ElasticSearch進(jìn)行索引和保存,其處理流程變?yōu)橄聢D,你也可以認(rèn)為它可以稱作 EFK。

02

ELK/EFK套件的安裝與運(yùn)行

???????本次實(shí)驗(yàn)我們采用Docker方式部署一個(gè)最小規(guī)模的ELK運(yùn)行環(huán)境,當(dāng)然,實(shí)際環(huán)境中我們或許需要考慮高可用和負(fù)載均衡。

  首先拉取一下sebp/elk這個(gè)集成鏡像,這里選擇的tag版本是640(最新版本已經(jīng)是7XX了):

docker pull sebp/elk:640

  注:由于其包含了整個(gè)ELK方案,所以需要耐心等待一會(huì)。

  通過以下命令使用sebp/elk這個(gè)集成鏡像啟動(dòng)運(yùn)行ELK:

docker run -it -d --name elk \ -p 5601:5601 \ -p 9200:9200 \ -p 5044:5044 \ sebp/elk:640

  運(yùn)行完成之后就可以先訪問一下 http://[Your-HostIP]:5601 看看Kibana的效果:  

  Kibana管理界面

Kibana Index Patterns界面

  當(dāng)然,目前沒有任何可以顯示的ES的索引和數(shù)據(jù),再訪問一下http://[Your-HostIP]:9200 看看ElasticSearch的API接口是否可用:

ElasticSearch API

  Note:如果啟動(dòng)過程中發(fā)現(xiàn)一些錯(cuò)誤,導(dǎo)致ELK容器無(wú)法啟動(dòng),可以參考《Docker啟動(dòng)ElasticSearch報(bào)錯(cuò)》及《ElasticSearch啟動(dòng)常見錯(cuò)誤》一文。如果你的主機(jī)內(nèi)存低于4G,建議增加配置設(shè)置ES內(nèi)存使用大小,以免啟動(dòng)不了。例如下面增加的配置,限制ES內(nèi)存使用最大為1G:

docker run -it -d --name elk \ -p 5601:5601 \ -p 9200:9200 \ -p 5044:5044 \   -e ES_MIN_MEM=512m \ -e ES_MAX_MEM=1024m \ sebp/elk:640

03

Filebeat配置

安裝Filebeat

這里我們通過rpm的方式下載Filebeat,注意這里下載和我們ELK對(duì)應(yīng)的版本(ELK是6.4.0,這里也是下載6.4.0,避免出現(xiàn)錯(cuò)誤):

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.0-x86_64.rpmrpm -ivh filebeat-6.4.0-x86_64.rpm

配置Filebeat

????????這里我們需要告訴Filebeat要監(jiān)控哪些日志文件 及 將日志發(fā)送到哪里去,因此我們需要修改一下Filebeat的配置:

cd /etc/filebeatvim filebeat.yml

  要修改的內(nèi)容為:

  (1)監(jiān)控哪些日志?

filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so# you can use different inputs for various configurations.# Below are the input specific configurations.
- type: log
# Change to true to enable this input configuration. enabled: true
# Paths that should be crawled and fetched. Glob based paths. paths: - /var/lib/docker/containers/*/*.log - /var/log/syslog

  這里指定paths:/var/lib/docker/containers/*/*.log,另外需要注意的是將 enabled 設(shè)為 true。

  (2)將日志發(fā)到哪里?

#-------------------------- Elasticsearch output ------------------------------output.elasticsearch: # Array of hosts to connect to. hosts: ["192.168.16.190:9200"]
# Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" #password: "changeme"

  這里指定直接發(fā)送到ElasticSearch,配置一下ES的接口地址即可。

  Note:如果要發(fā)到Logstash,請(qǐng)使用后面這段配置,將其取消注釋進(jìn)行相關(guān)配置即可:

#----------------------------- 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: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication #ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key #ssl.key: "/etc/pki/client/cert.key"

啟動(dòng)Filebeat

???????由于Filebeat在安裝時(shí)已經(jīng)注冊(cè)為systemd的服務(wù),所以只需要直接啟動(dòng)即可:

systemctl start filebeat.service

  檢查Filebeat啟動(dòng)狀態(tài):

systemctl status filebeat.service

驗(yàn)證Filebeat

????????通過訪問ElasticSearch API可以發(fā)現(xiàn)以下變化:ES建立了以filebeat-開頭的索引,我們還能夠看到其來源及具體的message。

04

Kibana配置

????????接下來我們就要告訴Kibana,要查詢和分析ElasticSearch中的哪些日志,因此需要配置一個(gè)Index Pattern。從Filebeat中我們知道Index是filebeat-timestamp這種格式,因此這里我們定義Index Pattern為 filebeat-*

  點(diǎn)擊Next Step,這里我們選擇Time Filter field name為@timestamp

  單擊Create index pattern按鈕,即可完成配置。

  這時(shí)我們單擊Kibana左側(cè)的Discover菜單,即可看到容器的日志信息啦:

  仔細(xì)看看細(xì)節(jié),我們關(guān)注一下message字段:

  可以看到,我們重點(diǎn)要關(guān)注的是message,因此我們也可以篩選一下只看這個(gè)字段的信息:

  此外,Kibana還提供了搜索關(guān)鍵詞的日志功能,例如這里我關(guān)注一下日志中包含unhandled exception(未處理異常)的日志信息:

  這里只是樸素的展示了導(dǎo)入ELK的日志信息,實(shí)際上ELK還有很多很豐富的玩法,例如分析聚合、炫酷Dashboard等等。筆者在這里也是初步使用,就介紹到這里啦。

05

Fluentd引入

關(guān)于Fluentd

????????前面我們采用的是Filebeat收集Docker的日志信息,基于Docker默認(rèn)的json-file這個(gè)logging driver,這里我們改用Fluentd這個(gè)開源項(xiàng)目來替換json-file收集容器的日志。

  Fluentd是一個(gè)開源的數(shù)據(jù)收集器,專為處理數(shù)據(jù)流設(shè)計(jì),使用JSON作為數(shù)據(jù)格式。它采用了插件式的架構(gòu),具有高可擴(kuò)展性高可用性,同時(shí)還實(shí)現(xiàn)了高可靠的信息轉(zhuǎn)發(fā)。Fluentd也是云原生基金會(huì) (CNCF) 的成員項(xiàng)目之一,遵循Apache 2 License協(xié)議,其github地址為:https://github.com/fluent/fluentd/。Fluentd與Logstash相比,比占用內(nèi)存更少、社區(qū)更活躍,兩者的對(duì)比可以參考這篇文章《Fluentd vs Logstash》。

  因此,整個(gè)日志收集與處理流程變?yōu)橄聢D,我們用 Filebeat 將 Fluentd 收集到的日志轉(zhuǎn)發(fā)給 Elasticsearch。

?  當(dāng)然,我們也可以使用Fluentd的插件(fluent-plugin-elasticsearch)直接將日志發(fā)送給 Elasticsearch,可以根據(jù)自己的需要替換掉Filebeat,從而形成Fluentd => ElasticSearch => Kibana 的架構(gòu),也稱作EFK

運(yùn)行Fluentd

????????這里我們通過容器來運(yùn)行一個(gè)Fluentd采集器:

docker?run?-d?-p?24224:24224?-p?24224:24224/udp?\ -v?/edc/fluentd/log:/fluentd/log?\ fluent/fluentd

  默認(rèn)Fluentd會(huì)使用24224端口,其日志會(huì)收集在我們映射的路徑下。

  此外,我們還需要修改Filebeat的配置文件,將/edc/fluentd/log加入監(jiān)控目錄下:

#=========================== Filebeat inputs =============================
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so# you can use different inputs for various configurations.# Below are the input specific configurations.
- type: log
# Change to true to enable this input configuration. enabled: true
# Paths that should be crawled and fetched. Glob based paths. paths: - /edc/fluentd/log/*.log

  添加監(jiān)控配置之后,需要重新restart一下filebeat:

systemctl restart filebeat

運(yùn)行測(cè)試容器

????????為了驗(yàn)證效果,這里我們Run兩個(gè)容器,并分別制定其log-dirver為fluentd:

docker run -d \ --log-driver=fluentd \ --log-opt fluentd-address=localhost:24224 \ --log-opt tag="test-docker-A" \ busybox sh -c 'while true; do echo "This is a log message from container A"; sleep 10; done;'
docker run -d \ --log-driver=fluentd \ --log-opt fluentd-address=localhost:24224 \ --log-opt tag="test-docker-B" \ busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'

  這里通過指定容器的log-driver,以及為每個(gè)容器設(shè)立了tag,方便我們后面驗(yàn)證查看日志。

驗(yàn)證

????????這時(shí)再次進(jìn)入Kibana中查看日志信息,便可以通過剛剛設(shè)置的tag信息篩選到剛剛添加的容器的日志信息了:

06

小結(jié)

本文從ELK的基本組成入手,介紹了ELK的基本處理流程,以及從0開始搭建了一個(gè)ELK環(huán)境,演示了基于Filebeat收集容器日志信息的案例。然后,通過引入Fluentd這個(gè)開源數(shù)據(jù)收集器,演示了如何基于EFK的日志收集案例。當(dāng)然,ELK/EFK有很多的知識(shí)點(diǎn),筆者也還只是初步使用,希望未來能夠分享更多的實(shí)踐總結(jié)。

參考資料:

CloudMan,《每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)》

一杯甜酒,《ELK學(xué)習(xí)總結(jié)》

于老三,《快速搭建ELK日志分析系統(tǒng)》

zpei0411,《Logstash beats系列 & Fluentd》

曹林華,《從ELK到EFK的演進(jìn)》


點(diǎn)個(gè)【在看】,和更多人一起分享!

總結(jié)

以上是生活随笔為你收集整理的容器日志管理 (2) 开源日志管理方案 ELK/EFK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。