Плагин Fluent D record_transformer и Ruby для возможного использования сasticsearch, Kibana - PullRequest
0 голосов
/ 06 сентября 2018

В настоящее время я использую плагин fluentd record_transformer для преобразования сообщений системного журнала. Я хотел знать, как реализовать этот набор команд c ++ в ruby, чтобы найти запятую, получить подстроку до этой позиции и сохранить ее в новом поле (Продолжительность):

std::string str="We think in generalities, but we live in details.";
std::size_t pos = str.find(',');
std::string newstring = str.substr (3,pos);

Я пробовал:

<filter xyz.**>
@type record_transformer
enable_ruby true
<record>
Duration ${record["message"][32..(("message".index(/\,/,32)).to_i)]}
</record>

Но безуспешно. Я признаю, что это довольно простой вопрос, но любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 сентября 2018
<source>
  @type dummy
  dummy {"message": "We think in generalities, but we live in details."}
  tag dummy
  @label @INPUT
</source>

<label @INPUT>
  <filter>
    @type record_transformer
    enable_ruby true
    <record>
      duration ${record["message"].slice(/,([^,]{3})/, 1)}
    </record>
  </filter>
  <match>
    @type stdout
  </match>
</label>

Будет напечатано следующее:

2018-09-12 19:29:08.029546388 +0900 dummy: {"message":"We think in generalities, but we live in details.","duration":" bu"}
2018-09-12 19:29:09.031650493 +0900 dummy: {"message":"We think in generalities, but we live in details.","duration":" bu"}
2018-09-12 19:29:10.033424279 +0900 dummy: {"message":"We think in generalities, but we live in details.","duration":" bu"}

Если вы хотите проанализировать строки формата системного журнала, вы можете использовать https://docs.fluentd.org/v1.0/articles/parser_syslog вместо filter_record_transformer.

...