syslog-ngがファイルに書き込まない

syslog-ngがファイルに書き込まない

私は初めてsyslog-ngを使用し、外部デバイスからsyslogへの書き込みをテストしたいと思います。外部デバイスは、ポート516のsyslogに「接続」されていることを示します。しかし、私のCentOS7ホストではログファイルには何も記録されません(現在/var/log/messagesにエラーが発生します)。 localhost:516にTelnetを接続して(テストで)いくつかのテキストをダンプしようとしましたが、どこにも何も記録されませんでした。 netstat は、syslog が tcp 516 でリッスンしていることを確認します。

私の設定は次のとおりです。

source s_test {
    system()
    internal()
    syslog(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

私の設定に問題がありますか?

答え1

いくつかのバグがあります。次のいずれかで終了する必要がありますsystem()internal();

source s_test {
    system();
    internal();
    syslog(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

手動で起動すると、新しいエラーと警告が生成されますsyslog-ng(次のメッセージはsystemdCentos 7でのデバッグには役に立ちません)。

# syslog-ng -F -p /var/run/syslogd.pid
WARNING: Configuration file has no version number, assuming syslog-ng 2.1 format. Please add @version: maj.min to the beginning of the file to indicate this explicitly;
...
Error parsing source, source plugin system not found in /etc/syslog-ng/syslog-ng.conf at line 16, column 5:

system();
^^^^^^

syslog-ngデフォルトの設定ファイルに次の文を含めることで、これらの問題を解決できます。

@version:3.5
@include "scl.conf"
source s_test {
    system();
    internal();
    syslog(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

今始めましょうsyslog-ng:

# syslog-ng -F -p /var/run/syslogd.pid
...

しかし、logger(1)他の端末でのテストは失敗します。ログに /var/log/testエラーが報告されますInvalid frame header

# logger --server 127.0.0.1 --tcp --port 516 foo

これはnetwork代わりに次のように変更できますsyslog

@version:3.5
@include "scl.conf"
source s_test {
    system();
    internal();
    network(ip(0.0.0.0) port(516) transport("tcp"));
};
destination d_test { file("/var/log/test"); };
log { source(s_test); destination(d_test); };

syslogそれでもリモートデバイスに必要かどうかはわかりませんnetwork

関連情報