Моя задумка/наработка: Хочу проработать в тестовом окружении какими действиями нужно обозначить мою систему мониторинга на базе Zabbix 5.0 LTS on Ubuntu 18.04 дабы снимать интересующие меня показания с Windows Server 2016 на которой развернут SQL Database 2016 версии 13.0.5850.14. На случай если Вы не знаете как добиться устанавливаю такой версии, то Вам следует ознакомиться с заметкой "Порядок поднятия SQL (srv-db01) как на работе".

Как всегда для отработки шагов используется тестовый полигон на базе Proxmox 6 on Debian 10

Мне понадобится:

  • srv-zabbix.polygon.lan который развернут по заметке
    • srv-zabbix.polygon.lan <=> 172.33.33.105
  • srv-sql.polygon.lan который развернут по заметке выше.
    • srv-sql.polygon.lan <=> 172.33.33.115

Система Windows не в домене.

Итак поехали, шаги чтобы добиться решения поставленной задачи.

Шаг №1: Сперва нужно на Windows Server 2016 Std SQL Server 2016 проверить, что разрешены удаленные подключения с Вашего сервиса мониторинга Zabbix 5.0.

Либо отключаем брандмауэр

Win + X - Command Prompt (Admin)

C:\Windows\system32> netsh advfirewall set allprofiles state off

либо добавляем правило:

C:\Windows\system32> netsh advfirewall firewall add rule name="Zabbix ODBC" protocol=TCP localport=1433 action=allow dir=IN remoteip=172.33.33.105

нажимаю значок с лупой возле меню пуск и набираю manag, в найденном нахожу Microsoft SQL Server Management Studio и через правый клик мышью на данному приложению для удобства выбираю Pin to Start, теперь могу просто нажать клавишу Пуск (или Win) и быстро перейти в оснастку SQL Management Studio

Запускаем SQL Management Studio

Подключаюсь с

  • Server type: Database Engine
  • Server name: srv-sql
  • Authentication: Windows Authentication

и нажимаю Connect (отработает если на srv-sql вы авторизованы из под той учетной записи которая имеет доступ на SQL)

Затем через правый клик на srv-sql (SQL Server 13.0.5850.14) захожу в Properties (Свойства)

Открываю свойства сервера через SQL Management Studio

перехожу в Select a page: Connections и проверяю, что стоит галочка

  • Allow remote connections to this server: отмечено галочкой

после нажимаю OK.

Шаг №2: Для подключения c системы где установлен Zabbix 5.0 LTS к SQL Server обязательно должна использовать SQL авторизацию, а значит на Вашем SQL Server должна быть включена смешанная аутентификация через оснатку SQL Management Studio.

Проверяю, что у меня используется смешанная аутентификация:

SQL Management Studio — авторизуюсь под Windows аутентификацией — открываю Properties: SRV-SQL (SQL Server 13.0.5850.14) - Select a page: Security и вижу, что у меня только Windows аутентификация:

Сейчас у менять только Windows аутентификация

Чтобы включить аутентификацию и через SQL, нужно:

  • Server authentication: отметить SQL Server and Windows Authentication mode

Для применения изменений перезапустить SQL Server:

SQL Management Studio — авторизуюсь под Windows аутентификацией — через правый клик мышью на SRV-SQL (SQL Server 13.0.5850.14) выбираю меню Restart

Перезапускаю SQL Server

Подтвердить свое намерение путем нажатия Yes на запрос “Are you sure you want to restart the MSSQLSERVER service on SRV-SQL?”

Stopping this service will also stop SQL Server Agent (MSSQLSERVER). Do you with to continue? Yes

После все также через оснастку SQL Management Studio включить учетную запись Login: sa, т. к. сейчас она выключена.

SQL Management Studio — авторизуюсь под Windows аутентификацией — Security - Logins — смотрите скриншот для наглядного понимания

При Windows аутентификации а после включенной SQL учетная запись sa выключена

Щелкаю левой кнопкой мыши по учетной записи sa, задаю ей пароль:

Select a page: General

  • Password: 712mbddr@
  • Confirm password: 712mbddr@

включаю ее

Select a page: Status

Login: изменяю Disabled на Enabled

и нажимаю OK окна “Login Properties - sa” и нажимаю клавишу F5 дабы теперь в списке всех учетных записей Logins учетная запись с логином sa стала активной, т. е. Без пометки красным крестиком, что она выключена.

Шаг №3: Проверяю, что могу выполнить авторизацию под SQL учетной записью sa:

Авторизуюсь с применением SQL аутентификации

и нажимаю Connect — и успешно:

Авторизация с применением SQL аутентификации выполнена успешно

а если через консоль командной строки утилиты sqlcmd:

Win + Command Prompt (Admin)

C:\Windows\system32>sqlcmd -S srv-sql -H 172.33.33.115 -U sa -P 712mbddr@

1> — это приглашение свидетельствует об успешном подключении.

1> quit

C:\Windows\system32>

Шаг №4: Т.к. мой Zabbix сервис будет подключаться к SQL без установки Zabbix Agent мне нужно установить ODBC-драйвер (Open Database Connectivity):

ekzorchik@srv-zabbix:~$ sudo apt-get install -y curl

ekzorchik@srv-zabbix:~$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

ekzorchik@srv-zabbix:~$ sudo bash -c "curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list"

ekzorchik@srv-zabbix:~$ sudo apt-get update

ekzorchik@srv-zabbix:~$ sudo apt-get install -y msodbcsql17 mssql-tools

Do you accept the license terms? Yes

ekzorchik@srv-zabbix:~$ dpkg -l | grep odbc

ii libodbc1:amd64 2.3.7 amd64 ODBC library for Unix

ii msodbcsql17 17.6.1.1-1 amd64 ODBC Driver for Microsoft(R) SQL Server(R)

