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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

亿级 ELK 日志平台构建实践

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 亿级 ELK 日志平台构建实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本篇主要講工作中的真實經(jīng)歷,我們怎么打造億級日志平臺,同時手把手教大家建立起這樣一套億級 ELK 系統(tǒng)。日志平臺具體發(fā)展歷程可以參考上篇 「從 ELK 到 EFK 演進(jìn)」

廢話不多說,老司機(jī)們座好了,我們準(zhǔn)備發(fā)車了~~~

整體架構(gòu)

整體架構(gòu)主要分為 4 個模塊,分別提供不同的功能

Filebeat:輕量級數(shù)據(jù)收集引擎。基于原先 Logstash-fowarder 的源碼改造出來。換句話說:Filebeat就是新版的 Logstash-fowarder,也會是 ELK Stack 在 Agent 的第一選擇。

Kafka: 數(shù)據(jù)緩沖隊列。作為消息隊列解耦了處理過程,同時提高了可擴(kuò)展性。具有峰值處理能力,使用消息隊列能夠使關(guān)鍵組件頂住突發(fā)的訪問壓力,而不會因為突發(fā)的超負(fù)荷的請求而完全崩潰。

Logstash :數(shù)據(jù)收集處理引擎。支持動態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進(jìn)行過濾、分析、豐富、統(tǒng)一格式等操作,然后存儲以供后續(xù)使用。

Elasticsearch :分布式搜索引擎。具有高可伸縮、高可靠、易管理等特點。可以用于全文檢索、結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)合起來。Elasticsearch 基于 Lucene 開發(fā),現(xiàn)在使用最廣的開源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它來構(gòu)建自己的搜索引擎。

Kibana :可視化化平臺。它能夠搜索、展示存儲在 Elasticsearch 中索引數(shù)據(jù)。使用它可以很方便的用圖表、表格、地圖展示和分析數(shù)據(jù)。

版本說明

Filebeat: 6.2.4 Kafka: 2.11-1 Logstash: 6.2.4 Elasticsearch: 6.2.4 Kibana: 6.2.4相應(yīng)的版本最好下載對應(yīng)的插件

具體實踐

我們就以比較常見的 Nginx 日志來舉例說明下,日志內(nèi)容是 JSON 格式

{"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"} {"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"} {"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"} {"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"} {"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"}

Filebeat

為什么用 Filebeat ,而不用原來的 Logstash 呢?

原因很簡單,資源消耗比較大。

由于 Logstash 是跑在 JVM 上面,資源消耗比較大,后來作者用 GO 寫了一個功能較少但是資源消耗也小的輕量級的 Agent 叫 Logstash-forwarder。

后來作者加入 elastic.co 公司, Logstash-forwarder 的開發(fā)工作給公司內(nèi)部 GO 團(tuán)隊來搞,最后命名為 Filebeat。

Filebeat 需要部署在每臺應(yīng)用服務(wù)器上,可以通過 Salt 來推送并安裝配置。

下載

$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-darwin-x86_64.tar.gz

解壓

tar -zxvf filebeat-6.2.4-darwin-x86_64.tar.gz mv filebeat-6.2.4-darwin-x86_64 filebeat cd filebeat

修改配置

修改 Filebeat 配置,支持收集本地目錄日志,并輸出日志到 Kafka 集群中

$ vim fileat.yml filebeat.prospectors: - input_type: logpaths:- /opt/logs/server/nginx.logjson.keys_under_root: truejson.add_error_key: truejson.message_key: logoutput.kafka: hosts: ["192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092"]topic: 'nginx'

Filebeat 6.0 之后一些配置參數(shù)變動比較大,比如 document_type 就不支持,需要用 fields 來代替等等。

啟動

$ ./filebeat -e -c filebeat.yml

Kafka

生產(chǎn)環(huán)境中 Kafka 集群中節(jié)點數(shù)量建議為(2N + 1 )個,這邊就以 3 個節(jié)點舉例

下載

直接到官網(wǎng)下載 Kafka

$ wget http://mirror.bit.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz

解壓

tar -zxvf kafka_2.11-1.0.0.tgz mv kafka_2.11-1.0.0 kafka cd kafka

修改 Zookeeper 配置

