这是我的问题 我已经配置了 filebit、logstash 来为系统和程序创建单独的索引 但是我遇到了一个问题,索引已创建,日志分离很好,生命策略有效,但我有一个问题,日志写入第一个索引,然后根据生命策略创建新日志,但它们为空,则删除第一个并将日志写入其中
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
fields:
log_type: system
- type: log
paths:
- /var/lib/pgsql/13/data/log/*.log
fields:
log_type: pgsql
- type: log
paths:
- /var/log/postgresql/*.log #Логи містять інформацію про події та стан PostgreSQL-сервера
fields:
log_type: postgresql
# ------------------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["**********:****"]
# ================================= Processors =================================
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
# ============================= Filebeat Logging metrics =======================
logging.metrics.enabled: true
logging.metrics.period: 30s
-------------
File Logstash
-------------
input {
beats {
port => 5044
}
}
filter {
if [fields][log_type] == "system" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
mutate {
add_field => { '[@metadata][index]' => 'system_logs-%{+YYYY.MM.dd}-000001' }
}
} else if [fields][log_type] == "pgsql" {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{WORD:log_level} %{GREEDYDATA:log_message}" }
}
mutate {
add_field => { '[@metadata][index]' => 'pgsql_logs-%{+YYYY.MM.dd}-000001' }
}
} else if [fields][log_type] == "postgresql" {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{WORD:log_level} %{GREEDYDATA:log_message}" }
}
mutate {
add_field => { '[@metadata][index]' => 'postgresql_logs-%{+YYYY.MM.dd}-000001' }
}
mutate {
add_field => { "[@metadata][index]" => "%{[@metadata][index]}-000001" }
}
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["https://***********:9000"]
user => "*********"
password => "***************"
ssl => true
cacert => '/etc*************'
index => "%{[@metadata][index]}"
manage_template => false
ilm_enabled => true
ilm_policy => "%{[@metadata][index]}-ilm"
ilm_pattern => "000001"
}
}
PUT _index_template/pgsql-template
{
"index_patterns": ["pgsql-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "pgsql-ilm",
"index.lifecycle.rollover_alias": "pgsql_logs_alias"
}
}
}
PUT _index_template/system-template
{
"index_patterns": ["system-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "system-ilm",
"index.lifecycle.rollover_alias": "system_logs_alias"
}
}
}
在本文档中,我阅读了 ilm-pattern:
“该模式必须以破折号和一个数字结束,当索引翻转时,该数字将自动递增。”
此外,这部分可能会有所帮助:
滚动索引别名时,您可以为新索引指定名称。如果您未指定名称,并且当前索引以 - 和数字结尾,例如 my-index-000001 或 my-index-3,则新索引名称会增加该数字。例如,如果您滚动当前索引为 my-index-000001 的别名,滚动将创建一个名为 my-index-000002 的新索引。无论之前的索引名称如何,该数字始终为 6 个字符且以零填充。
如果您对时间序列数据使用索引别名,则可以在索引名称中使用日期数学来跟踪滚动日期。例如,您可以创建一个指向名为
我希望它有效。