Я пытаюсь выполнить сценарий cmd или powershell (файл ps1) с использованием OpenTelemetry Collector Contrib – конфигурационного файла yaml.
Следующий сценарий PowerShell выводит установленную версию SQL Server на компьютерах с Windows.
Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name LIKE 'Microsoft SQL Server%'" | Where-Object { $_.Name -like "*Setup*" } | Sort-Object InstallDate -Descending | Select-Object -First 1 -Property Name, Version, InstallDate
Как я могу выполнить этот сценарий (файл ps1) с использованием config.yaml?
Я знаю, что есть другой способ с использованием sqlqueryreceiver и запроса “SELECT @@VERSION”, я пробовал, и это работает, но для этого необходимо подключение к SQL (с паролем), и я не хочу записывать учетные данные в конфигурационный файл, поэтому я пытаюсь найти более безопасный и эффективный способ получить установленную версию SQL Server с помощью сценария ps для выполнения с config.yaml.
Ответ
Для выполнения PowerShell скрипта из OpenTelemetry Collector Contrib с использованием файла конфигурации YAML, вам потребуется настроить кастомный exec
receiver, который позволяет запускать команды или скрипты. К сожалению, OpenTelemetry Collector по умолчанию не предоставляет встроенной поддержки для выполнения скриптов PowerShell, однако мы можем обойти это ограничение.
Вот шаги, которые вам нужно выполнить:
-
Создайте PowerShell скрипт: Сохраните ваш PowerShell скрипт (извините, текущий пример включает in-line запрос для SQL Server) в файл, например
Get-SQLServerVersion.ps1
.Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name LIKE 'Microsoft SQL Server%'" | Where-Object { $_.Name -like "*Setup*" } | Sort-Object InstallDate -Descending | Select-Object -First 1 -Property Name, Version, InstallDate
-
Создайте обертку для выполнения скрипта: Вам необходимо создать поддержку для выполнения вашего PowerShell скрипта через
exec
receiver. На практике это может выглядеть так:@echo off PowerShell -ExecutionPolicy Bypass -File "C:\path\to\your\Get-SQLServerVersion.ps1"
Сохраните этот файл как
runSQLVersion.bat
. -
Настройте OpenTelemetry Collector: Создайте/отредактируйте файл конфигурации
config.yaml
с добавлениемexec
receiver для выполнения вашего скрипта. Пример конфигурации:receivers: exec_sql_version: type: exec command: "C:\\path\\to\\your\\runSQLVersion.bat" interval: 60s # Интервал выполнения скрипта (по вашему усмотрению) exporters: otlp: endpoint: "your-otel-collector-endpoint:4317" tls: insecure: true service: pipelines: metrics: receivers: [exec_sql_version] exporters: [otlp]
-
Запуск OpenTelemetry Collector: После настройки конфигурации, запустите OpenTelemetry Collector с помощью вашего файла конфигурации:
otelcol-contrib --config config.yaml
- Проверка результатов: Убедитесь, что ваш скрипт выполняется правильно. Вы можете проверить логи OpenTelemetry Collector для получения данных о работе
exec
receiver и сервере, который запрашивает версии SQL Server.
Этот подход позволяет выполнить ваш PowerShell скрипт без необходимости указывать учетные данные SQL Server в файле конфигурации, сохраняя при этом безопасность.