Назад | Перейти на главную страницу

Вывод Rsyslog в GELF

rsyslog - мощный инструмент, но его документация не столь явна. Я не могу понять, как разобрать файл журнала и направить его прямо в Graylog в GELF формат.

Я нашел немного документации о вывод gelf в rsyslog но я не уверен, что делать дальше.

До сих пор он пытался поместить приведенный ниже conf в /etc/rsyslog.d/01-access.conf но это, похоже, не работает ...

template(name="gelf" type="list") {
    constant(value="{\"version\":\"1.1\",")
    constant(value="\"host\":\"")
    property(name="hostname")
    constant(value="\",\"short_message\":\"")
    property(name="msg" format="json")
    constant(value="\",\"timestamp\":\"")
    property(name="timegenerated" dateformat="unixtimestamp")
    constant(value="\",\"level\":\"")
    property(name="syslogseverity")
    constant(value="\"}")
}

input(type="imfile"
      File="/var/log/apache2/access.log"
      Tag="apache-access"
)

if $programname == 'apache-access' then {
    action(
        type="omfwd"
        Target="GRAYLOG-IP"
        Port="12201"
        Protocol="tcp"
        template="gelf"
    )
    stop
}

Вы сталкиваетесь с этой проблемой, потому что отправка через tcp не работает с rsyslog из-за спецификации разделителя сообщений Gelf с нулевым байтом. Из официальной документации rsyslog: (http://www.rsyslog.com/doc/v8-stable/tutorials/gelf_forwarding.html) «Обратите внимание, что приведенный выше случай работает только для транспорта UDP. При использовании TCP Graylog ожидает нулевой байт в качестве разделителя сообщений. В настоящее время это невозможно с rsyslog.» Однако ваш пример должен работать через udp.

Небольшой совет, я определенно рекомендую проверить правила фильтра rsyslog, поскольку обработка сообщений будет продолжена с вашим примером (проверьте символ тильды).

Снято с: https://www.rsyslog.com/doc/master/tutorials/gelf_forwarding.html

При использовании TCP Graylog ожидает Nullbyte в качестве разделителя сообщений. Итак, чтобы использовать TCP, вам нужно изменить разделитель с помощью параметра TCP_FrameDelimiter.

action(type="omfwd" target="graylogserver" port="12201" protocol="tcp" template="gelf" TCP_FrameDelimiter="0" KeepAlive="on")