目录
1:Filebeat配置
在9.0+版本中,filebeat.inputs: type不在支持log 类型。
Elastic 官方已经推荐全面改用 filestream
,log
类型在新版 Filebeat 中会报错并终止运行。
filestream
性能更优,可以同时支持多个日志类型同时采集。
配置文件,主要三个配置:
- 1:http开启,采集监控到Metricbeat。
- 2: filebeat.inputs:日志格式采集部分。
- 3: output.logstash: 采集日志到logstash处理。
http:
enabled: true
host: "0.0.0.0"
port: 5066
monitoring.enabled: false
monitoring.cluster_uuid: "GuZRw-10QzueZyaIszr7HQ"
filebeat.inputs:
- type: filestream
id: nginx-dev-logs
enabled: true
paths:
- /app/logs/nginx/dev/*.log
fields:
env: dev
app: nginx
fields_under_root: false
- type: filestream
id: syslog-logs
enabled: true
paths:
- /var/log/syslog
fields:
env: dev
app: syslog
fields_under_root: false
output.logstash:
hosts: ["198.19.249.234:5044"]
上面配置了http日志采集后,在Metricbeat将 host加上去即可。
Metricbeat监控参考文章:docker-compose 安装启动ELK 9.0,和metricbeat监控
root@ubuntu-elk:/opt/elk# cat metricbeat/modules.d/beat-xpack.yml
# Module: beat
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/main/metricbeat-module-beat.html
- module: beat
xpack.enabled: true
period: 10s
hosts: ["http://metricbeat:5066","http://198.19.249.107:5066"]
username: "remote_monitoring_user"
password: "remote1234"
2: 非ILM生命周期管理
非ILM生命周期管理比较简单,按日期,每天生成一个索引。
优点:简单直观,一个通用模版可以绑定所有的日志类型。
缺点:一个集群,每个节点默认最多 管理 1000 个 shards(分片),包含主分片和副本分片。如果30个日志类型,一个月就是900加上其他的日志,性能会严重下降,甚至索引失败。
如果日志类型不是很多,而且不需要保留太久,可以优先用这种模式。
2.1: Elastic配置
创建生命周期策略
创建一个7天删除的周期策略,不需要rollover
PUT _ilm/policy/delete-after-7-days
{
"policy": {
"phases": {
"delete": {
"min_age": "7d",
"actions": {
"delete": {}
}
}
}
}
}
创建通用模版
PUT _index_template/logs-template
{
"index_patterns": ["dev-*-logs*"],
"template": {
"settings": {
"index.lifecycle.name": "delete-after-7-days"
}
}
}
上面模版,同时支持所有的dev-*-logs*
格式类型。
如:dev-nginx-logs-2025.06.10
, dev-syslog-logs-2025.06.11
….
2.2: Logstash数据流配置
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
user => "elastic"
password => "qwe123"
# 自定义索引名,使用 filebeat 传来的字段
index => "%{[fields][env]}-%{[fields][app]}-logs-%{+YYYY.MM.dd}"
# 关闭 ILM 管理
ilm_enabled => false
}
最后重启logstash,查看索引,每天自动生成一个索引,7天后删除旧索引。

3: ILM生命周期管理
用 ILM 时,你只需要维护一个 alias,Elasticsearch 自动 rollover(翻转索引),控制 分片总量 和 索引数量。
如果有大量类型日志,时间又比较久,推荐又这种。
如果用非ILM管理,有些日志每天就1M左右,但是第二天还是创建新索引,浪费分片数量。
缺点也很明显,前期配置复杂,需要为每个日志类型创建一个模版。
3.1: Elastic配置
自己须提前在 Elasticsearch 中定义与 ilm_rollover_alias
匹配的索引模板(Index Template)和设置别名指向初始索引。
创建 ILM policy(一次性操作):
PUT _ilm/policy/log-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "1d",
"max_docs": 100,
"max_size": "5gb"
}
}
},
"delete": {
"min_age": "7d",
"actions": {
"delete": {}
}
}
}
}
}
由于测试,rollover设置得比较小,以下达到任意条件,创建新索引(-000002
, -000003
…):
“max_age”: “1d”, 索引年龄超过 1 天。
“max_docs”: 100 分片文档数超过100。
“max_size”: “5gb” 索引主分片大小超过 5GB。(已弃用,系统仍支持它,可能在未来版本中不再推荐)
“min_age”: “7d”, 删除超过7天的索引。
创建对应的template模版:
PUT _index_template/dev-syslog-logs-template
{
"index_patterns": ["dev-syslog-logs-*"],
"template": {
"settings": {
"index.lifecycle.name": "log-policy",
"index.lifecycle.rollover_alias": "dev-syslog-logs",
"number_of_shards": 1
}
},
"priority": 100
}
ILM必须设置别名index.lifecycle.rollover_alias,只能固定值,不支持动态传参。
一个别名只能绑定一个类型的日志,所以意味着1个日志类型需要创建1个模版。
“number_of_shards”: 1 , 主分片数,默认是 5
,但很多日志场景(如 ELK)改为 1
,避免小索引过度分片。
初始化首个写入索引(只需一次):
PUT dev-syslog-logs-000001
{
"aliases": {
"dev-syslog-logs": {
"is_write_index": true
}
}
}
3.2: Logstash数据流配置
input设置采集端口,外部进来的端口。
root@ubuntu-elk:/opt/elk# cat logstash/pipeline/logstash.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
user => "elastic"
password => "qwe123"
#开启ILM管理
ilm_enabled => true
#别名名称
ilm_rollover_alias => "%{[fields][env]}-%{[fields][app]}-logs"
#自动 rollover 的命名格式,下一轮000002...
ilm_pattern => "000001"
#绑定ILM策略
ilm_policy => "log-policy"
manage_template => false
ssl_enabled => false
}
}
配置后,重启,等待一会,检测索引正常rollover。
