---
# System prepended metadata

title: FR+ELK Lession4 logstash
tags: [elk, docker]

---

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: 


