다음을 통해 공유


SQL 인사이트 문제 해결(프리뷰)

적용 대상: Azure SQL Database Azure SQL Managed Instance

중요

SQL 인사이트(프리뷰)는 2024년 12월 31일에 사용이 중지됩니다. 이 날짜까지 Azure SQL용 데이터베이스 Watcher(프리뷰) 또는 다른 데이터베이스 모니터링 솔루션으로 전환하는 것이 좋습니다.

데이터베이스 Watcher를 낮은 데이터 수집 대기 시간, 자산 수준 모니터링, 쿼리 수준 세부 정보를 포함한 포괄적인 모니터링 데이터, 수집된 모니터링 데이터에 대한 고급 분석 지원을 제공하는 관리형 모니터링 솔루션으로 사용하는 것이 좋습니다. 현재 데이터베이스 Watcher는 Azure SQL Database 및 Azure SQL Managed Instance를 지원합니다.

2024년 12월 31일 이후에는 SQL 인사이트(프리뷰)가 지원되지 않으며 Azure Portal에서 이용할 수 없게 됩니다. SQL 인사이트(프리뷰)가 수집한 기존 모니터링 데이터는 모두 Log Analytics 작업 영역에 보관됩니다.

SQL 인사이트(프리뷰)의 데이터 수집 문제를 해결하려면 프로필 관리 탭에서 모니터링 컴퓨터의 상태를 확인합니다. 상태는 다음 중 하나입니다.

  • 수집
  • 수집 중 아님
  • 수집 오류 발생

상태를 선택하여 문제를 해결하는 데 도움이 될 수 있는 로그 및 자세한 정보를 확인합니다.

모니터링 머신 상태를 보여 주는 스크린샷

상태: 수집 중 아님

최근 10분 동안 SQL의 InsightsMetrics에 데이터가 없으면 모니터링 컴퓨터의 상태는 수집 중 아님입니다.

지원되는 SQL 버전에서 데이터를 수집하려 하는지 확인합니다. 예를 들어 유효한 프로필 및 연결 문자열을 사용하여 데이터를 수집하려고 하지만 지원되지 않는 Azure SQL Database 버전에서 데이터를 수집하려고 하면 수집하지 않음 상태가 됩니다.

SQL 인사이트(프리뷰)는 다음 쿼리를 사용하여 이 정보를 쿼리합니다.

InsightsMetrics
    | extend Tags = todynamic(Tags) 
    | extend SqlInstance = tostring(Tags.sql_instance) 
    | where TimeGenerated > ago(10m) and isnotempty(SqlInstance) and Namespace == 'sqlserver_server_properties' and Name == 'uptime' 

문제의 근본 원인을 식별하는 데 도움이 되는 Telegraf 로그가 있는지 확인합니다. 로그 항목이 있는 경우 수집 중 아님을 선택하고 일반적인 문제에 대한 로그 및 문제 해결 정보를 확인할 수 있습니다.

로그 항목이 없는 경우 모니터링 가상 머신의 로그에서 두 개의 가상 머신 확장으로 설치된 다음 서비스를 확인합니다.

  • Microsoft.Azure.Monitor.AzureMonitorLinuxAgent
    • 서비스: mdsd
  • Microsoft.Azure.Monitor.Workloads.Workload.WLILinuxExtension
    • 서비스: wli
    • 서비스: telegraf
    • 서비스: fluent-bit
    • 설치 실패를 확인하는 확장 로그: /var/log/azure/Microsoft.Azure.Monitor.Workloads.Workload.WLILinuxExtension/wlilogs.log

wli 서비스 로그

서비스 로그: /var/log/wli.log

최근 로그를 보려면 tail -n 100 -f /var/log/wli.log를 실행합니다.

다음 오류 로그가 표시되면 mdsd서비스2021-01-27T06:09:28Z [Error] Failed to get config data. Error message: dial unix /var/run/mdsd/default_fluent.socket: connect: no such file or directory 에 문제가 있습니다.

