>백엔드 개발 >파이썬 튜토리얼 >Cloud Run Functions 및 Cloud Scheduler를 사용하여 그래프로 Slack 알림 자동화

Cloud Run Functions 및 Cloud Scheduler를 사용하여 그래프로 Slack 알림 자동화

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 04:47:09735검색

저는 최근 7일 동안의 세션 수를 시각화하는 그래프를 사용하여 Slack 알림을 자동화하는 시스템을 구축했습니다. 이는 데이터 처리 및 그래프 생성을 위한 Cloud Run 기능과 실행 예약을 위한 Cloud Scheduler의 조합을 사용하여 달성되었습니다.

구현 개요

클라우드런 기능

Cloud Run 기능은 BigQuery에 쿼리하여 세션 데이터를 가져오고 Matplotlib를 사용하여 선 차트를 만든 다음 Slack API를 통해 차트를 Slack으로 보냅니다. 다음 단계에서는 설정 프로세스를 간략하게 설명합니다.

main.py의 코드는 다음과 같습니다. 실행하기 전에 SLACK_API_TOKEN 및 SLACK_CHANNEL_ID를 환경 변수로 설정해야 합니다. 나중에 설정하므로 지금은 비워두어도 됩니다.

import os
import matplotlib.pyplot as plt
from google.cloud import bigquery
from datetime import datetime, timedelta
import io
import pytz
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

def create_weekly_total_sessions_chart(_):
    SLACK_TOKEN = os.environ.get('SLACK_API_TOKEN')
    SLACK_CHANNEL_ID = os.environ.get('SLACK_CHANNEL_ID')

    client = bigquery.Client()

    # Calculate the date range for the last 7 days
    jst = pytz.timezone('Asia/Tokyo')
    today = datetime.now(jst)
    start_date = (today - timedelta(days=7)).strftime('%Y-%m-%d')
    end_date = (today - timedelta(days=1)).strftime('%Y-%m-%d')

    query = f"""
        SELECT 
            DATE(created_at) AS date,
            COUNT(DISTINCT session_id) AS unique_sessions
        FROM `<project>.<dataset>.summary_all`
        WHERE created_at BETWEEN '{start_date} 00:00:00' AND '{end_date} 23:59:59'
        GROUP BY date
        ORDER BY date;
    """

    query_job = client.query(query)
    results = query_job.result()

    # Prepare data for the graph
    dates = []
    session_counts = []
    for row in results:
        dates.append(row['date'].strftime('%Y-%m-%d'))
        session_counts.append(row['unique_sessions'])

    # Generate the graph
    plt.figure()
    plt.plot(dates, session_counts, marker='o')
    plt.title('Unique Session Counts (Last 7 Days)')
    plt.xlabel('Date')
    plt.ylabel('Unique Sessions')
    plt.xticks(rotation=45)
    plt.tight_layout()

    # Save the graph as an image
    image_binary = io.BytesIO()
    plt.savefig(image_binary, format='png')
    image_binary.seek(0)

    # Send the graph to Slack
    client = WebClient(token=SLACK_TOKEN)
    try:
        response = client.files_upload_v2(
            channel=SLACK_CHANNEL_ID,
            file_uploads=[{
                "file": image_binary,
                "filename": "unique_sessions.png",
                "title": "Unique Session Counts (Last 7 Days)"
            }],
            initial_comment="Here are the session counts for the last 7 days!"
        )
    except SlackApiError as e:
        return f"Error uploading file: {e.response['error']}"

    return "Success"

종속성

requirements.txt 파일을 만들고 다음 종속성을 포함합니다.

functions-framework==3.*
google-cloud-bigquery
matplotlib
slack_sdk
pytz

Cloud Run 함수에 대한 액세스 권한 부여

Cloud Scheduler 또는 기타 서비스가 Cloud Run 기능을 호출하도록 허용하려면 해당 항목에roles/run.invoker 역할을 할당해야 합니다. 이를 수행하려면 다음 명령을 사용하십시오.

gcloud functions add-invoker-policy-binding create-weekly-total-sessions-chart \
      --region="asia-northeast1" \
      --member="MEMBER_NAME"

MEMBER_NAME을 다음 중 하나로 바꾸세요.

  • Cloud Scheduler용 서비스 계정: serviceAccount:scheduler-account@example.iam.gserviceaccount.com
  • 공개용(권장하지 않음): 모든사용자

Cloud Scheduler 설정

Cloud Scheduler를 사용하여 매주 월요일 오전 10시(JST)에 함수 실행을 자동화하세요. 구성 예는 다음과 같습니다.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

슬랙 API 구성

Cloud Run 기능을 활성화하여 Slack 알림을 보내려면 다음 단계를 따르세요.

  1. Slack API로 이동하여 새 앱을 생성하세요.
  2. OAuth 및 권한에서 다음 봇 토큰 범위를 할당합니다.
    • 채널:읽기
    • 채팅:쓰기
    • 파일:쓰기

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

  1. Slack 작업 공간에 앱을 설치하고 봇 사용자 OAuth 토큰을 복사합니다.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

  1. 알림을 게시하려는 Slack 채널에 앱을 추가하세요.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

  1. 채널 ID를 복사하여 봇 토큰과 함께 Cloud Run 함수의 SLACK_CHANNEL_ID 및 SLACK_API_TOKEN 환경 변수에 붙여넣습니다.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

최종 결과

모든 것이 설정되면 Slack 채널은 다음과 같은 그래프가 포함된 주간 알림을 받게 됩니다.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

위 내용은 Cloud Run Functions 및 Cloud Scheduler를 사용하여 그래프로 Slack 알림 자동화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.