Запуск скрипта cmd или PowerShell с OpenTelemetry Collector Contrib – конфигурация yaml для получения версии SQL Server

Вопросы и ответы

Я пытаюсь выполнить сценарий 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

Вывод сценария PowerShell

Как я могу выполнить этот сценарий (файл ps1) с использованием config.yaml?

Я знаю, что есть другой способ с использованием sqlqueryreceiver и запроса “SELECT @@VERSION”, я пробовал, и это работает, но для этого необходимо подключение к SQL (с паролем), и я не хочу записывать учетные данные в конфигурационный файл, поэтому я пытаюсь найти более безопасный и эффективный способ получить установленную версию SQL Server с помощью сценария ps для выполнения с config.yaml.

Ответ

Для выполнения PowerShell скрипта из OpenTelemetry Collector Contrib с использованием файла конфигурации YAML, вам потребуется настроить кастомный exec receiver, который позволяет запускать команды или скрипты. К сожалению, OpenTelemetry Collector по умолчанию не предоставляет встроенной поддержки для выполнения скриптов PowerShell, однако мы можем обойти это ограничение.

Вот шаги, которые вам нужно выполнить:

  1. Создайте 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
  2. Создайте обертку для выполнения скрипта: Вам необходимо создать поддержку для выполнения вашего PowerShell скрипта через exec receiver. На практике это может выглядеть так:

    @echo off
    PowerShell -ExecutionPolicy Bypass -File "C:\path\to\your\Get-SQLServerVersion.ps1"

    Сохраните этот файл как runSQLVersion.bat.

  3. Настройте 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]
  4. Запуск OpenTelemetry Collector: После настройки конфигурации, запустите OpenTelemetry Collector с помощью вашего файла конфигурации:

    otelcol-contrib --config config.yaml
  5. Проверка результатов: Убедитесь, что ваш скрипт выполняется правильно. Вы можете проверить логи OpenTelemetry Collector для получения данных о работе exec receiver и сервере, который запрашивает версии SQL Server.

Этот подход позволяет выполнить ваш PowerShell скрипт без необходимости указывать учетные данные SQL Server в файле конфигурации, сохраняя при этом безопасность.

Оцените материал
Добавить комментарий

Капча загружается...