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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

深入浅出ELK日志收集系统搭建

發布時間:2024/3/13 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出ELK日志收集系统搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看一下目錄圖

背景

試想這么一種場景:Nginx負載了2個Tomcat,那么日志查看就很麻煩了,每次查看日志都要登錄2臺服務器,挨個搜索,2臺還好,如果5臺呢?10臺呢?那查看日志就可費勁了,所以需要一款日志收集系統,集中管理日志,一個完整的集中式日志系統,是離不開以下幾個主要特點的。

  • 收集-能夠采集多種來源的日志數據* 傳輸-能夠穩定的把日志數據傳輸到中央系統* 存儲-如何存儲日志數據* 分析-可以支持 UI 分析* 警告-能夠提供錯誤報告,監控機制

最好還是免費開源的,所以ELK技術棧登場了,ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先后歸于 Elastic.co 公司名下,所以被簡稱為 ELK

  • Elasticsearch:分布式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點。基于 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有復雜的搜索功能;* Logstash:數據收集引擎。它支持動態的從各種數據源搜集數據,并對數據進行過濾、分析、豐富、統一格式等操作,然后存儲到用戶指定的位置;* Kibana:數據分析和可視化平臺。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;* Filebeat:ELK 協議棧的新成員,一個輕量級開源日志文件數據搜集器,基于 Logstash-Forwarder 源代碼開發,是對它的替代。在需要采集日志數據的 server 上安裝 Filebeat,并指定日志目錄或日志文件后,Filebeat 就能讀取數據,迅速發送到 Logstash 進行解析,亦或直接發送到 Elasticsearch 進行集中式存儲和分析。

本教程說明了下面三種架構的實戰操作以及選擇此種架構的原因,由簡單到復雜,組件由少到多,由淺入深,建議先看簡單的架構,在簡單架構的基礎之上逐步深入

  • 最簡單架構搭建(Logstash作為日志收集器)* 輕量級日志收集架構搭建(Beats作為日志收集器)* 在Beat的基礎上引入消息隊列機制的架構

本教程的搭建基于docker,在docker中運行CentOS容器進行搭建,目的是演示搭建過程,如果不熟悉docker你可以簡單理解為下面這條命令創建了一個獨立的系統用于專門安裝ElasticSearch:

docker run -dit --name es --privileged centos /usr/sbin/init

選擇docker的原因:

  • 不用創建很多虛擬機,只用一個docker容器就可以模擬一個獨立完整的系統環境,方便快捷* 模擬出來的系統環境都是最干凈的,干凈的系統安裝軟件可以更清楚地梳理依賴關系

版本對照關系表

參考:https://www.elastic.co/cn/support/matrix#matrix_compatibility

在此(2021-01-14)我們都用最新版的ELK,即ELK的版本都為7.10.1

最簡單的架構搭建(Logstash作為日志收集器)

首先創建網絡,如果已經創建了則不管,注意docker不允許默認網絡指定ip,所以要手動創建網絡

docker network create --subnet=172.18.0.0/16 mynet

然后準備四個容器,兩個專門安裝Logstash,一個安裝ES,另外一個安裝Kibana

# Logstash容器 docker run -dit --net mynet --ip 172.18.0.10 --name log1 --privileged centos /usr/sbin/init docker run -dit --net mynet --ip 172.18.0.11 --name log2 --privileged centos /usr/sbin/init# elasticsearch容器 docker run -dit --net mynet --ip 172.18.0.12 --name es --privileged centos /usr/sbin/init# kibana容器,映射一個外網端口用于宿主機訪問 docker run -dit --net mynet --ip 172.18.0.13 -p 5601:5601 --name kb --privileged centos /usr/sbin/init

各個組件IP如下

172.18.0.10 > Logstash 172.18.0.12 > ElasticSearch 172.18.0.13 > Kibana

安裝Java環境

