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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

使用Elasticsearch+filebeat+logstach+kibana构建日志服务平台

發(fā)布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Elasticsearch+filebeat+logstach+kibana构建日志服务平台 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

  • devops中日志服務(wù)的搭建
  • 收集各個節(jié)點(agent)的日志文件進(jìn)ES集群,并提供分析和查詢的服務(wù)
  • 各個agent的filebeat收集服務(wù)不能終斷,也就是需要動態(tài)reload配置文件
  • 支持用戶設(shè)置分隔符劃分和正則匹配兩種方式添加field字段

技術(shù)方案

  • 將filebeat部署在agent節(jié)點,master節(jié)點控制agent節(jié)點的配置文件,filebeat很輕量
  • 因為filebeat的配置文件支持reload的只有input和moudel兩個模塊,但是需要對用戶提供的分隔符和正則表達(dá)式進(jìn)行處理,可以完成這個操作的processors模塊不支持動態(tài)reload,所以filebeat只收集日志,處理日志的任務(wù)交給logstach,logstach支持整個配置文件的動態(tài)reload

Filebeat安裝以及使用

  • Filebeat是一個輕量化的日志收集工具,對標(biāo)Logstach,filebeat只有30M,而logstach有300M

  • 調(diào)試啟動命令:./filebeat -e -c filebeat.yml,-c指明配置文件路徑,-e表示記錄到stderr,并禁用syslog文件輸出

  • 啟動命令相關(guān):https://johng.cn/filebeat-command-configuration/

  • 后臺啟動方式:nohup ./filebeat -e -c filebeat.yml > filebeat.log &

  • filebeat啟動可以使用root用戶,但是ES啟動不能使用root用戶

  • reload相關(guān)寫法參考:https://blog.csdn.net/junxuezheng/article/details/108349689

  • filebeat.yml配置文件

    filebeat.config.inputs:enable: truepath: /usr/local/xxx/input.ymlreload.enable: truereload.period: 5soutput.console:pretty: true#output.elasticsearch: # hosts: ["10.243.65.186:9200"]output.logstash:hosts: ["1.1.1.186:5044"] processors: - rename:fields:- from: hostto: _host- from: messageto: _messageignore_missing: falsefail_on_error: true - drop_fields:fields:- ecs- log- input
  • input.yml文件

    - type: log# Change to true to enable this input configuration.enabled: true# Paths that should be crawled and fetched. Glob based paths.paths:- /usr/local/xxxtags: c7f1771f-0c8f-4c75-9d71-3b8c4b6bd191fields: source: wang_testfields_under_root: true
  • filebeat只能輸出到一個地方,logstach可以輸出到多個地方

  • fields_under_root,這個字段如果設(shè)置為true,則新增的字段成為頂級目錄,和message平級,如果為false,則會多出一個fields字段,這個fields字段和message字段平級,我們自定義的字段都存放在fields字段下

  • 注意,filebeat文件夾下有一個data的文件夾,可以記錄哪些行傳輸過,所以如果ctrl+c之后再重開,不會把之前傳過的內(nèi)容再傳一遍,除非刪除這個data文件夾

