Inicialmente crie o usuário e as permissões no MSSQL utilizando o script abaixo.
USE [master]
CREATE LOGIN monitor WITH PASSWORD = 'M0n1t0r';
GRANT VIEW SERVER STATE TO monitor; --REVOKE VIEW SERVER STATE TO monitor
GRANT VIEW ANY DEFINITION TO monitor; --REVOKE VIEW ANY DEFINITION TO monitor
--Grant read permissions
USE [msdb]
CREATE USER monitor FOR LOGIN monitor;
GRANT SELECT ON OBJECT::msdb.dbo.sysjobhistory TO monitor;
GRANT SELECT ON OBJECT::msdb.dbo.sysjobschedules TO monitor;
GRANT SELECT ON OBJECT::msdb.dbo.sysjobs TO monitor;
-----------
GRANT SELECT ON OBJECT::msdb.dbo.sysjobservers TO monitor;
GRANT SELECT ON OBJECT::msdb.dbo.sysjobactivity TO monitor;
GRANT EXECUTE ON OBJECT::msdb.dbo.agent_datetime TO monitor;
No servidor Zabbix instale as dependências. No caso abaixo estou usando o Zabbix Server em um container.
Descobri duas maneiras de configurar, uma utilizando o ODBC fornecido pela Microsoft e outro utilizando o FreeTDS
ODBC Microsoft
# docker exec -it -u root Zabbix_Server /bin/bash
# apk add curl
### Download the desired package(s)
# curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.9.1.1-1_amd64.apk
# curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.9.1.1-1_amd64.apk
### Install the package(s)
# apk add --allow-untrusted msodbcsql17_17.9.1.1-1_amd64.apk
# apk add --allow-untrusted mssql-tools_17.9.1.1-1_amd64.apk
### Após instalar o pacote odbc confira o conteúdo do arquivo odbcinst.ini
# cat /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1
# vi /etc/odbc.ini
[MSSQLSERVER] <- DSNNAME = {$MSSQL.DSN}
DRIVER=ODBC Driver 17 for SQL Server
SERVER=tcp:<IP_SQLSERVER>,1433
Nota: A versão 18 do ODBC requer alguma configuração diferente da apresentada acima.
ODBC FreeTDS
# docker exec -it -u root Zabbix_Server /bin/bash
# apk add freetds
# vi /etc/odbcinst.ini
[FreeTDS]
Driver=/usr/lib/libtdsodbc.so.0
# vi /etc/odbc.ini
[MSSQLSERVER] <- DSNNAME = {$MSSQL.DSN}
Driver=FreeTDS
Server=<IP_SQLSERVER> <- FQDN\INSTANCE
PORT=1433
TDS_Version=8.0
Testes
###Teste dentro do container
# isql <DSNNAME> <USER> <PASSWORD>
OU
### Fora do container
# docker exec Zabbix_Server odbcinst -q -s -n <- Check DSN
# docker exec Zabbix_Server odbcinst -q -s -n <DSNNAME> <- Show DSN content
# docker exec Zabbix_Server isql <DSNNAME> <USER> <PASSWORD> <- Check connect
Em SQL Server Configuration Manager habilitar "TCP/IP" para todas as instâncias.
No Windows firewall allow permit "File and Print Sharing (Echo Request - ICMPv4-In)"
No Windows firewall configurar:
Porta TCP 135 - Porta utilizada para Instrumentação de Gerenciamento do Windows (controla diversas ferramentas do SQL);
Porta TCP 443 - Porta padrão de comunicação de protocolos de HTTPS;
Porta TCP 1433 - Se aplica a conexões de rotina padrão do Mecanismo de Banco de Dados;
Porta TCP 1434 - Para configurar a comunicação em rede do SQL como Administrador Dedicado;
Porta UDP 1434 - Se aplica para utilizar SQL Server Navegador, utilizado para executar o serviço do SQL Server em rede;
Clique com o botão direito na Instance > Properties > Security.
Enable SQL Server and Windows Autehntication mode.
Clique com o botão direito na Instance > Properties > Connections
Enable Allow remote connections to this server
Na Instancia expanda Security > Logins e clique com o botão direito no login do usuário "sa" e clique em Properties.
Em General ajuste a senha
Em Status > Login clique em "Enable".
Clique com o botão direito na Instancia e Restart, a conexão foi remota habilitada.
Na interface Web do Zabbix acesse o host, adicione o template MSSQL by ODBC e crie as macros
{$MSSQL.DSN} - MSSQLSERVER
{$MSSQL.USER} - monitor
{$MSSQL.PASSWORD} - monitor
{$MSSQL.PORT} - 1433
{$MSSQL.INSTANCE} - MSSQL$instance_name
Para cada instancia devera ser ajustada a variavel {$MSSQL.INSTANCE} ??????
Caso utilize uma porta diferente para comunicação ajuste a variavel {$MSSQL.PORT} - {HOST.CONN} ??