ELK在運維監控領域使用非常廣泛,日志采集通常依靠Logstash,但是通常來講Logstash架構比較重載,一個安裝包由幾百MB,相比之下Elastic還提供另一種更輕量的采集工具Beats。Beats 平臺集合了多種單一用途數據采集器。這些采集器安裝后可用作輕量型代理,從成百上千或成千上萬臺機器向 Logstash 或 Elasticsearch 發送數據。本文簡要介紹一下使用Winlogbeat收集Windows日志,并用ES + Kibana檢索的配置方法。
步驟一:安裝Winlogbeat
- 下載Winlogbeat安裝包downloads page.
- 解壓到C:\Program Files.
- 重名名解壓文件winlogbeat-<version>目錄為Winlogbeat
- 打開PowerShell,以管理員身份運行(右鍵點擊Powershell并選擇以管理員身份運行)。如果你使用XP,可能需要自行下載安裝PowerShell
-
在PowerShell中運行如下命令安裝服務
mark
在運行Winlogbeat前,還需要檢查一下配置文件中的選項,比如C:\Program Files\Winlogbeat\winlogbeat.yml,安裝包里提供一個完整的配置文件樣例winlogbeat.full.yml,更多資料請參考.
配置Winlogbeat
編輯winlogbeat.yml來修改配置,熟悉yaml語法的同學一定不會陌生,不熟悉的請自行熟悉。
舉例如下:
winlogbeat.event_logs:
- name: Application
- name: Security
- name: System
output.elasticsearch:
hosts:
- localhost:9200
logging.to_files: true
logging.files:
path: C:/ProgramData/winlogbeat/Logs
logging.level: info
步驟二:配置Winlogbeat
- 在event_logs章節,指定你要監控的event log類型,Winlogbeat默認監控application, security, and system這三種
winlogbeat.event_logs:
- name: Application
- name: Security
- name: System
要查看全部類型,在PowerShell中運行Get-EventLog *,更多信息請參考event_logs.name.
- 如果需要把日志發送到Elasticsearch,這里把IP端口寫進去:
output.elasticsearch:
hosts:
- localhost:9200
如果要把日志寫到Logstash,請繼續往下看
- 修改完配置文件以后運行下面的命令測試一下:
PS C:\Program Files\Winlogbeat> .\winlogbeat.exe -c .\winlogbeat.yml -configtest -e
步驟三:配置Winlogbeat使用Logstash
如果你想把日志直接寫到Elasticsearch那么這一步可以跳過。
要將日志通過Logstash寫到ES,需要先配置Logstash的轉發規則,舉例如下:
input{
beats{
port=>5044type=>"wineventlog"
}
}
output{
stdout{
}if[
type
]=="wineventlog"{
elasticsearch{
hosts=>"100.100.16.231"index=>"winlogbeat-%{+yyyy.MM.dd}"
}
}else{
elasticsearch{
hosts=>"100.100.16.231"
}
}
}
配置好以后確保Logstash已經啟動且運行正常。接下來要配置Winlogbeat將日志發送到Logstash的5044端口
#----------------------------- Logstash output --------------------------------
output.logstash:
hosts: ["127.0.0.1:5044"]
這里還需要額外做一個步驟,讓Elasticsearch加載索引模板,因為這里我們是用Logstash往ES上轉日志,所以必須手動加載索引模板,如果直接往ES發日志,這一步可以省略
步驟四:加載索引模板
在Elasticsearch里面,索引模板(Index templates)用來定義字段的設置和映射關系,推薦的Winlogbeat索引模板配置文件在Winlogbeat的安裝包里winlogbeat.yml,下面我們通過ES的API接口把模板推送過去,其實就是構造一個HTTP的PUT請求把數據發出去,工具和方法很多這里介紹兩種,
使用PowerShell
PS C:\Program Files\Winlogbeat> Invoke-WebRequest -Method Put -InFile winlogbeat.template.json -Uri http://localhost:9200/_template/winlogbeat?pretty -ContentType application/json
使用Postman
這里localhost:9200是Elasticsearch的監聽端口。另外刪除已有的索引模板執行如下命令:
curl -XDELETE 'http://localhost:9200/winlogbeat-*'
第五步:啟動Winlogbeat
用PowerShell啟動:
PS C:\Program Files\Winlogbeat> Start-Service winlogbeat
執行以后Winlogbeat就開始執行了,如果使用上面的配置文件,日志會輸出到C:\ProgramData\winlogbeat\Logs\winlogbeat。
我們可以通過Services management控制這個任務的狀態,啟動控制臺
PS C:\Program Files\Winlogbeat> services.msc
停止任務:
PS C:\Program Files\Winlogbeat> Stop-Service winlogbeat
步驟六:加載Kibana儀表盤樣例
為方便用戶監控收到的數據,官方還提供了一個Winlogbeat的Kibana儀表盤樣例,當然我們可以基于這個樣例自己定制儀表盤。
導入儀表盤
Winlogbeat安裝包里有個scripts/import_dashboards程序,操作步驟非常簡單,打開PowerShell命名行,執行該程序:
PS > scripts\import_dashboards.exe
腳本默認假設你的Elasticsearch在127.0.0.1:9200,如果你的環境不在本地,可以執行下面的命令指定服務器位置:
PS > scripts\import_dashboards.exe -es http://192.168.33.60:9200
如果ES開啟了賬號密碼認證:
PS > scripts\import_dashboards.exe -es https://xyz.found.io -user user -pass password
查看儀表板
導入完成以后,用瀏覽器訪問Kibana頁面,如:http://127.0.0.1:5601.
在Discover 頁面,可以看到之前定義好的索引winlogbeat-*
同時,打開Dashboard頁面,可以選擇對應的儀表盤查看
同時,打開Dashboard頁面,可以選擇對應的儀表盤查看