背景
目前所有的K8S上的容器日志都被收集到了我們的ELK上,随着時間的推移,ELK上的日志所占的存儲空間越來越多,我們需要一個定時清理的政策,以節約硬碟資源。
我們主要配置以下ELK裡的這幾個地方
- 通過kibana新增一個lifecycle policies
- 通過kibana新增一個index template,注意配置DataStreams
- logstash 的logstashPipeline
- filebeat的filebeat.yml檔案
簡要配置 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。
Kibana上添加Index Templates
2.點選DATA目錄下的【Index Management】
3.點選【Index Templates】小标簽,【Create template】建立模闆
4.index patterns比對我們logstash上傳來的index,比如192*
5.Data stream的配置按鈕打開
6.index settings配置上我們上一步添加的Lifecycle Policies
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 }}"]