修改 Zookeeper 配置,搭建 Zookeeper 集群,數(shù)量 ( 2N + 1 ) 個

ZK 集群建議采用 Kafka 自帶,減少網(wǎng)絡(luò)相關(guān)的因素干擾

$ vim zookeeper.propertiestickTime=2000 dataDir=/opt/zookeeper clientPort=2181 maxClientCnxns=50 initLimit=10 syncLimit=5server.1=192.168.0.1:2888:3888 server.2=192.168.0.2:2888:3888 server.3=192.168.0.3:2888:3888

Zookeeper data 目錄下面添加 myid 文件,內(nèi)容為代表 Zooekeeper 節(jié)點 id (1,2,3),并保證不重復(fù)

$ vim /opt/zookeeper/myid 1

啟動 Zookeeper 節(jié)點

分別啟動 3 臺 Zookeeper 節(jié)點,保證集群的高可用

$ ./zookeeper-server-start.sh -daemon ./config/zookeeper.properties

修改 Kafka 配置

kafka 集群這邊搭建為 3 臺,可以逐個修改 Kafka 配置,需要注意其中 broker.id 分別 (1,2,3)

$ vim ./config/server.properties broker.id=1 port=9092 host.name=192.168.0.1 num.replica.fetchers=1 log.dirs=/opt/kafka_logs num.partitions=3 zookeeper.connect=192.168.0.1: 192.168.0.2: 192.168.0.3:2181 zookeeper.connection.timeout.ms=6000 zookeeper.sync.time.ms=2000 num.io.threads=8 num.network.threads=8 queued.max.requests=16 fetch.purgatory.purge.interval.requests=100 producer.purgatory.purge.interval.requests=100 delete.topic.enable=true

啟動 Kafka 集群

分別啟動 3 臺 Kafka 節(jié)點,保證集群的高可用

$ ./bin/kafka-server-start.sh -daemon ./config/server.properties

查看 topic 是否創(chuàng)建成功

$ bin/kafka-topics.sh --list --zookeeper localhost:2181nginx

監(jiān)控 Kafka Manager

Kafka-manager 是 Yahoo 公司開源的集群管理工具。

可以在 Github 上下載安裝:https://github.com/yahoo/kafka-manager

如果遇到 Kafka 消費不及時的話,可以通過到具體 cluster 頁面上,增加 partition。Kafka 通過 partition 分區(qū)來提高并發(fā)消費速度

Logstash

Logstash 提供三大功能

  • INPUT 進(jìn)入
  • FILTER 過濾功能
  • OUTPUT 出去

如果使用 Filter 功能的話,強(qiáng)烈推薦大家使用 Grok debugger 來預(yù)先解析日志格式。

下載

$ wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz

解壓重命名

$ tar -zxvf logstash-6.2.4.tar.gz $ mv logstash-6.2.4 logstash

修改 Logstash 配置

修改 Logstash 配置,使之提供 indexer 的功能,將數(shù)據(jù)插入到 Elasticsearch 集群中

$ vim nginx.confinput {kafka {type => "kafka"bootstrap_servers => "192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181"topics => "nginx"group_id => "logstash"consumer_threads => 2} }output {elasticsearch {host => ["192.168.0.1","192.168.0.2","192.168.0.3"]port => "9300"index => "nginx-%{+YYYY.MM.dd}"} }

啟動 Logstash

$ ./bin/logstash -f nginx.conf

Elasticsearch

下載

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz

解壓

$ tar -zxvf elasticsearch-6.2.4.tar.gz $ mv elasticsearch-6.2.4.tar.gz elasticsearch

修改配置

$ vim config/elasticsearch.ymlcluster.name: es node.name: es-node1 network.host: 192.168.0.1 discovery.zen.ping.unicast.hosts: ["192.168.0.1"] discovery.zen.minimum_master_nodes: 1

啟動

通過 -d 來后臺啟動

$ ./bin/elasticsearch -d

打開網(wǎng)頁 http://192.168.0.1:9200/, 如果出現(xiàn)下面信息說明配置成功

{name: "es-node1",cluster_name: "es",cluster_uuid: "XvoyA_NYTSSV8pJg0Xb23A",version: {number: "6.2.4",build_hash: "ccec39f",build_date: "2018-04-12T20:37:28.497551Z",build_snapshot: false,lucene_version: "7.2.1",minimum_wire_compatibility_version: "5.6.0",minimum_index_compatibility_version: "5.0.0"},tagline: "You Know, for Search" }

