syslog-ng は MSSQL データベース名を無視します。

syslog-ng は MSSQL データベース名を無視します。

syslog-ngMSSQLターゲットにログインすると、で定義されたデータベースは無視され、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データベースに接続し、テーブルのフルパスを確認します。

関連情報