嘴巴會說(情商)比技術有時候更重要!php
水平有限,但願你看完有所收穫!html
1,filebeat直連Elasticsearch,須要對massage提取一些特定的字段。java
2,若是你對數據須要處理的比較多仍是建議用logstash,logstash更強大一些。linux
pipeline 我最開始瞭解的時候是使用jenkins的時候,即交付流水線。json
平時寫的jenkinsfile就是用的pipeline。vim
我理解的pipeline就是把你在界面上配置的自動化變成代碼腳本。即Pipeline as Code。瀏覽器
原始的日誌內容以下,bash
我須要提取:4975481caf96a734bdb300acc118b5b5app
2021-06-17 20:50:39|ERROR|4975481caf96a734bdb300acc118b5b5|1623934239.079|20003|user service error|/var/www/html/vendor/mdp/java-client/src/JavaClientResponse.php
想要使用filebeat提取massage字段curl
1,得先在es裏面建立一個pipeline腳本。
2,配置filebeat使用es的pipeline腳本。
就是隨便在linux目錄建立一個文件。
文件名稱隨便起,後期能找到就行。方便之後作更改。 vim extract-traceid-pipeline.json { "description" : "extract-traceid-pipeline", # 描述,能夠描述一下這個pipeline的做用 "processors" : [ { "grok" :{ # grok 語法 "field" : "message", # 須要對你採集的信息的哪一個字段進行處理。其實就是filebeat採集完一條日誌以後 來執行這個處理。你能夠對採集的任何字段的值進行處理 "patterns" : ["ERROR\\|%{DATA:trace_id}\\|"] # 這個就是從message信息中提取信息的語法了。 } } ] } # [""] 這個是固定寫法,裏面的纔是正則 # 2021-06-17 20:50:39|ERROR|4975481caf96a734bdb300acc118b5b5|1623934239.079...... # 提取4975481caf96a734bdb300acc118b5b5,能夠看到這段數據以前的是ERROR| # 那我前面就寫ERROR\\| |須要轉義可是es也須要轉義一層,因此就是兩個\\ # %{} 這個是固定的寫法,就是你想要提取哪一個信息而後 使你提取出來的信息成爲一個字段key:value。 # DATA 是grok的語法,內置字段類型,好比 DATE:表示你提取的信息是日期 NUMBER:表示爲數值 DATA:表示爲字符串 IP:表示爲一個ip地址 你在這標識的類型會在kibana上面把key的類型標識出來。 # :trace_id 這個表示你給 你提取出來的信息定義一個Key的名稱,好比 trace_id:4975481caf96a734bdb300acc118b5b5 到時候你收集到的這條日誌信息裏面就會多出這一個字段 你在kibana就能搜索到。 這個名稱你隨便定義就行。
在你json文件所在的目錄執行 curl -H "Content-Type: application/json" -XPUT 'http://192.168.31.61:9200/_ingest/pipeline/extract-traceid-pipeline' -d@extract-traceid-pipeline.json # extract-traceid-pipeline 這個名稱你能夠隨便起,可是在filebeat配置的時候須要寫這個名稱 # extract-traceid-pipeline.json 這個就是你本身的json文件
能夠看到es裏面有咱們上傳的pipeline規則了
訪問:http://192.168.31.61:9200/_ingest/pipeline,我沒安裝google瀏覽器json插件。安裝一個就格式化了。
還有就是能夠用kibana的開發工具看到:
# 編輯filebeat.yml配置文件 output.elasticsearch: hosts: ["192.168.31.61:9200","192.168.31.62:9200","192.168.31.63:9200"] pipelines: # pipelines 就是你下面能夠放多個pipeline - pipeline: "extract-traceid-pipeline" # 這個名稱就是你curl put到es裏面 你後面寫的那個名稱 when.contains: # 這裏是一個filebeat的配置語法,能夠看看filebeat的官方文檔,大體的意思就是if 條件判斷 log_topics: "php-errlogs" # 就是當log_topics:"php-errlogs" 的時候才用這個pipeline # when 就是if # contains 就是 包含的意思 還有其餘的好比:and,or,not,equals(必須相等)
能夠直接查看es數據,也能夠去kibana上面看。收集的數據裏面就會多出一個字段。