Telegraf 서비스 로그

서비스 로그: /var/log/telegraf/telegraf.log

최근 로그를 보려면 tail -n 100 -f /var/log/ms-telegraf/telegraf.log를 실행합니다.

최근 로그와 경고 로그를 보려면 tail -n 1000 /var/log/ms-telegraf/telegraf.log | grep "E\!\|W!"를 실행합니다.

Telegraf에서 사용하는 구성은 wli 서비스에서 생성되고 /etc/ms-telegraf/telegraf.d/wli에 배치됩니다.

잘못된 구성이 생성되면 ms-telegraf 서비스가 시작되지 않을 수 있습니다. 다음 명령을 사용하여 ms-telegraf 서비스가 실행 중인지 확인합니다. service ms-telegraf status

telegraf 서비스에서 오류 메시지를 보려면 다음 명령을 사용하여 수동으로 실행합니다.

/usr/bin/ms-telegraf --config /etc/ms-telegraf/telegraf.conf --config-directory /etc/ms-telegraf/telegraf.d/wli --test 

mdsd 서비스 로그

Azure Monitor 에이전트의 필수 조건을 확인합니다.

Azure 모니터링 에이전트 v1.12 이전에는 mdsd 서비스 로그가 다음 위치에 있었습니다.

  • /var/log/mdsd.err
  • /var/log/mdsd.warn
  • /var/log/mdsd.info

v1.12부터 서비스 로그는 다음 위치에 있습니다.

  • /var/opt/microsoft/azuremonitoragent/log/
  • /etc/opt/microsoft/azuremonitoragent/

최근 오류를 보려면 tail -n 100 -f /var/log/mdsd.err을 실행하십시오.

지원을 문의해야 할 경우 다음 정보를 수집하십시오.

  • /var/log/azure/Microsoft.Azure.Monitor.AzureMonitorLinuxAgent/의 로그
  • /var/log/waagent.log의 로그
  • /var/log/mdsd*에 로그인하거나 /var/opt/microsoft/azuremonitoragent/log//etc/opt/microsoft/azuremonitoragent/에 로그인합니다.
  • /etc/mdsd.d/의 파일
  • File /etc/default/mdsd

잘못된 모니터링 가상 머신 구성

수집 중 아님 상태의 한 가지 원인은 모니터링 가상 머신에 대한 잘못된 구성입니다. 구성의 가장 간단한 형식은 다음과 같습니다.

{
    "version": 1,
    "secrets": {
        "telegrafPassword": {
            "keyvault": "https://mykeyvault.vault.azure.net/",
            "name": "sqlPassword"
        }
    },
    "parameters": {
        "sqlAzureConnections": [
            "Server=mysqlserver.database.windows.net;Port=1433;Database=mydatabase;User Id=telegraf;Password=$telegrafPassword;"
        ],
        "sqlVmConnections": [
        ],
        "sqlManagedInstanceConnections": [
        ]
    }
}

이 구성은 모니터링 가상 머신의 프로필 구성에 사용할 대체 토큰을 지정합니다. 또한 이렇게 하면 Azure Key Vault의 비밀을 참조할 수 있으므로 모든 구성에서 비밀 값을 유지하지 않는 것이 좋습니다.

이 구성에서 데이터베이스 연결 문자열에는 $telegrafPassword 대체 토큰이 포함됩니다. SQL 인사이트는 Key Vault에서 검색된 SQL 인증 암호로 이 토큰을 바꿉니다. Key Vault URI는 secrets 아래의 telegrafPassword 구성 섹션에 지정되어 있습니다.

비밀

비밀은 토큰으로, Azure 키 자격 증명 모음에서 런타임에 그 값이 검색됩니다. 비밀은 키 자격 증명 모음 URI 및 비밀 이름을 포함하는 값 쌍으로 정의됩니다. 이 정의를 사용하면 SQL 인사이트가 런타임에 비밀 값을 가져와 다운스트림 구성에서 사용할 수 있습니다.

