我正在使用 SQL Server 的 Telegraf 输入插件(https://github.com/influxdata/telegraf/tree/master/plugins/inputs/sqlserver)来收集指标并向 InfluxDB 报告。它适用于 SQL Server,但尽管它支持 Azure SQL 数据库,但文档有点稀疏。
数据库用户应该这样创建:
CREATE LOGIN [telegraf] WITH PASSWORD = N'password';
GRANT VIEW SERVER STATE TO [telegraf];
GRANT VIEW ANY DEFINITION TO [telegraf];
这适用于 SQL Server,但在 Azure 中失败:
此版本的 SQL Server 不支持安全类“服务器”。
我想知道我需要授予什么才能以最好的方式解决这个问题。我们有大量数据库在弹性池中的同一台服务器上运行,所以如果可能的话,我想使用一个用户登录到主服务器并一次收集所有数据库的指标(它的工作方式与 SQL Server)。如果这是不可能的,我可以配置多个登录并一次处理一个数据库。
也许我可以VIEW DEFINITION
在数据库级别授予,但VIEW SERVER STATE
似乎根本不支持。
那么,我应该如何使用 SQL Server 插件为 Telegraf 配置 SQL 数据库登录以使其工作?
编辑:
- 以超级用户身份运行服务器可以正常工作,但只会为 master 和 tempdb 生成指标。我需要许多应用程序数据库的指标,但它们丢失了。加上以超级用户身份运行并不理想。
- 以服务器的超级用户身份运行但连接到特定应用程序数据库(在连接字符串中添加数据库)崩溃并导致 nil 指针取消引用,并且日志抱怨数据库主服务器中的 VIEW DATABASE STATE 权限被拒绝(超级用户有权访问,但显然不是在连接到特定数据库时)。
- 将 VIEW DATABASE 和 VIEW DEFINITION 授予应用程序数据库中的 telegraf 并直接连接到该数据库,因为 telegraf 因 nil 指针取消引用而崩溃,并且日志显示连接已关闭。
编辑2:
创建错误报告https://github.com/influxdata/telegraf/issues/4222。
编辑 3:
从最新版本开始,如果使用服务器管理员帐户,该插件可以工作,因此问题已得到解决。在 Azure DB 中仍然无法使用特权较低的帐户运行。