FR+ELK Lession4 logstash = ###### tags: `elk` `docker` 本節說到第二部分elk 的 logstash ### 什麼是logstash 用來蒐集以及分析日誌用 Logstash包含3個主要部分: 輸入(inputs),過濾器(filters)和輸出(outputs)。 inputs主要用來提供接收資料的規則,比如使用採集檔案內容; filters主要是對傳輸的資料進行過濾,比如使用grok規則進行資料過濾; outputs主要是將接收的資料根據定義的輸出模式來進行輸出資料,比如輸出到 ### 為什麼要用logstash 如果不使用 日誌就會雜亂無章 在畫面上就很難看懂 ### 如何使用 以下使用docker 安裝 ##### 1.建立logstash.conf ![](https://i.imgur.com/UWTc5pl.png) 這邊先說個有趣的事情 logstash.conf的檔案設定抓取 並不是依照檔名 而是依照檔案裏面的內文 所以可以準備多份logstash.conf 但是只有logstash.conf 這個裡面是放 input和output 其他的.conf 是放 filter input和output只能有一個 filter 可以很多個 logstash.conf 寫法 input { redis { host => "redis-test" port => 6379 data_type => "list" key => "applog" } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "%{[fields][env]}_%{[fields][type]}-%{+YYYY.MM.dd}" } } input 是來源 來源是redis output 是目的地 elasticsearch(nosql) logstash.conf(fittle) 寫法 filter { if [message] =~ "^#" { drop {} } if [fields][type] == "iisaccesslog" { grok { match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:s-ip} %{WORD:cs-method} %{NOTSPACE:cs-uri-stem} %{NOTSPACE:cs-uri-query} %{NUMBER:s-port} %{NOTSPACE:cs-username} %{IPORHOST:c-ip} %{NOTSPACE:UserAgent} %{NOTSPACE:Referer} %{NUMBER:sc-status} %{NUMBER:sc-substatus} %{NUMBER:sc-win32-status} %{NUMBER:time-taken:int}"] } date { match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ] target => "log-timestamp" } mutate { remove_field => [ "log_timestamp"] } } } 這邊是最大的重點 ##### 2.建立dockerfile # 基礎版本 FROM logstash:7.16.2 # 複製設定檔 COPY /conf.d /etc/logstash/conf.d # 調整設定檔權限 filebeat設定檔 需要 USER root # 把映射進來的路徑裡面的.conf都設好權限/etc/logstash/conf.d RUN bash -c 'chown root:logstash /etc/logstash/conf.d/*.conf' CMD ["-f", "/etc/logstash/conf.d"] USER logstash ##### 3.建立docker-compose version: '3' services: logstash: build: D:\ELK_IIS\logstash image: logstash:v1 container_name: logstash-test networks: - elknew networks: elknew: