前言
繼上一篇 w4560000 - ELK Stack 介紹建置範例後
本篇 實作 如何將 IIS Log 在 Kibana呈現
IIS 設定
建好一個 IIS 站台後,點擊 紀錄
將標準欄位 全選 & 設定 IIS Log 路徑
IIS Log 路徑 D:\LogFiles\IISLog
修改 filebeat.yml
加上 IIS Log
...略
filebeat.inputs:
#=========================== IIS Log =============================
# 加上 IIS Log
- input_type: log
enabled: true
paths: D:\LogFiles\IISLog\*\*.log
fields:
service: iislog
multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
multiline.negate: true
multiline.match: after
exclude_lines: ["^#"]
# 原先設定
- input_type: log
enabled: true
paths: D:\LogFiles\WebLog\ELK_Test\*.log
fields:
service: weblog
fields.webtype: ELK_Test
multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
multiline.negate: true
multiline.match: after
...略
Logstash Parse 設定
在 logstash/conf.d 底下 建立 iislog.conf
vi iislog.conf
filter {
if [fields][service] == "iislog" {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{WORD:SiteName} %{NOTSPACE:hostname} %{IP:HttpServerIP} %{WORD:HttpMethod} %{URIPATH:HttpURL} %{NOTSPACE:HttpQueryString} %{NUMBER:HttpPort} %{NOTSPACE:UserName} %{IPORHOST:HttpClientIP} %{NOTSPACE:HttpProtocol} %{NOTSPACE:UserAgent} %{NOTSPACE:Cookie} %{NOTSPACE:HttpReferer} %{NOTSPACE:HttpHost} %{NUMBER:HttpStatus} %{NUMBER:SubStatus} %{NUMBER:Win32Status} %{NUMBER:BytesSent} %{NUMBER:BytesReceived} %{NUMBER:HttpTimeTaken}"]
remove_field => ["message"]
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]
timezone => "UTC"
}
mutate {
convert => {
"BytesSent" => "integer"
"BytesReceived" => "integer"
"HttpTimeTaken" => "integer"
}
add_field => {
"[@metadata][env]" => "%{[fields][env]]}"
}
}
}
}
重啟服務 查看結果
服務重啟後,呼叫IIS站台時 可看到 IISLog 在 Elasticsearch 的資料
建立 index pattern 後 即可查看資料
原始 IIS Log
2022-04-24 07:21:41 W3SVC9 90PC194017 ::1 GET /api/LogTest value=123 8000 - ::1 HTTP/1.1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/100.0.4896.127+Safari/537.36+Edg/100.0.1185.50 ASP.NET_SessionId=gvmxduvbth4t2stj2ejdk1c3;+__AntiXsrfToken=a162b2326ea24f01adf7f4e5b4734eea;+.AdventureWorks.Session=CfDJ8HKxZviXaBZPjCP8k%2BtJ7bhxCkb%2F%2BBN5eN1%2F0He27%2Frmc0mhi7HcOnIR6jOYQoi0Ywn%2Br66AmpOEkVcH5vfouVXI%2BoCuPKsP%2FQYx0rTUalga7EFsUWYsnqmuvNrbrJDubpnElDL2oXmq8mzMsjJNVdhZPvIuKCDAIixgBASsgWmM;+trdipcktrffcext=1;+_dd_s=logs=1&id=b90d8831-e1b9-43f4-bf36-d1ab87a1b001&created=1650783776468&expire=1650785801284 - localhost:8000 200 0 0 140 1188 1
可以看到 IIS Log 已被轉成相關欄位 更便於搜尋
補充 IIS Log 常用搜尋
順便紀錄一下 常用的 IIS Log 在 Kibana上的 KQL語法
- 搜尋 特定 機器 Request
hostname: "$hostname"
# ex:
# hostname: "90PC194017"
- 搜尋 特定 站台 Request
HttpHost: "$HttpHost"
# ex:
# HttpHost: "localhost:8000"
- 搜尋 特定 API
HttpURL: "$HttpURL"
# ex:
# HttpURL: "/api/LogTest"
- 搜尋 回應時間
HttpTimeTaken > $HttpTimeTaken
HttpTimeTaken < $HttpTimeTaken
# ex: 回應時間 超過 10 毫秒
# HttpTimeTaken > 10
轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