因為Logstash和ElasticSearch都是基于Java平臺的,所以先安裝Java環境,進入容器安裝,進入容器命令docker exec -it log1 bash,其他容器同理

# 安裝java yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel which# 環境變量設置 cat > /etc/profile.d/java8.sh <<EOF export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac))))) export PATH=\$PATH:\$JAVA_HOME/bin export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar EOF source /etc/profile.d/java8.sh

安裝ElasticSearch

參考: 安裝并運行 Elasticsearch

首先進入容器

docker exec -it es bash

常用工具安裝

yum install -y wget

在Download Elasticsearch選擇合適的平臺下載好包,我下載的是elasticsearch-7.10.1-linux-x86_64.tar.gz

# 下載 cd ~ && wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-linux-x86_64.tar.gz# 解壓 tar -zxvf elasticsearch-7.10.1-linux-x86_64.tar.gz# 拷貝 cp -r elasticsearch-7.10.1 /usr/local/# 運行 /usr/local/elasticsearch-7.10.1/bin/elasticsearch

運行后此時你會得到一個報錯:java.lang.RuntimeException: can not run elasticsearch as root

原因很明顯,不能用root運行,那么新建用戶再運行

# 新建用戶 adduser elasticsearch# 賦權 chown -R elasticsearch /usr/local/elasticsearch-7.10.1# 切換用戶再執行 su elasticsearch /usr/local/elasticsearch-7.10.1/bin/elasticsearch# 后臺執行 /usr/local/elasticsearch-7.10.1/bin/elasticsearch -d

測試,如果curl 127.0.0.1:9200有類似以下回顯說明成功

