一、logstash的一些名詞介紹
Pipeline
- input-filter-output 的 3個階段的處理流程。
- 隊列管理。
- 插件生命週期管理。
Logstash Event
- 他是logstash內部流轉的數據的表現形式。
- 原始數據在input 階段被轉換成 Event,在 output階段 event 被轉換成目標格式數據。
- 在配置文件中可以對 Event 中的屬性進行增刪改查。
架構圖如下:
二、queue
1、分類(2類)
In Memory:無法處理進程 crash、機器宕機等情況,會導致數據丟失
Persistent Queue In Disk:
- 可處理進程crash 等情況,保證數據不會丟失
- 保證數據至少消費一次
- 充當緩衝區,可以替代kafka等消息隊列的作用
2、Persistent Queue
流程如下:
- 1->input將data傳給persistent queue
- 2->persistent queue 將data 存儲一份到 disk
- 3,4->disk告訴input已經接收到信息(此處目的是input可以隨時調整,避免數據進出過於不平衡的情況)
- 5->persistent queue將data傳給output
- 6->output傳送ack 信息給 persistent queue
- 7->persistent queue將信息傳送給disk,如果正常,此時disk就可以刪除data 了
基本配置:
- queue.type: persisted(默認是memory)
- queue.max_bytes: 4gb(隊列存儲最大的數據量,默認是1gb)
三、啓動參數
注:Visual VM 工具可以查看jvm情況。
- pipeline.workers:pipeline線程數,即 filter_output 的處理線程數,默認是cpu核數(啓動時 -w即可指定)
- pipeline.batch.size:batcher 一次批量獲取的待處理文檔數,默認是125,可以根據輸出進行調整,越大會 佔用越多的heap 空間,可以通過 jvm.options 調整(啓動時 -b即可指定)
- pipeline.batch.delay:batcher 等待的時長,單位是 ms(啓動時 -u即可指定)
- config.string:指定pipeline 內容(啓動時 -e即可指定,指定conf配置文件的位置)
- –path.data:持久化村塾數據的文件夾,默認是logstash根目錄下的data(persistent queue纔用到)
- –debug:日誌等級
- –config.test_and_exit:顧名思義,檢測conf文件內容是否正確並退出(啓動時 -t 即可指定)
四、pipeline的配置(conf文件的配置)
在配置中引用logstash event 的屬性(字段),主要有2中方式:直接引用字段值和在字符串中以sprintf方式應用
- 直接引用字段值:使用[] 即可,嵌套字段寫多層 [] (中括號)即可。
- 字符串中引用字段值(sprintf):使用%{} 來實現。
五、常見問題
1、查看已安裝插件
bin/logstash-plugin list --verbose
2、logstash 輸入 elasticsearch 時間的處理
Elasticsearch原生支持date類型,json格式通過字符來表示date類型。所以在用json提交日期至elasticsearch的時候,es會隱式轉換,把es認爲是date類型的字符串直接轉爲date類型。
date類型是包含時區信息的,如果我們沒有在json代表日期的字符串中顯式指定時區,對es來說沒什麼問題,但是如果通過kibana顯示es裏的數據時,就會出現問題,數據的時間會晚8個小時。因爲kibana從es裏讀取的date類型數據,沒有時區信息,kibana會默認當作0時區來解析,但是kibana在通過瀏覽器展示的時候,會通過js獲取當前客戶端機器所在的時區,也就是東八區,所以kibana會把從es得到的日期數據減去8小時。這裏就會導致kibana經常遇到的“數據時間延遲8小時”的問題。
所以最佳實踐方案就是:我們在往es提交日期數據的時候,直接提交帶有時區信息的日期字符串,如:“2016-07-15T12:58:17.136+0800”。
索引中定義的日期格式與提交數據的日期格式要一致,否則會報錯。
格式化時間有2種方法:
(1)存入 elasticsearch 前,將數據格式化好
創建索引是指定date format示例:
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
}
(2)使用 elasticsearch-sql 查詢時調用 date_format(date, param)函數
使用 elasticsearch-sql 查詢時調用 date_format(date, param)函數。
此方法只針對一對一的date類型,對於 nested(一對多)的內部的date 類型無效(無法格式化)
六、filebeat之module
filebeat 提供了衆多開箱即用的 module。
./filebeat modules list 查看 module列表
./filebeat modules enable nginx 啓用 nginx module
配置位於 module 文件夾中。
七、metricbeat介紹
1、module
metricbeat 收集指標的對象,比如linux、windows、mysql 等
2、metricset
- metricbeat 收集指標的集合,該集合以減少收集指標調用次數爲劃分依據。
- 1個module 可以有多個 metricset