Windown: Filebeat каким-то образом блокирует запись в журнал сообщений
Я хочу отправлять журнал из Windows 10 машины, файл C:\Users\user\Documents\Adobe\Adobe Media Encoder\15.0\AMEEncodingLog.txt в ElasticSearch (стек ELK). Сообщения в этот файл записываются программой Adobe Media Encoder.
Для этого я установил и настроил Filebeat, проблем с этим нет. Вот конфиг на всякий случай filebeat.yml:
# ============================== Filebeat inputs ===============================
filebeat.inputs:
# filestream is an input for collecting log messages from files.
- type: filestream
# Unique ID among all inputs, an ID is required.
id: media-encoder-log
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- C:\Users\user\Documents\Adobe\Adobe Media Encoder\15.0\AMEEncodingLog.txt
encoding: utf-16le
# Exclude lines. A list of regular expressions to match. It drops the lines that are
# matching any regular expression from the list.
# exclude_lines: ['^--------', '^Файл регистрации создан']
line_terminator: carriage_return_line_feed
# @see https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html
parsers:
- multiline:
type: pattern
pattern: '^$'
negate: true
match: after
max_lines: 50
# ================================= Processors =================================
processors:
- script:
# @see https://www.elastic.co/guide/en/beats/filebeat/current/processor-script.html
lang: javascript
source: >
function process(event) {
var match = event.Get('message').match(/([0-9]{2})\/([0-9]{2})\/([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) ([AP]M) :/);
if(!match) {
return;
}
var hourOffset = match[7] === 'AM' ? 0 : 12;
var date = new Date(match[3], match[1] - 1, match[2] - 0, match[4] - 0 + hourOffset, match[5] - 0, match[6] - 0);
event.Tag("js");
event.Put("@timestamp", date);
}
# ============================== Filebeat modules ==============================
filebeat.config.modules:
enabled: false
# ======================= Elasticsearch template setting =======================
setup.template.settings:
index.number_of_shards: 1
# =================================== Kibana ===================================
setup.kibana:
host: "http://192.168.56.1:5601"
# ================================== Outputs ===================================
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["http://192.168.56.1:9200"]
При запуске .\filebeat.exe -e этот журнал отправляется, я вижу его в Кибане.
Однако по какой-то причине Media Encoder (ME) перестает писать в файл журнала AMEEncodingLog.txt.
Я проверил такие варианты:
- Запускаю ME - журнал пишется.
- Запускаю ME - журнал пишется, запускаю
.\filebeat.exe -e- журнал перестает писаться. Останавливаю filebeat, журнал не пишется. - Запускаю
.\filebeat.exe -e, запускаю ME - журнал не пишется.
Поискал, нашел такое:
Filebeat does not lock files. It opens 128 the file for reading only. And it specifies that the file can be read, written, and deleted by other applications while it has it open.
It sounds like the thing that is trying to access the file is requesting exclusive access which it cannot get. It needs to allow other applications to read the file (FILE_SHARE_READ) when it opens the file.
Получается, ME хочет писать в файл эксклюзивно? Как это можно выяснить? Может через какой-то аналог strace для windows? Можно ли как-то обойти, например сделать hardlink или симлинк? Я windows практически не знаю.