다음을 통해 공유


Python 애플리케이션에서 기능 플래그에 대한 원격 분석 활성화

이 자습서에서는 Python 애플리케이션에서 원격 분석을 사용하여 기능 플래그 평가 및 사용자 지정 이벤트를 추적합니다. 원격 분석을 사용하면 기능 관리 전략에 대해 정보에 입각한 결정을 내릴 수 있습니다. 기능 플래그에 대한 원격 분석 사용 설정 개요에서 만들어진 원격 분석을 사용하는 기능 플래그를 활용합니다. 계속하기 전에 원격 분석이 활성화된 구성 저장소에서 Greeting이라는 기능 플래그를 만들어야 합니다. 이 자습서는 Python 애플리케이션에서 변형 기능 플래그를 사용하기 위한 자습서를 기반으로 합니다.

필수 조건

Python 애플리케이션에 원격 분석 추가

  1. pip를 사용하여 필요한 패키지를 설치합니다.

    pip install azure-appconfiguration-provider
    pip install featuremanagement["AzureMonitor"]
    pip install azure-monitor-opentelemetry
    
  2. app.py를 열고 Application Insights에 연결하여 원격 분석을 게시하도록 코드를 구성합니다.

    import os
    from azure.monitor.opentelemetry import configure_azure_monitor
    
    # Configure Azure Monitor
    configure_azure_monitor(connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING"))
    
  3. app.py 추가로 App Configuration에서 기능 플래그를 로드하여 기능 관리에 통합합니다. FeatureManagerpublish_telemetry 콜백 함수를 사용하여 Azure Monitor에 원격 분석을 게시합니다.

    from featuremanagement.azuremonitor import publish_telemetry
    
    feature_manager = FeatureManager(config, on_feature_evaluated=publish_telemetry)
    
  4. 코드를 열고 routes.py 업데이트하여 애플리케이션에서 사용자 고유의 이벤트를 추적합니다. track_event 호출되면 사용자 지정 이벤트가 제공된 사용자와 함께 Azure Monitor에 게시됩니다.

    from featuremanagement import track_event
    
    @bp.route("/heart", methods=["POST"])
    def heart():
        if current_user.is_authenticated:
            user = current_user.username
    
            # Track the appropriate event based on the action
            track_event("Liked", user)
        return jsonify({"status": "success"})
    
  5. 코드를 열고 index.html 업데이트하여 좋아요 단추를 구현합니다. 좋아요 단추는 클릭할 때 엔드포인트에 /heart POST 요청을 보냅니다.

    <script>
        function heartClicked(button) {
            var icon = button.querySelector('i');
    
            // Toggle the heart icon appearance
            icon.classList.toggle('far');
            icon.classList.toggle('fas');
    
            // Only send a request to the dedicated heart endpoint when it's a like action
            if (icon.classList.contains('fas')) {
                fetch('/heart', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    }
                });
            }
        }
    </script>
    

앱 빌드 및 실행

  1. Application Insights 리소스에 연결하려면 연결 문자열이 필요합니다. 환경 변수를 APPLICATIONINSIGHTS_CONNECTION_STRING Application Insights 리소스의 연결 문자열로 설정합니다.

    setx APPLICATIONINSIGHTS_CONNECTION_STRING "applicationinsights-connection-string"
    

    PowerShell을 사용하는 경우 다음 명령을 실행합니다.

    $Env:APPLICATIONINSIGHTS_CONNECTION_STRING = "applicationinsights-connection-string"
    

    macOS 또는 Linux를 사용하는 경우 다음 명령을 실행합니다.

    export APPLICATIONINSIGHTS_CONNECTION_STRING='applicationinsights-connection-string'
    
  2. 애플리케이션을 실행하고 변형 기능 플래그 사용의 2단계를 참조하세요.

  3. 10명의 다른 사용자를 만들고 애플리케이션에 로그인합니다. 각 사용자로 로그인하면 일부 사용자에 대해 다른 메시지 변형이 표시됩니다. 약 50%의 경우는 메시지를 가져오지 못합니다. 25%의 경우 "안녕하세요!"라는 메시지를 가져오고, 25%의 경우 "하루를 즐겁게 해 주길 바랍니다."라는 메시지를 가져옵니다.

  4. 일부 사용자는 좋아요 단추를 선택하여 원격 분석 이벤트를 트리거합니다.

  5. Azure Portal에서 Application Insights 리소스를 열고 모니터링에서 로그를 선택합니다. 쿼리 창에서 다음 쿼리를 실행하여 원격 분석 이벤트를 확인합니다.

    // Step 1: Get distinct users and their Variant from FeatureEvaluation
    let evaluated_users =
        customEvents
        | where name == "FeatureEvaluation"
        | extend TargetingId = tostring(customDimensions.TargetingId),
                Variant = tostring(customDimensions.Variant)
        | summarize Variant = any(Variant) by TargetingId;
    
    // Step 2: Get distinct users who emitted a "Like"
    let liked_users =
        customEvents
        | where name == "Liked"
        | extend TargetingId = tostring(customDimensions.TargetingId)
        | summarize by TargetingId;
    
    // Step 3: Join them to get only the evaluated users who also liked
    let hearted_users =
        evaluated_users
        | join kind=inner (liked_users) on TargetingId
        | summarize HeartedUsers = dcount(TargetingId) by Variant;
    
    // Step 4: Total evaluated users per variant
    let total_users =
        evaluated_users
        | summarize TotalUsers = dcount(TargetingId) by Variant;
    
    // Step 5: Combine results
    let combined_data =
        total_users
        | join kind=leftouter (hearted_users) on Variant
        | extend HeartedUsers = coalesce(HeartedUsers, 0)
        | extend PercentageHearted = strcat(round(HeartedUsers * 100.0 / TotalUsers, 1), "%")
        | project Variant, TotalUsers, HeartedUsers, PercentageHearted;
    
    // Step 6: Add total row
    let total_sum =
        combined_data
        | summarize
            TotalUsers = sum(TotalUsers),
            HeartedUsers = sum(HeartedUsers)
        | extend
            Variant = "All",
            PercentageHearted = strcat(round(HeartedUsers * 100.0 / TotalUsers, 1), "%")
        | project Variant, TotalUsers, HeartedUsers, PercentageHearted;
    
    // Step 7: Output
    combined_data
    | union (total_sum)
    
    

    Application Insights의 스크린샷이 4개의 행(모두, 단순, 긴, 없음)으로 구성된 결과 테이블을 보여 주며, 각 행에는 사용자 수와 백분율이 표시됩니다.

    견적 페이지가 로드될 때마다 하나의 "FeatureEvaluation"이 표시되고, 좋아요 단추를 클릭할 때마다 하나의 "좋아요" 이벤트가 표시됩니다. "FeatureEvaluation" 이벤트에는 평가된 기능 플래그의 이름으로 호출 FeatureName 된 사용자 지정 속성이 있습니다. 두 이벤트 모두 따옴표를 좋아하는 사용자의 이름을 따서 TargetingId라는 사용자 지정 속성이 있습니다.

추가 리소스