{"name" : "74e37036a2ee","cluster_name" : "elasticsearch","cluster_uuid" : "L8xK0ZqZSUKn3dZ05NJfcg","version" : {"number" : "7.10.1","build_flavor" : "default","build_type" : "tar","build_hash" : "1c34507e66d7db1211f66f3513706fdf548736aa","build_date" : "2020-12-05T01:00:33.671820Z","build_snapshot" : false,"lucene_version" : "8.7.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search" }

修改配置文件及問題排查

此時發現只能用127.0.0.1訪問,不能用?curl 172.18.0.12:9200訪問,因為沒設置network.host,下面設置一下,順便加上允許跨域的設置http.cors.enabled、http.cors.allow-origin,sed -i ‘$a內容’ file?是在文件末尾追加

sed -i '$ahttp.cors.enabled: true' /usr/local/elasticsearch-7.10.1/config/elasticsearch.yml sed -i '$ahttp.cors.allow-origin: "*"' /usr/local/elasticsearch-7.10.1/config/elasticsearch.yml sed -i '$anetwork.host: 172.18.0.12' /usr/local/elasticsearch-7.10.1/config/elasticsearch.yml

此時啟動es,發現啟動失敗,報錯如下:

[2021-01-13T13:46:30,780][INFO ][o.e.t.TransportService ] [a622d8352de5] publish_address {172.18.0.12:9300}, bound_addresses {172.18.0.12:9300} [2021-01-13T13:46:31,039][INFO ][o.e.b.BootstrapChecks ] [a622d8352de5] bound or publishing to a non-loopback address, enforcing bootstrap checks [2021-01-13T13:46:31,066][ERROR][o.e.b.Bootstrap ] [a622d8352de5] node validation exception [2] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured [2021-01-13T13:46:31,069][INFO ][o.e.n.Node ] [a622d8352de5] stopping ... [2021-01-13T13:46:31,094][INFO ][o.e.n.Node ] [a622d8352de5] stopped [2021-01-13T13:46:31,095][INFO ][o.e.n.Node ] [a622d8352de5] closing ... [2021-01-13T13:46:31,116][INFO ][o.e.n.Node ] [a622d8352de5] closed [2021-01-13T13:46:31,119][INFO ][o.e.x.m.p.NativeController] [a622d8352de5] Native controller process has stopped - no new native processes can be started

注意看這句話:bound or publishing to a non-loopback address, enforcing bootstrap checks,綁定的不是本地回環接口,強制進行啟動檢查,es認為綁定的不是127.0.0.1就是要用于生產環境,所以要啟動一下適用于生產環境的強制性檢查,檢查出不適合的條件就不讓啟動!所需需要修改如下錯誤:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
  • [1]
# 切換到root用戶執行 sed -i '$avm.max_map_count=262144' /etc/sysctl.conf sysctl -p
  • [2]
# 追加這句配置 sed -i '$adiscovery.seed_hosts: ["172.18.0.12"]' /usr/local/elasticsearch-7.10.1/config/elasticsearch.yml

此時再次啟動就不會報錯了,如果還是報錯,請根據es的報錯提示進行更改

試一下用本機IP能訪問不:curl 172.18.0.12:9200

安裝Logstash

先安裝好Java環境,然后下載源碼安裝,本例用的是7.10.1,其他版本參考:https://www.elastic.co/cn/downloads/logstash

cd ~ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.1-linux-x86_64.tar.gz tar xf logstash-7.10.1-linux-x86_64.tar.gz -C /usr/local mv /usr/local/logstash-7.10.1 /usr/local/logstash# 看一下版本 /usr/local/logstash/bin/logstash -V

測試一下

/usr/local/logstash/bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

稍等幾秒鐘,因為JVM啟動有延遲,然后隨便輸入東西,然后有類似于如下輸出說明成功運行,如果不知道Logstash安裝在哪里,可以全局搜索一下find / -name logstash

{"message" => "Hello world","@version" => "1","host" => "1964ebd516a7","@timestamp" => 2021-01-14T04:42:35.054Z }

Logstash原理為:input > filter > putput,日志輸入,過濾,然后再輸出,此處我們的目的是為了保存到es,方便起見,input為從網絡輸入(當然也可以設置為從文件輸入,參考:讀取文件),output設置為ES,暫時不設置過濾器

# 生成配置文件,注意es的ip要設置成上面配置的ip cat > ~/log.conf <<EOF input {tcp {port => 8888mode => "server"ssl_enable => false} } filter {} output {elasticsearch {hosts => ["172.18.0.12:9200"]index => "log1_log"}stdout {codec => rubydebug} } EOF # 啟動 /usr/local/logstash/bin/logstash -f ~/log.conf

測試,新開一個終端,鍵入如下命令

# 用nc命令連接到Logstash的input上并輸入test echo 'test' | nc 127.0.0.1 8888 # 后面測試的時候,可以多生成測試數據,便于觀察 while true;do echo 'test' | nc 127.0.0.1 8888; sleep 1;done

如果發現es控制臺有如下輸出,說明保存es成功

[2021-01-14T12:58:23,336][INFO ][o.e.c.m.MetadataCreateIndexService] [a622d8352de5] [log1_log] creating index, cause [auto(bulk api)], templates [], shards [1]/[1] [2021-01-14T12:58:23,751][INFO ][o.e.c.m.MetadataMappingService] [a622d8352de5] [log1_log/eAhjtb_sQGONcTPdOv__oQ] create_mapping [_doc]

安裝Kibana

下載安裝,如果需要其他版本請參考https://www.elastic.co/cn/downloads/kibana

cd ~ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.1-linux-x86_64.tar.gz tar xf kibana-7.10.1-linux-x86_64.tar.gz -C /usr/local mv /usr/local/kibana-7.10.1-linux-x86_64 /usr/local/kibana

執行

/usr/local/kibana/bin/kibana# 發現報錯 # Kibana should not be run as root. Use --allow-root to continue.

新建用戶并執行

# 新建用戶 adduser kibana# 賦權 chown -R kibana /usr/local/kibana # 切換用戶再執行 su kibana /usr/local/kibana/bin/kibana# 發現報錯,連不上es,因為默認連的是本地的es # log [13:18:02.226] [error][data][elasticsearch] [ConnectionError]: connect ECONNREFUSED 127.0.0.1:9200

配置kibana

# 配置es sed -i '$aelasticsearch.hosts: ["http://172.18.0.12:9200"]' /usr/local/kibana/config/kibana.yml# 允許所有訪問 sed -i '$aserver.host: "0.0.0.0"' /usr/local/kibana/config/kibana.yml# 端口server.port 默認是5601,不用管 # elasticsearch.username 和 elasticsearch.password是es的用戶名和密碼,沒有就不用配置

重新啟動,發現報錯

FATAL Error: EACCES: permission denied, stat '*/.i18nrc.json'

賦權一下,再啟動

chmod 755 /usr/local/kibana/.i18nrc.json

在宿主機訪問http://192.168.108.100:5601,之前我們映射過端口5601到宿主機,192.168.108.100換成你自己的ip,如下為訪問成功的頁面

Kibana操作

發現最新版的Kibana有變化了,首先它要求我們根據已有的所有來創建一個視圖,如下圖所示

然后點擊Discover就會發現有日志數據了

輕量級日志收集架構搭建(Beats作為日志收集器)

為什么使用 Filebeat

Logstash 是一個 Java 程序,當作為收集日志的 Agent 時,顯得太臃腫了。啟動的時候都要等幾秒才能看到輸出,之前聽過一個公司(斗魚)使用 Logstash 作為日志收集 Agent 時,資源占用好像比業務進程占用還多!這已經本末倒置了!

其實有這么一個工具:Filebeat,官方給 Filebeat 的定義就是輕量級的日志收集工具。

Filebeat 是基于原先 logstash-forwarder 的源碼改造出來的。換句話說:Filebeat 就是新版的 logstash-forwarder,也會是 ELK Stack 在 shipper 端的第一選擇。

這種架構引入 Beats 作為日志搜集器。目前 (2021-01-15)Beats 包括:

BeatDescriptionAuditbeatCollect your Linux audit framework data and monitor the integrity of your files:Linux審計日志收集FilebeatTails and ships log files:搜集文件數據FunctionbeatRead and ships events from serverless infrastructure:面向云端數據的收集HeartbeatPing remote services for availability:遠程服務是否可用,心跳檢測JournalbeatRead and ships event from Journald:收集Linux中journald的日志MetricbeatFetches sets of metrics from the operating system and services:進行指標采集,監控性能PacketbeatMonitors the network and applications by sniffing packets:搜集網絡流量數據WinlogbeatFetches and ships Windows Event logs:收集WIndows事件日志數據

Beats 將搜集到的數據發送到 Logstash,經 Logstash 解析、過濾后,將其發送到 Elasticsearch 存儲,并由 Kibana 呈現給用戶。

這種架構解決了 Logstash 在各服務器節點上占用系統資源高的問題。相比 Logstash,Beats 所占系統的 CPU 和內存幾乎可以忽略不計。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和服務器雙向認證,保證了通信安全。如下圖所示

搭建

搭建之前需要先熟悉最簡單架構搭建(Logstash作為日志收集器),也是在其基礎之上進行搭建的,各個組件IP如下

172.18.0.10 > Logstash 172.18.0.12 > ElasticSearch 172.18.0.13 > Kibana 172.18.0.20 > Filebeat

安裝Filebeat

我們就以最常見的文件日志收集為例,首先創建一個容器

docker run -dit --net mynet --ip 172.18.0.20 --name fb --privileged centos /usr/sbin/init

下載filebeat,此處使用的版本是7.10.1,需要其他版本請參考https://www.elastic.co/cn/downloads/beats/filebeat

cd ~ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.1-linux-x86_64.tar.gz tar xf filebeat-7.10.1-linux-x86_64.tar.gz -C /usr/local mv /usr/local/filebeat-7.10.1-linux-x86_64 /usr/local/filebeat

Filebeat輸出到ElasticSearch

# 備份 cp /usr/local/filebeat/filebeat.yml /usr/local/filebeat/filebeat.yml.bak# 編輯配置 vi /usr/local/filebeat/filebeat.yml
  • 配置輸出到ES的配置
  • # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch:# 開啟了elasticsearch的輸出enabled: true# Array of hosts to connect to.hosts: ["172.18.0.12:9200"]
  • 關閉輸出到Logstash的配置,因為默認是關閉的,所以不用管
  • 輸入配置
  • # ============================== Filebeat inputs ===============================filebeat.inputs: - type: log# 此處一定要改成true,否則不生效enabled: true# 路徑可以寫多個paths:- /var/log/*.log
  • 修改索引名字,filebeat 7 默認索引名字為filebeat-7.10.1-2021.01.16-000001,ElasticStack從2019年1月29日的6.6.0版本的開始,引入了索引生命周期管理的功能,新版本的Filebeat則默認的配置開啟了ILM,導致索引的命名規則被ILM策略控制。所以要先關閉再修改索引
  • # ======================= Elasticsearch template setting ======================= # 關閉ilm setup.ilm.enabled: false # 索引模板名字 setup.template.name: "filebeat-to-es-log" # 索引模板匹配 setup.template.pattern: "filebeat-to-es-log-*"# ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch:hosts: ["172.18.0.12:9200"]# 這里定義索引名字index: "filebeat-to-es-log-%{+yyyy.MM.dd}"
  • 保存退出并且以配置文件啟動
  • /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml -e
  • 測試
  • # 創建文件 touch /var/log/my.log# 循環寫入到測試文件 while true;do echo 'test_filebeat_to_ES_my_log' >> /var/log/my.log;sleep 1;done

    打開Kibana觀察,可以看到已經收集到日志了

    如果你左上角沒找到新建的pattern,需要新建一個Kibana的索引pattern,如下圖

    Filebeat輸出到Logstash

    為什么要設置filebeat輸出到Logstash?因為Logstash可以對輸入的日志信息進行二次處理!

    Logstash配置

    注意索引名字換成filebeat-to-logstash-log,好和最開始的索引名字作區分,否則的話會因為fields不一樣導致存儲不成功!

    # 生成配置文件,監聽5044端口讓filebeat輸入,輸出到es,并打印到控制臺 cat > ~/log.conf <<EOF input { beats {port => "5044"} } filter {} output {elasticsearch {hosts => ["172.18.0.12:9200"]index => "filebeat-to-logstash-log"}stdout {codec => rubydebug} } EOF # 啟動 /usr/local/logstash/bin/logstash -f ~/log.conf

    Filebeat配置

    # 備份 cp /usr/local/filebeat/filebeat.yml /usr/local/filebeat/filebeat.yml.bak# 編輯配置 vi /usr/local/filebeat/filebeat.yml
  • 關閉輸出到ES的配置
  • # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch:# 關閉了elasticsearch的輸出enabled: false# Array of hosts to connect to.hosts: ["172.18.0.12:9200"]# Protocol - either `http` (default) or `https`.#protocol: "https"# Authentication credentials - either API key or username/password.#api_key: "id:api_key"#username: "elastic"#password: "changeme"
  • 打開輸出到Logstash的配置
  • # ------------------------------ Logstash Output ------------------------------- output.logstash:# 打開logstash的輸出enabled: true# The Logstash hostshosts: ["172.18.0.10:5044"]
  • 輸入配置
  • # ============================== Filebeat inputs ===============================filebeat.inputs: - type: log# 此處一定要改成true,否則不生效enabled: true# 路徑可以寫多個paths:- /var/log/*.log
  • 保存退出并且以配置文件啟動
  • /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml -e

    測試

    # 創建文件 touch /var/log/my.log# 循環寫入到測試文件 while true;do echo 'test_filebeat_to_logstash_my_log' >> /var/log/my.log;sleep 1;done

    打開Kibana觀察,可以看到已經收集到日志了

    [圖片上傳失敗…(image-efacc5-1611459978287)

    在Beat的基礎上引入消息隊列機制的架構

    這種架構適合于日志規模比較龐大的情況。但由于 Logstash 日志解析節點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列,均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性,但依然存在 Logstash 占用系統資源過多的問題。架構圖如下

    這里使用Kafka而不是用Redis的原因如下:

    • Redis是內存型,而Kafka是硬盤型,日志畢竟是很大的數據,所以作為緩沖,放到Kafka里更合適;* kafka中已經被處理的日志也是會繼續保存的,直到超過自己設定的過期時間,而redis不是;* kafka生態比較好,可以方便地和流處理工具集成

    綜上:redis適合日志量比較小的系統,而kafka適用于比較大的日志。因為都需要保證高可用,推薦搭建Kafka集群。

    搭建

    搭建之前需要先熟悉最簡單架構搭建(Logstash作為日志收集器)輕量級日志收集架構搭建(Beats作為日志收集器),是在其基礎之上進行搭建的,各個組件IP如下

    172.18.0.10 > Logstash 172.18.0.12 > ElasticSearch 172.18.0.13 > Kibana 172.18.0.20 > Filebeat 172.18.0.21 > Kafka

    安裝kafka

    首先創建一個容器

    docker run -dit --net mynet --ip 172.18.0.21 --name kafka --privileged centos /usr/sbin/init

    安裝java環境,參考**最簡單架構搭建(Logstash作為日志收集器)**中的安裝Java環境

    下載源碼,可參考官網:APACHE KAFKA QUICKSTART,安裝

    # 安裝 cd ~ wget https://mirror.bit.edu.cn/apache/kafka/2.7.0/kafka_2.12-2.7.0.tgz tar xf kafka_2.12-2.7.0.tgz -C /usr/local mv /usr/local/kafka_2.12-2.7.0 /usr/local/kafka

    啟動,兩個ssh,一個跑zookeeper,一個跑kafka

    # 啟動 cd /usr/local/kafka # kafka依賴zookeeper,所以先啟動zookeeper,官網有下面一段話,意思是說說很快就不會依賴zookeeper了 # Note: Soon, ZooKeeper will no longer be required by Apache Kafka. bin/zookeeper-server-start.sh config/zookeeper.properties # 新開一個ssh,啟動kafka bin/kafka-server-start.sh config/server.properties

    測試,新開兩個ssh,創建主題,一個跑生產者,一個跑消費者,在生產者鍵入任意消息在消費者能看得到說明成功!

    cd /usr/local/kafka # 創建主題quickstart-events bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092# 第一個ssh啟動生產者 cd /usr/local/kafka && bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092# 第二個ssh啟動消費者 cd /usr/local/kafka && bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092

    Kafka另外一些常用命令

    # 查看topic列表 bin/kafka-topics.sh --zookeeper localhost:2181 --list# 刪除某個topic bin/kafka-topics.sh --zookeeper localhost:2181 --delete -topic spring-kafka-demo# 查看有哪些消費組 bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list # 老版本是指定zk的地址,類似這樣: bin/kafka-consumer-groups.sh --zookeeper 127.0.0.1:2181 --list# 查看某個消費組的詳情 bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server 127.0.0.1:9092 --group test-consumer-group --describe

    Filebeat配置

    # 備份 cp /usr/local/filebeat/filebeat.yml /usr/local/filebeat/filebeat.yml.bak# 編輯配置 vi /usr/local/filebeat/filebeat.yml

    增加Filebeat輸出到Kafka的配置,更多參考官網說明配置Filebeat

    # ============================== Filebeat inputs =============================== # 輸入還是和之前一樣 filebeat.inputs: - type: log# 此處一定要改成true,否則不生效enabled: true# 路徑可以寫多個paths:- /var/log/*.log# ============================== Filebeat inputs =============================== # 增加輸出到kafka output.kafka:enabled: truehosts: ["172.18.0.21:9092"]topic: filebeat_to_kafka

    啟動Filebeat

    /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml -e

    測試

    在Filebeat容器上新開ssh產生測試數據

    while true;do echo 'test_filebeat_to_kafka' >> /var/log/my.log;sleep 1;done

    在Kafka容器里面新開ssh消費上面配置的主題filebeat_to_kafka

    cd /usr/local/kafka && bin/kafka-console-consumer.sh --topic filebeat_to_kafka --from-beginning --bootstrap-server localhost:9092

    如果能看到輸出,說明Filebeat > Kafka的部分配置成功!需要注意是測試成功后一定要Ctrl+c停止消費,否則這里消費了下面的配置的Logstash就消費不了。

    Logstash配置

    需要注意消費的Topic的設置要和上面的Filebeat一致,ES索引也需要新建一個,下面為filebeat-to-kafka-to-logstash-to-es-my-log

    如果kafka是集群,有多個ip可以這樣寫bootstrap_servers => [“172...92:9092,172.16..:9092”],此處測試只是單機,所以寫了一個

    # 生成配置文件,從kafka輸入 cat > ~/log.conf <<EOF input { kafka {bootstrap_servers => ["172.18.0.21:9092"]# logstash集群消費kafka集群的身份標識,必須集群相同且唯一group_id => "LogstashGroup"# 消費的主題,對應上面Filebeat設置的主題filebeat_to_kafkatopics => ["filebeat_to_kafka"] codec => json} } filter {} output {elasticsearch {hosts => ["172.18.0.12:9200"]index => "filebeat-to-kafka-to-logstash-to-es-my-log"}stdout {codec => rubydebug} } EOF # 啟動 /usr/local/logstash/bin/logstash -f ~/log.conf

    觀察Logstash控制臺,看有沒有消息輸出,有輸出說明成功!如果沒有,檢查下上一步中測試消費的命令是否關閉,一定要關閉了才能讓Logstash去消費

    最后打開Kibana,日志記錄詳情如下

    資源占用

    最后看一下各個組件工作時資源占用,發現Logstash確實占用較多資源,其次是ElasticSearch,FIlebeat占用資源最少

    CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS d5dfb4523572 kafka 0.85% 172.2MiB / 1.777GiB 9.47% 2.56MB / 1.35MB 8.77GB / 35MB 110 a6a394fdf848 fb 0.23% 41.04MiB / 1.777GiB 2.26% 422kB / 1.99MB 10.6GB / 3.35MB 17 b4e435665993 kb 1.03% 173.1MiB / 1.777GiB 9.51% 10.9MB / 14.6MB 7.56GB / 16.4kB 18 a622d8352de5 es 0.86% 417.9MiB / 1.777GiB 22.97% 12.5MB / 11.1MB 11.1GB / 169MB 77 1964ebd516a7 log1 6.28% 433.1MiB / 1.777GiB 23.80% 1.47MB / 1.48MB 6.88GB / 174kB 41

    參考

    • ELK 架構和 Filebeat 工作原理詳解* 集中式日志系統 ELK 協議棧詳解* 安裝| Logstash 最佳實踐* 說說 ELK 火熱的原因?* Elasticsearch Top5典型應用場景* ELK教程* ELK想說愛你不容易* ELK 架構之 Logstash 和 Filebeat 安裝配置* elastic 現代化的 ELK/EFK Log 架構大補帖* ELK-配置使用 Filebeat* 整理了Kafka的一些常用工具,建議收藏備用!

    總結

    以上是生活随笔為你收集整理的深入浅出ELK日志收集系统搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。