控制臺

Cerebro 這個名字大家可能覺得很陌生,其實過去它的名字叫 kopf !因為 Elasticsearch 5.0 不再支持 site plugin,所以 kopf 作者放棄了原項目,另起爐灶搞了 cerebro,以獨立的單頁應(yīng)用形式,繼續(xù)支持新版本下 Elasticsearch 的管理工作。

注意點

  • Master 與 Data 節(jié)點分離,當(dāng) Data 節(jié)點大于 3 個的時候,建議責(zé)任分離,減輕壓力
  • Data Node 內(nèi)存不超過 32G ,建議設(shè)置成 31 G ,具體原因可以看上一篇文章
  • discovery.zen.minimum_master_nodes 設(shè)置成 ( total / 2 + 1 ),避免腦裂情況
  • 最重要的一點,不要將 ES 暴露在公網(wǎng)中,建議都安裝 X-PACK ,來加強(qiáng)其安全性
  • kibana

    下載

    $ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-darwin-x86_64.tar.gz

    解壓

    $ tar -zxvf kibana-6.2.4-darwin-x86_64.tar.gz $ mv kibana-6.2.4-darwin-x86_64.tar.gz kibana

    修改配置

    $ vim config/kibana.ymlserver.port: 5601 server.host: "192.168.0.1" elasticsearch.url: "http://192.168.0.1:9200"

    啟動 Kibana

    $ nohup ./bin/kibana &

    界面展示

    創(chuàng)建索引頁面需要到 Management -> Index Patterns 中通過前綴來指定

    最終效果展示

    總結(jié)

    綜上,通過上面部署命令來實現(xiàn) ELK 的整套組件,包含了日志收集、過濾、索引和可視化的全部流程,基于這套系統(tǒng)實現(xiàn)分析日志功能。同時,通過水平擴(kuò)展 Kafka、Elasticsearch 集群,可以實現(xiàn)日均億級的日志實時處理。


    所有好的架構(gòu)設(shè)計首要的原則并不是追求先進(jìn),而是合理性,要與公司的業(yè)務(wù)規(guī)模和發(fā)展趨勢相匹配,任何一個公司,哪怕是現(xiàn)在看來規(guī)模非常大的公司,比如 BAT 之類,在一開始,其系統(tǒng)架構(gòu)也應(yīng)簡單和清晰的。

    但隨著業(yè)務(wù)范圍不斷擴(kuò)充,業(yè)務(wù)規(guī)模不斷擴(kuò)大,系統(tǒng)漸進(jìn)復(fù)雜和龐大,讓所有系統(tǒng)都遇到高可用的問題。那我們該如何避免類似的問題,構(gòu)建高可用系統(tǒng)呢?

    為此我特意寫了一個專欄《帶你玩轉(zhuǎn)高可用》,將多年來在百度和滬江的架構(gòu)設(shè)計實戰(zhàn)經(jīng)驗,集結(jié)成這個專欄。

    本專欄總共包含 15 篇文章,分成三大模塊詳細(xì)解釋高可用架構(gòu)的相關(guān)知識:

    概念篇:介紹高可用架構(gòu)理論與演進(jìn),這塊比較偏理論。不過對于我們理解整套體系還是有必須的。
    工程篇:介紹常見互聯(lián)網(wǎng)分層中每一層高可用是怎么做的,包含 DNS、服務(wù)層、緩存層、數(shù)據(jù)層等
    問題篇:介紹怎么排查線上常用的故障,包括機(jī)器、應(yīng)用層等維度故障定位
    專欄每周都會更新,持續(xù) 64 天。在這將近 2 個月內(nèi),我會帶著大家去全面了解高可用架構(gòu)的方方面面,同時會將遇到的這些問題和對應(yīng)的解決方案拋出來,希望大家不要重復(fù)我遇到過的坑。同時也期待大家提出有意思的問題。

    專欄地址:帶你玩轉(zhuǎn)高可用

    ?

    https://blog.51cto.com/13527416/2117141

    總結(jié)

    以上是生活随笔為你收集整理的亿级 ELK 日志平台构建实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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