天天看點

DataStreams+logstash+ILM進行日志定時删除,節省硬碟資源背景簡要配置Kibana上添加 Lifecycle PoliciesKibana上添加Index Templateslogstash配置filebeat配置

背景

目前所有的K8S上的容器日志都被收集到了我們的ELK上,随着時間的推移,ELK上的日志所占的存儲空間越來越多,我們需要一個定時清理的政策,以節約硬碟資源。

我們主要配置以下ELK裡的這幾個地方

  • 通過kibana新增一個lifecycle policies
  • 通過kibana新增一個index template,注意配置DataStreams
  • logstash 的logstashPipeline
  • filebeat的filebeat.yml檔案

簡要配置
DataStreams+logstash+ILM進行日志定時删除,節省硬碟資源背景簡要配置Kibana上添加 Lifecycle PoliciesKibana上添加Index Templateslogstash配置filebeat配置
Kibana上添加 Lifecycle Policies

1.點選菜單欄的【management】->點選【stack management】

2.點選DATA目錄下的【Index Lifecycle Policies】

3.點選【Create policy】建立一個新的生命周期規則

4.測試的話,規則就随便配置一個每10分鐘疊代一個新的,删除超過1小時的index

期望效果:

對應的index會從00001開始每隔10分鐘往上+1,同時最多存在7個index。

DataStreams+logstash+ILM進行日志定時删除,節省硬碟資源背景簡要配置Kibana上添加 Lifecycle PoliciesKibana上添加Index Templateslogstash配置filebeat配置

Kibana上添加Index Templates

2.點選DATA目錄下的【Index Management】

3.點選【Index Templates】小标簽,【Create template】建立模闆

4.index patterns比對我們logstash上傳來的index,比如192*

5.Data stream的配置按鈕打開

DataStreams+logstash+ILM進行日志定時删除,節省硬碟資源背景簡要配置Kibana上添加 Lifecycle PoliciesKibana上添加Index Templateslogstash配置filebeat配置

6.index settings配置上我們上一步添加的Lifecycle Policies

DataStreams+logstash+ILM進行日志定時删除,節省硬碟資源背景簡要配置Kibana上添加 Lifecycle PoliciesKibana上添加Index Templateslogstash配置filebeat配置

7.mappings參數需要配置【mapped fields】和【Dynamic Template】内容可以從logstash的配置裡完整複制過來

8.其他的諸如component telmpalte 和Aliases都不用配置了。儲存這個index template就行了

logstash配置

因為要動态生成index,是以要寫一些filter規則,這裡就不貼出來了。關鍵注意output裡要設定

"action" => "create"和ilm_enabled => false      
logstash.conf: |
    input {
      beats {
        port => 5044
      }
      tcp {
        port => 9999
      }
      udp {
        port => 9998
      }
    }
    filter {
      json {
        source => "message"
      }
      if [app_name] {
        mutate {
          add_field => {
            "index_name" => "%{app_name}"
          }
        }
      } else {
        mutate {
          add_field => {
            "index_name" =>  "non_index_log"
          }
        }
      }
    }
    output {
        elasticsearch {
           hosts => ["http://elasticsearch-master-headless:9200"]
           index => "%{index_name}"
           action => "create"
           ilm_enabled => false
        }
        stdout { codec => rubydebug }
    }      

filebeat配置

因為有一些日志是通過filebeat傳上來的,是以filebeat也要進行少量的配置,傳一個app_name到logstash用于生成index

filebeat.inputs:
  - type: log
    paths:
      - "/log/*.log"
processors:
  - decode_json_fields:
        fields: ["message"]
        process_array: false
        max_depth: 1
        target: ""
        overwrite_keys: false
  - add_fields:
      target: ''
      fields:
        app_name: "{{ .Values.nodeSelector.internet_ip}}-frontend-v2-ux"
output.logstash:
  hosts: ["{{ .Values.logs.logstash.host }}:{{ .Values.logs.logstash.beatport }}"]      

繼續閱讀