<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          企業(yè)級日志平臺新秀Graylog,比ELK輕量多了~

          共 10399字,需瀏覽 21分鐘

           ·

          2021-07-10 07:29

          作者:Escape

          轉(zhuǎn)載:https://www.escapelife.site/posts/38c81b25.html

          當我們公司內(nèi)部部署很多服務(wù)以及測試、正式環(huán)境的時候,查看日志就變成了一個非常剛需的需求了。是多個環(huán)境的日志統(tǒng)一收集,然后使用 Nginx 對外提供服務(wù),還是使用專用的日志收集服務(wù) ELK 呢?這就變成了一個問題!而 Graylog 作為整合方案,使用 elasticsearch 來存儲,使用 mongodb 來緩存,并且還有帶流量控制的 (throttling),同時其界面查詢簡單易用且易于擴展。所以,使用 Graylog 成為了不二之選,為我們省了不少心。

          1. Filebeat 工具介紹

          服務(wù)日志收集方案:Filebeat + Graylog!

          • [1] Filebeat - 日志文件托運服務(wù)

          Filebeat 是一個日志文件托運工具,在你的服務(wù)器上安裝客戶端后,filebeat 會自動監(jiān)控給定的日志目錄或者指定的日志文件,追蹤讀取這些文件,不停的讀取,并且轉(zhuǎn)發(fā)這些信息到 elasticsearch 或者 logstarsh 或者 graylog 中存放。

          • [2] Filebeat - 工作流程介紹

          當你安裝并啟用 filebeat 程序的時候,它會啟動一個或多個探測器(prospectors)去檢測你指定的日志目錄或文件,對于探測器找出的每一個日志文件,filebeat 都會啟動一個收割進程(harvester),每一個收割進程讀取一個日志文件的最新內(nèi)容,并發(fā)送這些新的日志數(shù)據(jù)到處理程序(spooler),處理程序會集合這些事件,最后 filebeat 會發(fā)送集合的數(shù)據(jù)到你指定的地址上去(我們這里就是發(fā)送給graylog服務(wù)了)。

          • [3] Filebeat - 圖示理解記憶

          我們這里不適用 logstash 服務(wù),主要是因為 filebeat 相比于 logstash 更加輕量級。當我們需要收集信息的機器配置或資源并不是特別多時,且并沒有那么復(fù)雜的時候,還是建議使用 filebeat 來收集日志。日常使用中,filebeat 的安裝部署方式多樣且運行十分穩(wěn)定。


          圖示服務(wù)架構(gòu)理解記憶



          2. Filebeat 配置文件

          配置 Filebeat 工具的核心就是如何編寫其對應(yīng)的配置文件!

          對應(yīng) Filebeat 工具的配置主要是通過編寫其配置文件來控制的,對于通過 rpm 或者 deb 包來安裝的情況,配置文件默認會存儲在,/etc/filebeat/filebeat.yml 這個路徑下面。而對于,對于 MAC 或者 Win 系統(tǒng)來說,請查看解壓文件中相關(guān)文件,其中都有涉及。

          下面展示了 Filebeat 工具的主配置文件,注釋信息中都對其各個字段含義進行了詳細的解釋,我這里就不再贅述了。需要注意的是,我們將日志的輸入來源統(tǒng)統(tǒng)定義去讀取 inputs.d 目錄下的所有 yml 配置。所以,我們可以更加不用的服務(wù)(測試、正式服務(wù))來定義不同的配置文件,根據(jù)物理機部署的實際情況具體配置。

          # 配置輸入來源的日志信息
          # 我們合理將其配置到了inputs.d目錄下的所有yml文件
          filebeat.config.inputs:
          enabled: true
          path: ${path.config}/inputs.d/*.yml
          # 若收取日志格式為json的log請開啟此配置
          # json.keys_under_root: true

          # 配置filebeat需要加載的模塊
          filebeat.config.modules:
          path: ${path.config}/modules.d/*.yml
          reload.enabled: false

          setup.template.settings:
          index.number_of_shards: 1

          # 配置將日志信息發(fā)送那個地址上面
          output.logstash:
          hosts: ["11.22.33.44:5500"]

          # output.file:
          # enable: true

          processors:
          - add_host_metadata: ~
          - rename:
          fields:
          - from: "log"
          to: "message"
          - add_fields:
          target: ""
          fields:
          # 加token是為了防止無認證的服務(wù)上Graylog服務(wù)發(fā)送數(shù)據(jù)
          token: "0uxxxxaM-1111-2222-3333-VQZJxxxxxwgX "

          下面展示一個簡單的 inputs.d 目錄下面的 yml 配置文件的具體內(nèi)容,其主要作用就是配置單獨服務(wù)的獨立日志數(shù)據(jù),以及追加不同的數(shù)據(jù) tag 類型。

          # 收集的數(shù)據(jù)類型
          - type: log
          enabled: true
          # 日志文件的路徑地址
          paths:
          - /var/log/supervisor/app_escape_worker-stderr.log
          - /var/log/supervisor/app_escape_prod-stderr.log
          symlinks: true
          # 包含的關(guān)鍵字信息
          include_lines: ["WARNING", "ERROR"]
          # 打上數(shù)據(jù)標簽
          tags: ["app", "escape", "test"]
          # 防止程序堆棧信息被分行識別
          multiline.pattern: '^\[?[0-9]...{3}'
          multiline.negate: true
          multiline.match: after

          # 需要配置多個日志時可加多個type字段
          - type: log
          enabled: true
          ......

          需要注意的是,針對于不同的日志類型,filebeat 還提供了不同了模塊來配置不同的服務(wù)日志以及其不同的模塊特性,比如我們常見的 PostgreSQl、Redis、Iptables 等。

          # iptables
          - module: iptables
          log:
          enabled: true
          var.paths: ["/var/log/iptables.log"]
          var.input: "file"

          # postgres
          - module: postgresql
          log:
          enabled: true
          var.paths: ["/path/to/log/postgres/*.log*"]

          # nginx
          - module: nginx
          access:
          enabled: true
          var.paths: ["/path/to/log/nginx/access.log*"]
          error:
          enabled: true
          var.paths: ["/path/to/log/nginx/error.log*"]

          3. Graylog 服務(wù)介紹

          服務(wù)日志收集方案:Filebeat + Graylog!

          • [1] Graylog - 日志監(jiān)控系統(tǒng)

          Graylog 是一個開源的日志聚合、分析、審計、展現(xiàn)和預(yù)警工具。在功能上來說,和 ELK 類似,但又比 ELK 要簡單很多。依靠著更加簡潔,高效,部署使用簡單的優(yōu)勢很快受到許多人的青睞。當然,在擴展性上面確實沒有比 ELK 好,但是其有商業(yè)版本可以選擇。

          • [2] Graylog - 工作流程介紹

          部署 graylog 最簡單的架構(gòu)就是單機部署,復(fù)雜的也是部署集群模式,架構(gòu)圖示如下所示。我們可以看到其中包含了三個組件,分別是 ElasticsearchMongoDb 和 Graylog。其中,Elasticsearch 用來持久化存儲和檢索日志文件數(shù)據(jù)(IO 密集),MongoDb 用來存儲關(guān)于 Graylog 的相關(guān)配置,而 Graylog 來提供 Web 界面和對外接口的(CPU 密集)。


          最小化單機部署



          最優(yōu)化集群部署



          4. Graylog 組件功能

          配置 Graylog 服務(wù)的核心就是理解對應(yīng)組件的功能以及其運作方式!

          簡單來講,Input 表示日志數(shù)據(jù)的來源,對不同來源的日志可以通過 Extractors 來進行日志的字段轉(zhuǎn)換,比如將 Nginx 的狀態(tài)碼變成對應(yīng)的英文表述等。然后,通過不同的標簽類型分組成不用的 Stream,并將這些日志數(shù)據(jù)存儲到指定的 Index 庫中進行持久化保存。

          編號組件名稱功能介紹主要特點
          1Dashboards數(shù)據(jù)面板固定展示主要是用來保存特定搜索條件的數(shù)據(jù)面板
          2Searching日志信息條件搜索關(guān)鍵字搜索、時間搜索、搜索保存、創(chuàng)建面板、分組查詢、結(jié)果導(dǎo)出、查詢高亮顯示、自定義時間
          3Alert設(shè)置告警提示方式支持郵件告警、HTTP 回調(diào)和自定義腳本觸發(fā)
          4Inputs日志數(shù)據(jù)抓取接收部署 Sidercar 主動抓取或使用其他服務(wù)被動上報
          5Extractors日志數(shù)據(jù)格式轉(zhuǎn)換json 解析、kv 解析、時間戳解析、正則解析
          6Streams日志信息分類分組設(shè)置日志分類條件并發(fā)送到不同的索引文件中去
          7Indices持久化數(shù)據(jù)存儲設(shè)置數(shù)據(jù)存儲性能
          8Outputs日志數(shù)據(jù)的轉(zhuǎn)發(fā)解析的 Stream 發(fā)送到其他 Graylog 集群或服務(wù)
          9Pipelines日志數(shù)據(jù)的過濾建立數(shù)據(jù)清洗的過濾規(guī)則、字段添加刪除、條件過濾、自定義函數(shù)等
          10Sidecar輕量級的日志采集器相當于 C/S 模式;大規(guī)模時使用
          11Lookup Tables服務(wù)解析基于 IP 的 Whois 查詢和基于來源 IP 的情報監(jiān)控
          12Geolocation可視化地理位置實現(xiàn)基于來源 IP 的情報監(jiān)控


          Graylog中的核心服務(wù)組件


          Graylog 通過 Input 搜集日志,每個 Input 單獨配置 Extractors 用來做字段轉(zhuǎn)換。Graylog 中日志搜索的基本單位是 Stream,每個 Stream 可以有自己單獨的 Elastic Index Set,也可以共享一個 Index Set。

          Extractor 在 System/Input 中配置。Graylog 中很方便的一點就是可以加載一條日志,然后基于這個實際的例子進行配置并能直接看到結(jié)果。內(nèi)置的 Extractor 基本可以完成各種字段提取和轉(zhuǎn)換的任務(wù),但是也有些限制,在應(yīng)用里寫日志的時候就需要考慮到這些限制。Input 可以配置多個 Extractors,按照順序依次執(zhí)行。

          系統(tǒng)會有一個默認的 Stream,所有日志默認都會保存到這個 Stream 中,除非匹配了某個 Stream,并且這個 Stream 里配置了不保存日志到默認 Stream??梢酝ㄟ^菜單 Streams 創(chuàng)建更多的 Stream,新創(chuàng)建的 Stream 是暫停狀態(tài),需要在配置完成后手動啟動。Stream 通過配置條件匹配日志,滿足條件的日志添加 stream ID 標識字段并保存到對應(yīng)的 Elastic Index Set 中。

          Index Set 通過菜單 System/Indices 創(chuàng)建。日志存儲的性能,可靠性和過期策略都通過 Index Set 來配置。性能和可靠性就是配置 Elastic Index 的一些參數(shù),主要參數(shù)包括,Shards 和 Replicas。

          除了上面提到的日志處理流程,Graylog 還提供了 Pipeline 腳本實現(xiàn)更靈活的日志處理方案。這里不詳細闡述,只介紹如果使用 Pipelines 來過濾不需要的日志。下面是丟棄 level > 6 的所有日志的 Pipeline Rule 的例子。從數(shù)據(jù)采集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一氣呵成,無需在通過其他方式進行二次加工。

          Sidecar 是一個輕量級的日志采集器,通過訪問 graylog 進行集中式管理,支持 linux 和 windows 系統(tǒng)。Sidecar 守護進程會定期訪問 graylog 的 REST API 接口獲取 Sidecar 配置文件中定義的標簽(tag) ,Sidecar 在首次運行時會從 graylog 服務(wù)器拉取配置文件中指定標簽(tag) 的配置信息同步到本地。目前 Sidecar 支持 NXLogFilebeat 和 Winlogbeat。他們都通過 graylog 中的 web 界面進行統(tǒng)一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等輸出類型。Graylog 最厲害的在于可以在配置文件中指定 Sidecar 把日志發(fā)送到哪個 graylog 群集,并對 graylog 群集中的多個 input 進行負載均衡,這樣在遇到日志量非常龐大的時候,graylog 也能應(yīng)付自如。

          rule "discard debug messages"
          when
          to_long($message.level) > 6
          then
          drop_message();
          end

          日志集中保存到 Graylog 后就可以方便的使用搜索了。不過有時候還是需要對數(shù)據(jù)進行近一步的處理。主要有兩個途徑,分別是直接訪問 Elastic 中保存的數(shù)據(jù),或者通過 Graylog 的 Output 轉(zhuǎn)發(fā)到其它服務(wù)。


          5. 服務(wù)安裝和部署

          主要介紹部署 Filebeat + Graylog 的安裝步驟和注意事項!

          使用Graylog來收集日志


          • [1] 部署 Filebeat 工具

          官方提供了多種的部署方式,包括通過 rpm 和 deb 包安裝服務(wù),以及源代碼編譯的方式安裝服務(wù),同時包括了使用 Docker 或者 kubernetes 的方式安裝服務(wù)。我們根據(jù)自己的實際需要,進行安裝即可。

          # Ubuntu(deb)
          $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb
          $ sudo dpkg -i filebeat-7.8.1-amd64.deb
          $ sudo systemctl enable filebeat
          $ sudo service filebeat start


          # 使用docker啟動
          docker run -d --name=filebeat --user=root \
          --volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
          --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
          --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
          docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false \
          -E output.elasticsearch.hosts=["elasticsearch:9200"]


          使用Graylog來收集日志


          • [2] 部署 Graylog 服務(wù)

          我們這里主要介紹使用 Docker 容器來部署服務(wù),如果你需要使用其他方式來部署的話,請自行查看官方文檔對應(yīng)章節(jié)的安裝部署步驟。在服務(wù)部署之前,我們需要給 Graylog 服務(wù)生成等相關(guān)信息,生成部署如下所示:

          # 生成password_secret密碼(最少16位)
          $ sudo apt install -y pwgen
          $ pwgen -N 1 -s 16
          zscMb65...FxR9ag

          # 生成后續(xù)Web登錄時所需要使用的密碼
          $ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
          Enter Password: zscMb65...FxR9ag
          77e29e0f...557515f

          生成所需密碼信息之后,我們將如下 yml 信息保存到 docker-comopse.yml 文件中,使用 docker-compose 命令啟動該服務(wù),即可完成部署。之后,通過瀏覽器訪問對應(yīng)服務(wù)器地址的 9000 端口,即可登錄主頁 。

          version: "3"

          services:
          mongo:
          restart: on-failure
          container_name: graylog_mongo
          image: "mongo:3"
          volumes:
          - "./mongodb:/data/db"
          networks:
          - graylog_network

          elasticsearch:
          restart: on-failure
          container_name: graylog_es
          image: "elasticsearch:6.8.5"
          volumes:
          - "./es_data:/usr/share/elasticsearch/data"
          environment:
          - http.host=0.0.0.0
          - transport.host=localhost
          - network.host=0.0.0.0
          - "ES_JAVA_OPTS=-Xms512m -Xmx5120m"
          ulimits:
          memlock:
          soft: -1
          hard: -1
          deploy:
          resources:
          limits:
          memory: 12g
          networks:
          - graylog_network

          graylog:
          restart: on-failure
          container_name: graylog_web
          image: "graylog/graylog:3.3"
          ports:
          - 9000:9000 # Web服務(wù)提供的訪問端口
          - 5044:5044 # Filebeat工具提供端口
          - 12201:12201 # GELF TCP
          - 12201:12201/udp # GELF UDP
          - 1514:1514 # Syslog TCP
          - 1514:1514/udp # Syslog UDP
          volumes:
          - "./graylog_journal:/usr/share/graylog/data/journal"
          environment:
          - GRAYLOG_PASSWORD_SECRET=zscMb65...FxR9ag
          - GRAYLOG_ROOT_PASSWORD_SHA2=77e29e0f...557515f
          - GRAYLOG_HTTP_EXTERNAL_URI=http://11.22.33.44:9000/
          - GRAYLOG_TIMEZONE=Asia/Shanghai
          - GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
          networks:
          - graylog
          depends_on:
          - mongo
          - elasticsearch

          networks:
          graylog_network:
          driver: bridge

          需要注意的是,GELF(Graylog Extended Log Format) 的 input 模式可以接受結(jié)構(gòu)化的事件,支持壓縮和分塊。恰好,Docker 服務(wù)的 log-driver 驅(qū)動原生提供了 GELF 的支持。只需要我們在 Graylog 的 system/inputs 下面創(chuàng)建對應(yīng)的 input 之后,啟動容器時候指定 log-driver,就可以將容器內(nèi)的輸出都會發(fā)送到 Graylog 里面了。

          使用Graylog來收集日志


          # [docker] 啟動容器指定地址和driver
          docker run --rm=true \
          --log-driver=gelf \
          --log-opt gelf-address=udp://11.22.33.44:12201 \
          --log-opt tag=myapp \
          myapp:0.0.1


          # [docker-compose] 啟動使用方式
          version: "3"
          services:
          redis:
          restart: always
          image: redis
          container_name: "redis"
          logging:
          driver: gelf
          options:
          gelf-address: udp://11.22.33.44:12201
          tag: "redis"
          ......

          6. Graylog 界面功能

          主要介紹 Graylog 界面的相關(guān)功能和對應(yīng)特點!





          - END -

           推薦閱讀 

          31天拿下Kubernetes含金量最高的CKA+CKS證書! 
          最新Kubernetes實戰(zhàn)指南:從零到架構(gòu)師的進階之路
          面試官:如果MySQL引起CPU消耗過大,你會怎么優(yōu)化?
          面試數(shù)十家Linux運維工程師,總結(jié)了這些面試題(含答案)
          記一次 Linux 被入侵,服務(wù)器變 “礦機”~
          七年老運維實戰(zhàn)中的 Shell 開發(fā)經(jīng)驗總結(jié)
          快速入門 Ansible 自動化運維工具 | 16張圖
          最強整理!常用正則表達式速查手冊
          搭建一套完整的企業(yè)級 K8s 集群(v1.20,kubeadm方式)
          12年資深運維老司機的成長感悟



          點亮,服務(wù)器三年不宕機

          瀏覽 142
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费的一级黄色片 | 思思热在线视频免费观看 | 午夜免费福利视频 | 青青草男人的天堂黄上网站免费在线观看 | 91 丝袜一区二区三区 |