ii odbcinst 2.3.7 amd64 Helper program for accessing odbc ini files

ii odbcinst1debian2:amd64 2.3.7 amd64 Support library for accessing odbc ini files

ii unixodbc 2.3.7 amd64 Basic ODBC tools

Проверяю конфигурацию:

ekzorchik@srv-zabbix:~$ sudo odbcinst -j

unixODBC 2.3.7

DRIVERS............: /etc/odbcinst.ini

SYSTEM DATA SOURCES: /etc/odbc.ini

FILE DATA SOURCES..: /etc/ODBCDataSources

USER DATA SOURCES..: /root/.odbc.ini

SQLULEN Size.......: 8

SQLLEN Size........: 8

SQLSETPOSIROW Size.: 8

ekzorchik@srv-zabbix:~$

Проверю, а что содержится в файле odbcinst.ini:

ekzorchik@srv-zabbix:~$ 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.6.so.1.1

UsageCount=1

В данном выводе важно, что зарегистрировался драйвер libmsodbcsql-17.6.so.1.

Но может это не произойти, тогда вручную даем команду:

ekzorchik@srv-zabbix:~$ odbcinst -i -d -f /etc/odbcinst.ini

odbcinst: SQLInstallDriverEx failed with Invalid install path.

ekzorchik@srv-zabbix:~$ sudo odbcinst -i -d -f /etc/odbcinst.ini

odbcinst: Driver installed. Usage count increased to 2.

Target directory is /etc

ekzorchik@srv-zabbix:~$

После проверяю регистрацию:

ekzorchik@srv-zabbix:~$ odbcinst -q -d -n "ODBC Driver 17 for SQL Server"

[ODBC Driver 17 for SQL Server]

Description=Microsoft ODBC Driver 17 for SQL Server

Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.6.so.1.1

UsageCount=2

ekzorchik@srv-zabbix:~$

Шаг №5: Переходим к настройки подключения Zabbix 5.0 к srv-sql (SQL-SQL (SQL Server 13.0.5850.14)):

ekzorchik@srv-zabbix:~$ sudo nano /etc/odbc.ini

[srv-sql]

Description = srv-sql master

Driver = ODBC Driver 17 for SQL Server

Server = tcp:172.33.33.115,1433

User = sa

Password = 712mbddr@

Database = master

Зарегистрируем источник данных:

ekzorchik@srv-zabbix:~$ odbcinst -i -s -f /etc/odbc.ini

Проверим регистрацию:

ekzorchik@srv-zabbix:~$ odbcinst -q -s -n srv-sql

[srv-sql]

Description=srv-sql master

Driver=ODBC Driver 17 for SQL Server

Server=tcp:172.33.33.115,1433

User=sa

Password=712mbddr@

Database=master

ekzorchik@srv-zabbix:~$

Проверим все ли получилось. Для начала подключимся к удаленной СУБД:

ekzorchik@srv-zabbix:~$ isql -v srv-sql sa 712mbddr@

+---------------------------------------+

| Connected! |

| |

| sql-statement |

| help [tablename] |

| quit |

| |

+---------------------------------------+

SQL> quit

ekzorchik@srv-zabbix:~

На заметку: Подключение через ODBC-драйвер работает только через SQL учетную запись, если Вы попробуете указывать Windows учетную запись даже у нее есть все права, то будете получаться ошибку вида:

ekzorchik@srv-zabbix:~$ isql -v srv-sql ekzorchik 712mbddr@

[28000][unixODBC][Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'ekzorchik'.

[ISQL]ERROR: Could not SQLConnect

ekzorchik@srv-zabbix:~$

Шаг №6: Раз подключение проходит, то можно проверить выполнив подключение и запросив какую-либо информацию, к примеру количество баз на SQL Server (по умолчанию если он только развернут, то баз всего 4 — это системные базы: master, model, msdb,tempdb)

ekzorchik@srv-zabbix:~$ isql -v srv-sql sa 712mbddr@

+---------------------------------------+

| Connected! |

| |

| sql-statement |

| help [tablename] |

| quit |

| |

+---------------------------------------+

SQL> select count(*) from [sys].[databases];

+------------+

| |

+------------+

| 4 |

+------------+

SQLRowCount returns 0

1 rows fetched

SQL> quit

ekzorchik@srv-zabbix:~

запрос вернул число 4 что соответствует количеству баз на sql server.

Шаг №7: Теперь нужно поставить хост srv-sql на мониторинг и создать элемент данных на проверку количества баз:

http://IP&DNS/zabbix - user&pass - Configuration - Hosts — перехожу в хост srv-sql, затем Items - Create Item

  • Name: ODBC Check Count Database
  • Type: Database monitor
  • Key: db.odbc.select[ODBC_Check_Count_Database,srv-sql]
  • User name: sa
  • Password: 712mbddr@
  • SQL query: select count(*) from [sys].[databases]
  • Type of information: Numeric (unsigned)
  • Update interval: 1m
  • Enabled: отмечаю галочкой

и нажимаю Add

Создаю элемент данных опроса через ODBC

и нажимаю Apply

На заметку: в ключе key Description не должно быть пробелов, поэтом заменяю их на символ нижнего подчеркивания.

Проверю, что после выполнения данного элемента данных по отношению к хосту выводит:

http://IP&DNS/zabbix - user&pass - Monitoring - Latest data - Hosts - Select -

  • Host group: GROUP_SQL

отмечаю srv-sql и нажимаю Select, Apply

Результат опроса SQL через ODBC

Итого я для себя составил пошаговые действия как посредством ODBC драйвера подключаться к SQL Server и снимать различные показатели требующие моего уведомления (я использую Email & Telegram).

На этом заметка завершена дабы не усложнять написанное. Продолжение следует. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.