beats
elk架構圖:
Filebeat負責從web服務器上實時抓取數據,當log文件發生變化時,將文件內容吐給kafka。
Kafka是消息隊列,主要作用是在filebeat和logstash之間做緩存,避免因寫入logstash的數據量過大,導致數據丟失。
filebeat(go語言開發)
官網:https://www.elastic.co/cn/beats/filebeat
功能:用於監控、收集服務器日誌文件.
1.advantage
無論在任何環境中,隨時都潛伏着應用程序中斷的風險。Filebeat 能夠讀取並轉發日誌行,如果出現中斷,還會在一切恢復正常後,從中斷前停止的位置繼續開始。
Filebeat 內置有多種模塊(Apache、Cisco ASA、Microsoft Azure、NGINX、MySQL 等等),可針對常見格式的日誌大大簡化收集、解析和可視化過程,只需一條命令即可。之所以能實現這一點,是因爲它將自動默認路徑(因操作系統而異)與 Elasticsearch 採集節點管道的定義和 Kibana 儀表板組合在一起。不僅如此,數個 Filebeat 模塊還包括預配置的 Machine Learning 任務。
當將數據發送到 Logstash 或 Elasticsearch 時,Filebeat 使用背壓敏感協議,以應對更多的數據量。如果 Logstash 正在忙於處理數據,則會告訴 Filebeat 減慢讀取速度。一旦擁堵得到解決,Filebeat 就會恢復到原來的步伐並繼續傳輸數據。
2.架構:
3.Filebeat工作原理
Filebeat由兩個主要組件組成:input和 harvester。
-
harvester:
- 負責讀取單個文件的內容。
- 如果文件在讀取時被刪除或重命名,Filebeat將繼續讀取文件。
-
input
-
輸入負責管理收割機並查找所有可讀取的資源。
-
如果輸入類型爲
log
,則輸入將在驅動器上找到與定義的全局路徑匹配的所有文件,併爲每個文件啓動收集器。每個輸入都在其自己的Go例程中運行。 -
支持多種輸入類型 eg:log,Container,Kafka,Redis,UDP,Docker…
-
-
Filebeat如何保持文件的狀態
- Filebeat 保存每個文件的狀態並經常將狀態刷新到磁盤上的註冊文件中。
- 該狀態用於記住harvester正在讀取的最後偏移量,並確保發送所有日誌行。
- 如果輸出(例如Elasticsearch或Logstash)無法訪問,Filebeat會跟蹤最後發送的行,並在輸出再次可用
時繼續讀取文件。 - 在Filebeat運行時,每個prospector內存中也會保存的文件狀態信息,當重新啓動Filebeat時,將使用註冊 文件的數據來重建文件狀態,Filebeat將每個harvester在從保存的最後偏移量繼續讀取。
- 文件狀態記錄在data/registry文件中。
4.部署及運行:
-
部署:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html
-
配置
核心配置文件filebeat.yml
- 控制檯測試修改filebeat.yml:
-
filebeat.inputs: - type: stdin enabled: true setup.template.settings: index.number_of_shards: 3 output.console: pretty: true enable: true
2.啓動filebeat
./filebeat -e -c filebeat.yml
輸入:hello beats
控制檯顯示結果:
-
{ "@timestamp": "2020-05-13T02:40:47.361Z", "@metadata": { #元數據信息 "beat": "filebeat", "type": "_doc", "version": "7.6.2" }, "ecs": { "version": "1.4.0" }, "host": { "name": "centos-200" }, "agent": { "ephemeral_id": "e5774b50-26b5-4793-942e-19ff3a60afa1", "hostname": "centos-200", "id": "62898e4b-d500-4a1b-8fd5-5090ff5e1cc7", "version": "7.6.2", "type": "filebeat" }, "log": { "offset": 0, "file": { "path": "" } }, "message": "hello beats", #輸入結果 "input": { #控制檯標準輸入 "type": "stdin" } }
3.讀取文件測試
-
修改filebeat.yml配置文件 filebeat.inputs: - type: log enabled: true paths: - /root/zqc/logs/*.log setup.template.settings: index.number_of_shards: 3 output.console: pretty: true enable: true
運行結果
-
{ "@timestamp": "2020-05-13T02:53:29.266Z", "@metadata": { "beat": "filebeat", "type": "_doc", "version": "7.6.2" }, "log": { "offset": 0, "file": { "path": "/root/zqc/logs/a.log" } }, "message": "abc", "input": { "type": "log" }, "ecs": { "version": "1.4.0" }, "host": { "name": "centos-200" }, "agent": { "ephemeral_id": "ab92a3cf-0509-412f-ac4d-8a7bc507c7db", "hostname": "centos-200", "id": "62898e4b-d500-4a1b-8fd5-5090ff5e1cc7", "version": "7.6.2", "type": "filebeat" } }
4.自定義字段:打標籤
-
#修改filebeat.yml文件 filebeat.inputs: - type: log enabled: true paths: /root/zqc/logs/*.log tags: ["zqc"] fields: from: zqc-input setup.template.settings: index.number_of_shards: 3 output.console: pretty: true enable: true
運行結果
{ "@timestamp": "2020-05-13T03:07:42.105Z", "@metadata": { "beat": "filebeat", "type": "_doc", "version": "7.6.2" }, "message": "456", "tags": [ "zqc" #添加的標籤 ], "input": { "type": "log" }, "fields": { #添加的字段 "from": "zqc-input" }, "agent": { "id": "62898e4b-d500-4a1b-8fd5-5090ff5e1cc7", "version": "7.6.2", "type": "filebeat", "ephemeral_id": "86991f47-98b3-4528-b686-404a8dcff0af", "hostname": "centos-200" }, "ecs": { "version": "1.4.0" }, "host": { "name": "centos-200" }, "log": { "offset": 8, "file": { "path": "/root/zqc/logs/a.log" } } }
5.Module
在Filebeat中,有大量的Module,可以簡化我們的配置,直接就可以使用,如:mysql,redis,mongodb等
./filebeat modules enable redis #啓動
./filebeat modules disable redis #禁用
Metricbeat
功能:用於從系統和服務收集指標。
1.advantage
-
系統級監控,更簡潔
將 Metricbeat 部署到您的所有 Linux、Windows 和 Mac 主機,並將它連接到 Elasticsearch 就大功告成了:您 可以獲取系統級的 CPU 使用率、內存、文件系統、磁盤 IO 和網絡 IO 統計數據,還可針對系統上的每個進程獲得與 top 命令類似的統計數據
-
單個二進制文件提供多種模塊
Metricbeat 提供多種內部模塊,這些模塊可從多項服務(諸如 Apache、Jolokia、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus 等等)中收集指標。安裝簡單,完全零依賴性。只需在配置文件中啓用您所需的模塊即可。
而且,如果您沒有看到要找的模塊,還可以自己構建。以 Go 語言編寫 Metricbeat 模塊,過程十分簡單。
- 容器就緒
近來是不是所有工作都轉移到了 Docker 中?通過 Elastic Stack,您能夠輕鬆地監測容器。將 Metricbeat 部署到同一臺主機上的一個單獨容器後,它將收集與主機上運行的其他每一個容器相關的統計數據。在收集統計數據時,它直接從 proc 文件系統讀取 cgroup 信息,這就意味着它無需特權即可訪問 Docker API,並且同樣適用於其他 Runtime。針對 Docker 的 Autodiscovery 讓事情進一步簡化,您只需指定一個條件即可開啓 Metricbeat 模塊。
- 不錯過任何檢測信號
將指標通過假脫機傳輸方式輸送至磁盤,這樣您的數據管道再也不會錯過任何一個數據點,即使發生中斷(例如網絡問題),也勿需擔心。Metricbeat 會保留傳入的數據,並在重新上線後將這些指標輸送至 Elasticsearch 或 Logstash
2.架構
Metricbeat有2部分組成,一部分是Modules,另一部分爲Metricsets
- Metricbeat Module
定義了從特定服務(例如Redis,MySQL等)收集數據的基本邏輯。 該Module指定有關服務的詳細信息,包括如何連接,收集度量的頻率以及收集哪些度量。
- Metricsets
收集指標的集合,如:cpu、memory、network等;
3.部署運行
配置文件
默認收集系統module數據system.yml
修改配置文件:metricbeat.yml
-
metricbeat.config.modules: path: /etc/metricbeat/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 index.codec: best_compression output.elasticsearch: hosts: ["192.168.16.129:9200"] processors: #使用處理器過濾和增強數據 - add_host_metadata: ~ - add_cloud_metadata: ~
運行:./metricbeat -e
待補充 Packetbeat
Packetbeat 是一個實時網絡數據包分析工具,與elasticsearch一體來提供應用程序的監控和分析系統。
Packetbeat通過嗅探應用服務器之間的網絡通訊,來解碼應用層協議類型如HTTP、MySQL、redis等等,關聯請求與響應,並記錄每個事務有意義的字段。
Packetbeat可以幫助我們快速發現後端應用程序的問題,如bug或性能問題等等,修復排除故障也很快捷。
Packetbeat目前支持的協議有:
Packetbeat可以將相關事務直接插入到elasticsearch或redis(不推薦)或logstash。
Packetbeat可以運行在應用服務器上或者獨自的服務器。當運行在獨自服務器上時,需要從交換機的鏡像端口或者竊聽設備上獲取網絡流量。
LOGSTASH
1.介紹
官網:https://www.elastic.co/guide/en/logstash/current/first-event.html
-
集中、轉換和存儲數據
Logstash 是開源的服務器端數據處理管道,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到您 最喜歡的“存儲庫”中。
-
輸入、過濾器和輸出
Logstash 能夠動態地採集、轉換和傳輸數據,不受格式或複雜度的影響。利用 Grok 從非結構化數據中派生出結構,從 IP 地址解碼出地理座標,匿名化或排除敏感字段,並簡化整體處理過程。
-
實時解析和轉換數據
數據從源傳輸到存儲庫的過程中,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。
- 利用 Grok 從非結構化數據中派生出結構
- 從 IP 地址破譯出地理座標
- 將 PII(unencrypted personal data ) 數據匿名化,完全排除敏感字段
- 簡化整體處理,不受數據源、格式或架構的影響
流程圖:
2.部署與運行
接收Filebeat輸入的日誌
Filebeat讀取nginx的日誌,發送到logstash,通過logstash發送到es
步驟:
1.編輯filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
tags: ["log"]
fields:
from: nginx
fields_under_root: false
output.logstash:
hosts: ["192.168.16.129:5044"]
2.編輯logstash.yml
input {
beats {
port => "5044"
}
}
filter {
grok {
patterns_dir => "/usr/share/logstash/nginx-patterns"
match => { "message" => "%{NGINX_ACCESS}"}
remove_tag => [ "_grokparsefailure" ]
add_tag => [ "nginx_access" ]
}
}
output {
elasticsearch {
index => "abc" #將結果輸出到es
}
}
3.運行
先啓動logstash
#啓動 --config.test_and_exit 用於測試配置文件是否正確
bin/logstash -f logstash.conf --config.test_and_exit
#正式啓動 --config.reload.automatic 熱加載配置文件,修改配置文件後無需重新啓動
bin/logstash -f logstash.conf --config.reload.automatic
,再啓動filebeat
./filebeat -e -c filebeat.yml
刷新瀏覽器之後kibana頁面顯示的點擊次數