iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0

Day 20 Collect Log with Filebeat


前言

過去我們介紹了elasticsearch的各項操作,以及一些架構面上的簡介。而我的隊友們也有介紹了elasticsearch的query下法,以及在Kibana上的操作。我們大概可以知道ELK的架構及如何操作,而今天我要介紹的是如何透過Filebeat去蒐集電腦上的各式Log,今天會先介紹Filebeat是什麼,以及如何透過filebeat去load log檔案並上傳;接著幾天我們會一步一步把整個workflow透過docker-compose去串聯起來!

什麼是Filebeat

還記得我們在前面幾天介紹的時候,有提到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可以直接套用,是十分方便的一個監控機制。

Install Filebeat

安裝流程可以參考 官網安裝說明,其中我是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的部分


上一篇
Day 19 Ingest-2
下一篇
Day 21 Collect Log with Filebeat-2
系列文
親愛的,我把ElasticSearch上雲了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言