Kibana 查看 IIS Log

  1. 前言
  2. IIS 設定
  3. 修改 filebeat.yml
  4. Logstash Parse 設定
  5. 重啟服務 查看結果
  6. 補充 IIS Log 常用搜尋

前言

繼上一篇 w4560000 - ELK Stack 介紹建置範例後
本篇 實作 如何將 IIS Log 在 Kibana呈現

IIS 設定

  1. 建好一個 IIS 站台後,點擊 紀錄

  2. 將標準欄位 全選 & 設定 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語法

  1. 搜尋 特定 機器 Request
hostname: "$hostname"

# ex:
# hostname: "90PC194017"
  1. 搜尋 特定 站台 Request
HttpHost: "$HttpHost"

# ex:
# HttpHost: "localhost:8000"
  1. 搜尋 特定 API
HttpURL: "$HttpURL"

# ex:
# HttpURL: "/api/LogTest"
  1. 搜尋 回應時間
HttpTimeTaken > $HttpTimeTaken
HttpTimeTaken < $HttpTimeTaken

# ex: 回應時間 超過 10 毫秒
# HttpTimeTaken > 10

轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡

斗內💰

×

歡迎斗內

github