1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        從ELK 到 EFK 的演進(jìn):日志平臺(tái)構(gòu)建實(shí)踐

        共 7259字,需瀏覽 15分鐘

         ·

        2021-05-19 06:57

        本篇主要講工作中的真實(shí)經(jīng)歷,我們怎么打造億級日志平臺(tái),同時(shí)手把手教大家建立起這樣一套億級 ELK 系統(tǒng)。日志平臺(tái)具體發(fā)展歷程可以參考上篇 「從 ELK 到 EFK 演進(jìn)」
        廢話不多說,老司機(jī)們座好了,我們準(zhǔn)備發(fā)車了。

        整體架構(gòu)

        整體架構(gòu)主要分為 4 個(gè)模塊,分別提供不同的功能
        Filebeat:輕量級數(shù)據(jù)收集引擎?;谠?Logstash-fowarder 的源碼改造出來。換句話說:Filebeat就是新版的 Logstash-fowarder,也會(huì)是 ELK Stack 在 Agent 的第一選擇。
        Kafka: 數(shù)據(jù)緩沖隊(duì)列。作為消息隊(duì)列解耦了處理過程,同時(shí)提高了可擴(kuò)展性。具有峰值處理能力,使用消息隊(duì)列能夠使關(guān)鍵組件頂住突發(fā)的訪問壓力,而不會(huì)因?yàn)橥话l(fā)的超負(fù)荷的請求而完全崩潰。
        Logstash :數(shù)據(jù)收集處理引擎。支持動(dòng)態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進(jìn)行過濾、分析、豐富、統(tǒng)一格式等操作,然后存儲(chǔ)以供后續(xù)使用。
        Elasticsearch :分布式搜索引擎。具有高可伸縮、高可靠、易管理等特點(diǎn)??梢杂糜谌臋z索、結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)合起來。Elasticsearch 基于 Lucene 開發(fā),現(xiàn)在使用最廣的開源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它來構(gòu)建自己的搜索引擎。
        Filebeat: 6.2.4Kafka: 2.11-1Logstash: 6.2.4Elasticsearch: 6.2.4Kibana: 6.2.4
        相應(yīng)的版本最好下載對應(yīng)的插件

        具體實(shí)踐

        我們就以比較常見的 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 寫了一個(gè)功能較少但是資源消耗也小的輕量級的 Agent 叫 Logstash-forwarder。
        后來作者加入 elastic.co 公司, Logstash-forwarder 的開發(fā)工作給公司內(nèi)部 GO 團(tuán)隊(duì)來搞,最后命名為 Filebeat。
        Filebeat 需要部署在每臺(tái)應(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.gzmv filebeat-6.2.4-darwin-x86_64 filebeatcd filebeat

        修改配置

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

        $ vim fileat.ymlfilebeat.prospectors:- input_type: log  paths:    -  /opt/logs/server/nginx.log  json.keys_under_root: true  json.add_error_key: true  json.message_key: log
        output.kafka: hosts: ["192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092"] topic: 'nginx'

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

        啟動(dòng)
        $ ./filebeat -e -c filebeat.yml

        Kafka

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

        下載
        直接到官網(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.tgzmv kafka_2.11-1.0.0 kafkacd kafka

        修改 Zookeeper 配置

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

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

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

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

        $ vim /opt/zookeeper/myid1

        啟動(dòng) Zookeeper 節(jié)點(diǎn)

        分別啟動(dòng) 3 臺(tái) Zookeeper 節(jié)點(diǎn),保證集群的高可用

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

        修改 Kafka 配置

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

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

        啟動(dòng) Kafka 集群

        分別啟動(dòng) 3 臺(tái) Kafka 節(jié)點(diǎn),保證集群的高可用

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

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

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

        監(jiān)控 Kafka Manager

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

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

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

        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.conf
        input { 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}" }}

        啟動(dòng) 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.yml
        cluster.name: esnode.name: es-node1network.host: 192.168.0.1discovery.zen.ping.unicast.hosts: ["192.168.0.1"]discovery.zen.minimum_master_nodes: 1
        啟動(dòng)
        通過 -d 來后臺(tái)啟動(dòng)
        $ ./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"}
        控制臺(tái)

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

        注意點(diǎn)

        1. Master 與 Data 節(jié)點(diǎn)分離,當(dāng) Data 節(jié)點(diǎn)大于 3 個(gè)的時(shí)候,建議責(zé)任分離,減輕壓力

        2. Data Node 內(nèi)存不超過 32G ,建議設(shè)置成 31 G ,具體原因可以看上一篇文章

        3. discovery.zen.minimum_master_nodes 設(shè)置成 ( total / 2 + 1 ),避免腦裂情況

        4. 最重要的一點(diǎn),不要將 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.yml
        server.port: 5601server.host: "192.168.0.1"elasticsearch.url: "http://192.168.0.1:9200"

        啟動(dòng) Kibana

        $ nohup ./bin/kibana &

        界面展示

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

        最終效果展示

        總結(jié)

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

        來源:https://blog.51cto.com/13527416/2117141
        文章轉(zhuǎn)載:高效運(yùn)維
        (版權(quán)歸原作者所有,侵刪) 


        點(diǎn)擊下方“閱讀原文”查看更多

        瀏覽 51
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产成人综合久久精品下载第1集 | 久一区二区 | 乱伦小说中文字幕 | 国产精品秘 久久久 | 日韩伦理电影免费 | 五月天激情性爱 | 最近中文字幕在线中文字幕7 | 亚洲成人性爱网站 | 小yoyo萝li交精品导航 | 亚洲成人色情影视 |