過去我們介紹了elasticsearch的各項操作,以及一些架構面上的簡介。而我的隊友們也有介紹了elasticsearch的query下法,以及在Kibana上的操作。我們大概可以知道ELK的架構及如何操作,而今天我要介紹的是如何透過Filebeat去蒐集電腦上的各式Log,今天會先介紹Filebeat是什麼,以及如何透過filebeat去load log檔案並上傳;接著幾天我們會一步一步把整個workflow透過docker-compose去串聯起來!
還記得我們在前面幾天介紹的時候,有提到ELK中的L是Logstash,負責蒐集Log以及處理Log格式,而FileBeat其實一樣是可以蒐集以及處理解析Log的工具。而FileBeat官網中的slogan就是 Lightweight shipper for logs,也就是一個傳遞logs的輕量工具。而這個工具的好用之處在於,它基本上default已經能夠蒐集解析各式各樣的logs,像是從system log(windows event、linux syslog)到security log(防火牆citrix......)或是像是nginx的access log以及error log等,許多種不同類型的log,只需要設定好就能蒐集加上幫你上傳到elasticsearch中建立好index + documents,且它是隨時監聽的,也就是當你一有新的Log產生,它就會馬上觸發處理上傳。
而Filebeat還能夠與Kibana去做串聯,也就是當你今天選擇好log source,也連接了你的ELK服務,它會自動創立不同log的dashboard,若沒有特別修改上傳上去的index名稱,不同log會有自己呈現的dashboard可以直接套用,是十分方便的一個監控機制。
安裝流程可以參考 官網安裝說明,其中我是windows系統,我簡單講解一下操作流程。
其實就是按照上面說明,先下載filebeat
解壓縮到C:/Program Files,並且將資料夾名稱改為Filebeat
並且開啟Powershell到達這個路徑
PS > cd 'C:\Program Files\Filebeat'
PS C:\Program Files\Filebeat> .\install-service-filebeat.ps1
接著就安裝好了,這邊特別注意,powershell會有權限問題,可以透過以下script解決
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1.
或者也可以直接用系統管理員開啟Powershell
接著修改設定檔filebeat.yml
將elastic cloud中的id 以及帳號密碼加入設定檔中
cloud.id: "staging:dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw=="
cloud.auth: "filebeat_setup:YOUR_PASSWORD"
接著我們就可以開始使用filebeat,這邊如果還沒加入系統路徑,我們可以先透過到路徑call exe檔案的方式去檢視
首先可以看一下有哪一些預設的log module
.\filebeat.exe modules list
這邊提一下module其實就是我們剛剛提到,針對不同log的parse module
接著我們來開啟nginx module作為示範
PS > .\filebeat.exe modules enable nginx
接著我們可以來設定nginx相關的module,在Filebeat裡面的modules.d,可以找到許多module,我們找到nginx.yml
接著我們把它按照以下方式修改,主要可以看到有access以及error兩種log,如果開啟的話基本上都把它設為enable,接著就是路徑,我們設定為d:/nginx,並且按照格式:acces.log以及error.log(這兩種格式為nginx預設生成log格式)
# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.9/filebeat-module-nginx.html
- module: nginx
# Access logs
access:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["d:/nginx/access.log*"]
# Error logs
error:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["d:/nginx/error.log*"]
# Ingress-nginx controller logs. This is disabled by default. It could be used in Kubernetes environments to parse ingress-nginx logs
ingress_controller:
enabled: false
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
這邊提供給大家各一個sample
access.log-20201005
192.168.99.1 - - [05/Oct/2020:09:19:58 +0000] "GET / HTTP/1.1" 200 12 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
192.168.99.1 - - [05/Oct/2020:09:20:05 +0000] "GET / HTTP/1.1" 200 12 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "-"
error.log-20201005
2020/10/05 20:34:40 [error] 1796#1796: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.95.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.95.152"
放入D:/nginx後,我們就可以開始setup
PS > .\filebeat.exe setup -e
setup完以後就可以開始listen資料夾
filebeat.exe -e
你就會發現它開始在listen,並且讀取你裡面有的log資料。
接著你可以試著複製一個新的log進去,它就會開始繼續運作。
明天我們會繼續講解上傳完以後如何應用,以及dashbaord的部分