Добрый день. Нужно настроить fluentd со следующими условиями:
Вычитывались все файлы с расширением .log из каталога /var/log/
Вычитанные логи должны помечаться тегом task07., где * - путь к файлу, вида var.log.file.log
Все вычитанные логи и помеченные тегом task07.* должны перенаправляться в elasticsearch
Логи должны сохраняться в индекс task07.filename-*, где *- это дата в формате ГГГГ-ММ-ДД, а filename - имя файла источника без расширения.
tag сообщений должен быть записан в поле @log_name
Написал следующий конфиг в fluentd:
<source>
@type tail
path /var/log/*.log
read_from_head true
tag task07.*
<parse>
@type none
</parse>
</source>
<filter task07.*>
@type record_transformer
enable_ruby true
<record>
service_name ${tag_parts[3]}
</record>
</filter>
<match task07.*>
@type rewrite_tag_filter
<rule>
key path
pattern /.+/
tag task07.$1
</rule>
</match>
<match *.**>
@type copy
<store>
type elasticsearch
host localhost
port 9200
include_tag_key true
index_name ${tag}-%Y-%m-%d
tag_key @log_name
flush_interval 10s
</store>
</match>
В результате когда выполняю запрос curl http://localhost:9200/task07.*/_search?pretty=true, получаю след. ответ:
{
"took": 29,
"timed_out": false,
"_shards": {
"total": 0,
"successful": 0,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": 0,
"hits": []
}
}
Как понимаю при корректной отработке fluentd, запрос в elasticsearch должен в ответе выдать что-то в этом роде:
{
"_index": "task07.auth-2021-03-10",
"_type": "_doc",
"_id": "bnj7HHgB9Qf_JJn5P4Ah",
"_score": 1,
"_source": {
"message": "Mar 10 16:31:35 b9dd4778dfa96af54d794e8f08ff2396 sshd[15110]: Received disconnect from 1.251.239.18 port 59042:11: Bye Bye [preauth]",
"@log_name": "task07.var.log.auth.log"
}
}
Можете объяснить какие ошибки были допущены в моем конфиге fluentd, что в результате не получается добиться нужного результата.