![容器化日誌收集方案-EFK](http://p2.ttnews.xyz/loading.gif)
前 言
本文將描述如何使用 elasticsearch、 fluentd 、 kibana構建容器化日誌收集系統
介 紹
elasticsearch:
- 一個分佈式的實時文檔存儲,每個字段 可以被索引與搜索
- 一個分佈式實時分析搜索引擎
- 能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據
kibana:
是一個針對Elasticsearch的開源分析及可視化平臺,用來搜索、查看交互存儲在Elasticsearch索引中的數據。
fluentd:
是日誌收集系統,通過豐富的插件,可以收集來自於各種系統或應用的日誌,然後根據用戶定義將日誌做分類處理。
Kafka:
是分佈式的、可分區的、可複製的消息系統。它提供了普通消息系統的功能,但具有自己獨特的設計
Kafka將消息以topic為單位進行歸納。 將向Kafka topic發佈消息的程序成為producers. 將預訂topics並消費消息的程序成為consumer.
如 何 安 裝
安裝kafka+zookeeper
參考:https://hub.docker.com/r/wurstmeister/kafka/
安裝elasticsearch+kibana:
docker run -d -v "$PWD/esdata":/usr/share/elasticsearch/data -p 9200:9200 elasticsearch
docker run --name kibana -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 -d kibana
安裝fluentd
1、自定義fluentd的Dockerfile
FROM fluent/fluentd:v1.2# below RUN includes plugin as examples elasticsearch is not required# you may customize including plugins as you wishRUN apk add --update --virtual .build-deps \
sudo \
build-base \
ruby-dev \
tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& sudo gem install fluent-plugin-elasticsearch \
&& sudo gem install fluent-plugin-kafka \
&& sudo gem sources --clear-all \
&& apk del .build-deps \
&& rm -rf /var/cache/apk/* \
/home/fluent/.gem/ruby/2.3.0/cache/*.gem
ENTRYPOINT ["fluentd", "-c", "/fluentd/etc/fluent.conf", "-p", "/fluentd/plugins"]
2、編寫fluent.conf
rpc_endpoint 127.0.0.1:24444
@type forward @id forward_input
@type tail #### tail方式採集日誌
#format none
format /^(?.*)$/
path /log/log.txt
pos_file /log/pos_file/httpd-access.log.pos
tag log.tag
@type copy
@type elasticsearch
hosts localhost:9200
type_name elasticsearch_fluentd
include_tag_key true
tag_key log_name
flush_interval 10s # for testing
logstash_format true
logstash_prefix logstash
@type kafka
brokers localhost:9092 #zookeeper localhost:2181
default_topic fluent_kafka #刷新間隔
flush_interval 30
ack_timeout 2000
output_data_type attr:all
@type monitor_agent @id monitor_agent_input
port 24220
@type stdout
3、構建fluentd image:
docker build -t fluentd:test -f Dockerfile .
4、啟動fluentd
docker run -it --rm --name fluent_test -v $(pwd)/log/:/log/ -v $(pwd)/:/fluentd/etc/ fluentd:test
說明:
配置fluentd的RPC 為了重新加載fluentd.conf文件 參考:https://docs.fluentd.org/v1.0/articles/rpc
rpc_endpoint 127.0.0.1:24444
測 試
增加這個文件的日誌 echo test > $(pwd)/log/log.txt
在kibana中進行日誌查看:
![容器化日誌收集方案-EFK](http://p2.ttnews.xyz/loading.gif)
修改fluent.conf
tag_key log_name 修改為tag_key log_name_key執行curl http://127.0.0.1:24444/api/config.reload
即可以重新加載fluent.conf配置文件,使其生效 繼續向log.txt寫入日誌 fluentd向kafka寫入日誌進入kafka的container中執行
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic fluent_kafka --from-beginning
附上kafka基本命令
創建topic 這裡創建的topic為:bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic 查看topicking bin/kafka-topics.sh --list --zookeeper zookeeper:2181掛起生產者:producerbin/kafka-console-producer.sh --broker-list localhost:9092 --topic test掛起之後,就可以輸入信息:test掛起消費者: consumer:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning在consulmer就可以看到生產出來的:test至此完成了基本的elk 和fluent+kafka+zookeeper的日誌系統
在kubernets中使用DaemonSet 來獲取主機日誌或docker container日誌參考:
https://docs.fluentd.org/v1.0/articles/quickstart
https://www.elastic.co/products
本文原文鏈接:https://mp.weixin.qq.com/s/45xXYHDkyhD0QEVh_KPyVg
關於Wise2C睿雲智合
深圳睿雲智合科技有限公司成立於2012年,總部位於深圳,並分別在成都、深圳設立了研發中心,北京、上海設立了分支機構,核心骨幹人員全部為來自金融、科技行業知名企業資深業務專家、技術專家。早期專注於為中國金融保險等大型企業提供創新技術、電子商務、CRM等領域專業諮詢服務。
自2016年始,在率先將容器技術引進到中國保險行業客戶後,公司組建了專業的容器技術產品研發和實施服務團隊,旨在幫助中國金融行業客戶將容器創新技術應用於企業信息技術支持業務發展的基礎能力改善與提升,成為中國金融保險行業容器技術服務領導品牌。
此外,憑藉多年來在呼叫中心領域的業務經驗與技術積累,睿雲智合率先在業界推出基於開源軟交換平臺FreeSwitch的微服務架構多媒體數字化業務平臺,將語音、視頻、webchat、微信、微博等多種客戶接觸渠道集成,實現客戶統一接入、精準識別、智能路由的CRM策略,並以容器化治理來支持平臺的全應用生命週期管理,顯著提升了數字化業務處理的靈活、高效、彈性、穩定等特性,為幫助傳統企業向“以客戶為中心”的數字化業務轉型提供完美的一站式整體解決方案。
客戶&合作伙伴
閱讀更多 睿雲智合Wise2C 的文章