Logstach安裝以及使用

  • 二進(jìn)制安裝,解壓即用

  • 可以用root用戶啟動

  • 部署命令:`bin/logstash -f config/xxx.conf

  • 測試config文件是否寫的正確bin/logstash -t -f config/xxx.conf

  • 配置logstash自動刷新配置文件:bin/logstash -f config/xxx.conf --config.reload.automatic

  • 配置文件如下:

    input {beats {port => 5044} }filter {mutate{rename => {"host" => "_host"}rename => {"message" => "_message"}rename => {"tags" => "_tags"}remove_field => ["@version", "ecs"]}if [log][file][path] == "/usr/local/dashuaibi/log/wang.log"{dissect {mapping => {"message" => "%{wang_time} %{wang_pid} %{wang_level} %{comtent}"}}} }output {if [log][file][path] == "/usr/local/dashuaibi/log/wang.log"{elasticsearch {hosts => "10.1.1.186:9200"index => "wang_test_666"}} }
    • 注意:mapping里的分隔符表達(dá)式,最后一個字段默認(rèn)會把后面所有的內(nèi)容都接收下來
    • field字段的增刪改在filebeat和logstash中都可以做,看業(yè)務(wù)需求。

Elasticsearch安裝以及使用

  • 二進(jìn)制安裝,解壓即用tar -zxf xxx.tar.gz

  • 先在root用戶下修改權(quán)限chown -R elastic:elastic elastic

    • 最后一個elastic是文件夾的名字
    • -R表示處理指定目錄以及其子目錄下的所有文件
  • vim config/elasticsearch.yml,將network.host: 0.0.0.0,讓外部可以訪問到

  • node.name: node-1這行的注釋也打開,下面這個操作要用

  • vim config/elasticsearch.yml,將cluster.initial_master_nodes: ["node-1"]這行的注釋打開,有幾個節(jié)點就在list里寫幾個值,否則master節(jié)點會一直搜索另一個節(jié)點,"node-1"是本臺機(jī)器的hostname,需要提前在/etc/hosts里定義(如果默認(rèn)沒有添加的話),文件里寫的是ip + hostname

  • 啟動命令:bin/elasticsearch

  • ES不能使用root用戶啟動

  • 可以在創(chuàng)建ES索引的時候指定分片的參數(shù),wangtest是要創(chuàng)建的索引名

    PUT wangtest {"settings": {"index": {"number_of_shards": 3,"number_of_replicas": 1}} }

Kibana安裝以及使用

  • 二進(jìn)制安裝,解壓即用
  • vim config/kibana.yml,將server.host:"0.0.0.0",讓外部可以訪問到
  • 啟動命令:./bin/kibana,注意這個.必須帶
  • Kibana也不能使用root用戶啟動,但是根據(jù)提示,好像有開關(guān)可以控制使用root啟動

監(jiān)控軟件cerebro的安裝和使用

  • 下載壓縮包,解壓

  • bin/cerebro

  • 非必須:如果經(jīng)常使用的話,可以先在conf/application.conf中配置好ElasticSearch服務(wù)器地址

    hosts = [{host = "http://localhost:9200"name = "Some Cluster"} ]
  • 參考:https://www.jianshu.com/p/433d821f9667

如何在腳本里啟動filebeat

  • 前提背景:有一些場景是需要在腳本里自動啟動的 ,且希望在后臺運行,所以我想到了nohup

    nohup ./filebeat -e -c /usr/local/sahoc/filebeat.yml &

    這個做法可以后臺起一個進(jìn)程運行filebeat,但是主進(jìn)程不會退出,因為啟動的filebeat在另一個進(jìn)程里有終端輸出

  • 解決方案:nohup ./filebeat -e -c /usr/local/sahoc/filebeat.yml >> $FILEBEAT_LOG 2>&1 &

    這樣把終端的輸出重定向到一個文件,主進(jìn)程就不會持續(xù)監(jiān)聽了,注意2>&1必須加,必須把所有的輸出都追加到文件,文件地址可以是/dev/null

關(guān)于ES查詢的分頁問題

這里的查詢分為兩種,一種是基于ES的DQL,就是用restfulAPI的調(diào)用方式,另一種是說使用SQL語言進(jìn)行查詢。眾所周知在MYSQL里分頁可以使用limit 10,5來解決,第一個10是偏移量(offset),從第十個數(shù)據(jù)開始讀取,第二個參數(shù)5說明是一次取5個值,通過這種方式可以實現(xiàn)分頁。但是使用

POST /_sql?format=txt{"query": "SELECT CONTENT FROM XXX LIMIT 10,5" }

ES報錯,不能識別逗號,所以說這個接口里的limit后面只支持一個參數(shù)。下面說分別對應(yīng)這兩種方法的解決方案

  • DQL查詢方式

    • from+size方式
    • scroll方式
    • search_after方式
    • 參考:https://chunsoft.blog.csdn.net/article/details/91406928
  • SQL的查詢方式

    • cursor(游標(biāo))方式
    • 參考:https://blog.csdn.net/qq_42569136/article/details/115465322
    • 參考:https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-pagination.html
    • 感覺這種方式和上面的search_after是一樣的,多用于數(shù)據(jù)導(dǎo)出,并不適用這種場景,且不能跳轉(zhuǎn),只能一頁一頁的讀
    • fetch_size方案
    • 參考:https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body
    • 可以看到這里有一個fetch_size的參數(shù),講道理應(yīng)該和上面一樣還有一個fetch_from就完美了,可惜是官方并沒有提供這個參數(shù),想不明白是為什么
  • 最終的方案,使用先用/_sql/translate把SQL查詢變成DQL之后,再在DQL里面補(bǔ)充from和size字段,默認(rèn)情況下使用translate會自動有一個size:1000的對象,如果SQL語句里有l(wèi)imit 100,這個1000就變成100了,但是不會自動添加from

如果一行數(shù)據(jù),用指定的分割方式?jīng)]有分割出來怎么辦

直接把這個數(shù)據(jù)添加到message里,并不會丟棄

如果之前我們的filebeat的input.yml文件有一段時間為空,后面再加上還能正常工作嗎?

可以

采用上面的方案會導(dǎo)致,每次有新的數(shù)據(jù)加入log文件,都會把之前的所有內(nèi)容再重新傳一遍,導(dǎo)致重復(fù)采集

  • 問題出在vim編輯器,用echo添加就不會有問題,估計是vim保存的時候創(chuàng)建了一個新的文件或者鏈接
  • 參考:https://elasticsearch.cn/question/2533

vi指令保存后,會重復(fù)發(fā)送,用echo寫東西測試沒問題,類似vi估計都會有問題。官方論壇翻譯內(nèi)容如下:

你怎么修改文件。你試過了$ echo ‘new line’ >> /usr/src/app/log.log嗎?filebeat試圖根據(jù)元數(shù)據(jù)來檢測文件是否是新的。一些工具/編輯器創(chuàng)建一個全新的文件保存并取消舊鏈接。這被filebeat檢測為新文件,迫使它重新發(fā)送所有內(nèi)容。

上面使用[log][file][path]不太嚴(yán)謹(jǐn)

  • 如果不同機(jī)器上有不同的業(yè)務(wù),但是log文件名都一樣,這樣就會把這些日志放在一個索引,其實不應(yīng)該放在一起

  • 采用打tags的方式解決

  • filebeat_input.yml文件里加入tag

    - type: log# Change to true to enable this input configuration.enabled: true# Paths that should be crawled and fetched. Glob based paths.paths:- /usr/local/xxxtags: wang1fields: source: wang_test - type: log# Change to true to enable this input configuration.enabled: true# Paths that should be crawled and fetched. Glob based paths.paths:- /usr/local/xxxtags: wang2fields: source: wang_test

    tags后面的值可以不帶引號

  • logstash配置文件根據(jù)這個tag去做相應(yīng)的處理

    inputs {beats {port => 5044} }filter {if "wang1" in [tags]{dissect {mapping => {"message" => "%{wang_time} %{wang_pid} %{wang_level} %{comtent}"}}} }output {if "wang1" in [tags]{elasticsearch {hosts => "10.1.1.186:9200"index => "wang_test_666"}} }

總結(jié)

以上是生活随笔為你收集整理的使用Elasticsearch+filebeat+logstach+kibana构建日志服务平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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