여러 키 자격 증명 모음에 저장된 비밀을 포함하여 필요에 따라 다수의 비밀을 정의할 수 있습니다.

   "secrets": {
        "<secret-token-name-1>": {
            "keyvault": "<key-vault-uri>",
            "name": "<key-vault-secret-name>"
        },
        "<secret-token-name-2>": {
            "keyvault": "<key-vault-uri-2>",
            "name": "<key-vault-secret-name-2>"
        }
    }

키 자격 증명 모음에 액세스할 수 있는 권한은 모니터링 가상 머신의 관리 ID에 제공됩니다. 이 관리 ID에는 모니터링 프로필 구성에서 참조되는 모든 Key Vault 비밀에 대한 Get 권한을 부여해야 합니다. 이 작업은 Azure Portal, PowerShell, Azure CLI 또는 Azure Resource Manager 템플릿에서 수행할 수 있습니다.

매개 변수

매개 변수는 JSON 템플릿을 통해 프로필 구성에서 참조할 수 있는 토큰입니다. 매개 변수에는 이름과 값이 있습니다. 값은 개체 및 배열을 포함하는 모든 JSON 형식일 수 있습니다. 매개 변수는 .Parameters.<name> 규칙을 사용하여 이름에 따라 프로필 구성에서 참조됩니다.

매개 변수는 동일한 규칙을 사용하여 Key Vault의 비밀을 참조할 수 있습니다. 예를 들어 sqlAzureConnections$telegrafPassword 규칙을 사용하여 비밀 telegrafPassword를 참조합니다.

런타임에서는 모든 매개 변수 및 비밀이 확인되고 프로필 구성과 병합되어 컴퓨터에서 사용할 실제 구성을 생성합니다.

참고 사항

sqlAzureConnections, sqlVmConnections, sqlManagedInstanceConnections의 매개 변수 이름은 일부 이름의 연결 문자열을 제공하지 않더라도 모두 구성에 필요합니다.

상태: 수집 중 오류 발생

하나 이상의 최신 InsightsMetrics 로그가 있지만 Operation 테이블에 오류도 있는 경우 모니터링 컴퓨터는 수집 중 오류 발생 상태가 됩니다.

SQL 인사이트는 다음 쿼리를 사용하여 이 정보를 검색합니다.

InsightsMetrics 
    | extend Tags = todynamic(Tags) 
    | extend SqlInstance = tostring(Tags.sql_instance) 
    | where TimeGenerated > ago(240m) and isnotempty(SqlInstance) and Namespace == 'sqlserver_server_properties' and Name == 'uptime' 
WorkloadDiagnosticLogs
| summarize Errors = countif(Status == 'Error')

참고 사항

WorkloadDiagnosticLogs에 데이터가 표시되지 않는 경우에는 모니터링 프로필을 업데이트해야 할 수 있습니다. Azure Portal의 SQL 인사이트 내에서 관리> 편집>모니터링 프로필 업데이트를 선택합니다.

일반적인 경우에는 로그 보기에서 문제 해결 팁을 제공합니다.

Azure Portal의 SQL 로그 문제 해결을 위한 Azure Monitor 페이지의 스크린샷

알려진 문제

