syslog-ng
MSSQLターゲットにログインすると、で定義されたデータベースは無視され、syslog-ng.conf
代わりにユーザーのプライマリデータベースが使用されます。
destination d_mssql {
sql(type(mssql)
host("myhost") username("myuser") password("mypass")
database("syslogng")
table("msgs_${R_YEAR}${R_MONTH}${R_DAY}")columns(
"seqnum bigint",
"datetime varchar(16)", "host varchar(32)",
"program varchar(32)", "pid varchar(8)", "priority varchar(10)", "facility varchar(10)", "pri int",
"message varchar(max)")
values("$SEQNUM", "$R_DATE", "$HOST", "$PROGRAM", "$PID", "$PRIORITY", "$FACILITY", "$PRI", "$MSGONLY")
indexes("datetime", "host", "program", "pid"));
};
ご覧のとおり、「syslogng」を私のデータベースとして使用したいのですが、syslog-ng
「myuser」にはMS SQL Serverで構成されているデフォルトのデータベース(「master」)が使用されています。
SQL Serverで「myuser」の既定のデータベースを「syslogng」に変更すると、「syslogng」データベースに書き込まれます。しかし、それは私が望むものではありません。にありますようにsyslog-ng.conf
。
なぜこれが起こるのかご存知ですか?
同じ質問BalaBitコミュニティのウェブサイトから。
答え1
この問題を解決するために、sql()ステートメントに次のように設定しました。
database("")
次に、作成/更新するテーブルのフルパスを使用します。
table("syslogng.msgs_${R_YEAR}${R_MONTH}${R_DAY}")")
DBブラウザ(DBeaverなど)を使用してMSSQLデータベースに接続し、テーブルのフルパスを確認します。