SQL 인사이트를 프리뷰 하는 동안 다음과 같은 알려진 문제가 발생할 수 있습니다.

  • 서버 또는 데이터베이스에 연결하는 동안 ‘로그인 실패’ 오류가 발생합니다.

    모니터링 VM 구성 또는 Key Vault에 저장된 SQL 인증 암호에서 특정 특수 문자를 사용하면 모니터링 VM이 SQL 서버 또는 데이터베이스에 연결되지 않을 수 있습니다. 이 문자 세트에는 괄호, 대괄호 및 중괄호, 달러 기호, 슬래시 및 백슬래시, 점([ { ( ) } ] $ \ / .)이 포함됩니다.

  • 데이터베이스 연결 문자열 특성의 공백은 특수 문자로 대체되어 데이터베이스 연결 실패로 이어질 수 있습니다. 예를 들어, User Id 특성의 공백이 특수 문자로 바뀌면 연결이 실패하고 사용자 ''에 대한 로그인 실패 오류가 발생합니다. 이 문제를 해결하려면 모니터링 프로필 구성을 편집하고 공백 자리에 나타나는 모든 특수 문자를 삭제합니다. 일부 특수 문자는 공백과 구별하기 어려워 보일 수 있으므로 모든 공백 문자를 삭제하고 다시 입력한 다음 구성을 저장하는 것이 좋습니다.

  • 모니터링 VM의 OS 컴퓨터 이름이 모니터링 VM 이름과 다르면 데이터 수집 및 시각화가 작동하지 않을 수 있습니다.

  • WLI 확장이 최신 상태인 경우에도 “이 컴퓨터의 WLI 확장이 권장 버전 [...]보다 낮습니다.”라는 메시지가 잘못 표시될 수 있습니다.

  • SQL Server가 설치된 VM의 OS 컴퓨터 이름이 SQL Server 메타데이터의 서버 이름과 일치하지 않는 경우 데이터 수집 및 시각화가 작동하지 않을 수 있습니다. 자세한 내용은 SQL Server의 독립 실행형 인스턴스를 호스팅하는 컴퓨터 이름 바꾸기를 참조하세요.

모범 사례

  • 모니터링 VM에서 Key Vault에 액세스해야 합니다. Key Vault를 사용하여 SQL 인증 암호를 저장하는 경우(적극 권장) 네트워크 및 보안 구성을 통해 모니터링 VM이 Key Vault에 액세스할 수 있어야 합니다. 자세한 내용은 방화벽 뒤에 있는 Azure Key Vault 액세스Azure Key Vault 네트워킹 설정 구성을 참조하세요. 모니터링 VM이 Key Vault에 액세스할 수 있는지 확인하려면 VM에 연결된 SSH 세션에서 다음 명령을 실행할 수 있습니다. 액세스 토큰 및 비밀을 성공적으로 검색할 수 있어야 합니다. [YOUR-KEY-VAULT-URL][YOUR-KEY-VAULT-SECRET][YOUR-KEY-VAULT-ACCESS-TOKEN]을 실제 값으로 바꿉니다.

    # Get an access token for accessing Key Vault secrets
    curl 'http://[YOUR-KEY-VAULT-URL]/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
    
    # Get Key Vault secret
    curl 'https://[YOUR-KEY-VAULT-URL]/secrets/[YOUR-KEY-VAULT-SECRET]?api-version=2016-10-01' -H "Authorization: Bearer [YOUR-KEY-VAULT-ACCESS-TOKEN]"
    
  • 모니터링 VM에서 소프트웨어를 업데이트합니다. 모니터링 VM에서 운영 체제 및 확장을 주기적으로 업데이트하는 것이 좋습니다. 확장에서 자동 업그레이드를 지원하는 경우 해당 옵션을 사용하도록 설정합니다.

  • 이전 구성을 저장합니다. 모니터링 프로필 또는 모니터링 VM 구성을 변경하려면 먼저 구성 데이터의 작업 복사본을 저장하는 것이 좋습니다. Azure Portal의 SQL 인사이트 페이지에서 프로필 관리>프로필 편집을 선택하고, 현재 모니터링 프로필 구성에서 파일로 텍스트를 복사합니다. 마찬가지로 모니터링 VM에 대해 프로필 관리>구성을 선택하고 현재 모니터링 구성의 텍스트를 파일로 복사합니다. 구성 변경 후 데이터 컬렉션 오류가 발생하는 경우 텍스트 Diff 도구를 사용하여 새 구성을 알려진 작업 구성과 비교하여 컬렉션에 영향을 줄 수 있는 변경 내용을 찾을 수 있습니다.