Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ウェブアクセラレータ(CDNサービス) の使用量などをSlackに通知する

ウェブアクセラレータ(CDNサービス) の使用量などをSlackに通知する

More Decks by 稲波 志 (Inanami Nozomi)

Other Decks in Technology

Transcript

  1. 発表者の自己紹介 稲波 志 (いななみ のぞみ) / Twitter : @nozomi_1773 CDNサービス

    担当サービス の開発・運用をしています。 さくらインターネット 所属
  2. CDNサービスとは ウェブアクセラレータ サービスサイト より ( https://www.sakura.ad.jp/services/cdn/ ) CDN(Content Delivery Network)

    オリジンサーバ(お客様のサーバ)のデータをCDNサーバへキャッシュし、 データの配信を肩代わりするサービス
  3. CDNサービスとは ウェブアクセラレータ サービスサイト より ( https://www.sakura.ad.jp/services/cdn/ ) CDN(Content Delivery Network)

    オリジンサーバ(お客様のサーバ)のデータをCDNサーバへキャッシュし、 データの配信を肩代わりするサービス 【CDNが活躍する事例】 突発的なアクセス増が予想される(保険としても) ・ テレビやインターネットニュース、SNSで取り上げられた ・ 通販サイトのタイムセール など 大量の配信がしたい ・ 画像・動画データ ・ ゲームのデータ など
  4. ウェブアクセラレータのAPI機能 ウェブアクセラレータのAPIでできること (2022年3月3日時点) ◆情報取得系 ・月別使用量の取得 ・サイト一覧の取得 ・サイト詳細の取得 ◆設定変更系 ・サイトの設定変更 ◆証明書関連

    ・証明書の情報を取得 ・証明書と秘密鍵の情報を作成 ・証明書と秘密鍵の情報を更新 ◆キャッシュ削除系 ・キャッシュの全件削除 ・キャッシュの個別削除 ウェブアクセラレータ APIマニュアルより ( https://manual.sakura.ad.jp/cloud/webaccel/api.html )
  5. ウェブアクセラレータのAPI機能 ウェブアクセラレータのAPIでできること (2022年3月3日時点) ◆情報取得系 ・月別使用量の取得 ・サイト一覧の取得 ・サイト詳細の取得 ◆設定変更系 ・サイトの設定変更 ◆証明書関連

    ・証明書の情報を取得 ・証明書と秘密鍵の情報を作成 ・証明書と秘密鍵の情報を更新 ◆キャッシュ削除系 ・キャッシュの全件削除 ・キャッシュの個別削除 本日はこちらを使います ウェブアクセラレータ APIマニュアルより ( https://manual.sakura.ad.jp/cloud/webaccel/api.html )
  6. 使用量を通知する(通知イメージ) ③Slack Webhook Slack 任意の実行元 ウェブアクセラレータ API ウェブアクセラレータ配信量レポート 2022年02月 ドメイン

    転送量 金額 ==================== *****.example.com : 99.3 GiB , 495 円 *****.example.com : 11.2 GiB , 55 円 *****.user.webaccel.jp : 0.5 GiB , 0 円 ① 情報取得 ② テキスト加工
  7. 情報取得③ 月別使用量取得API実行例 # target_month=$(date -d '1 days ago' '+%Y%m’) #

    webaccel_api_baseurl="https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/" # sakura_cloud_api_secret="*****" # sakura_cloud_api_token="*****" # curl -s --user “${sakura_cloud_api_token}”:“${sakura_cloud_api_secret}” ${webaccel_api_baseurl}monthlyusage?target=${target_month} | jq .
  8. 情報取得③ 月別使用量取得API実行例 # target_month=$(date -d '1 days ago' '+%Y%m’) #

    webaccel_api_baseurl="https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/" # sakura_cloud_api_secret="*****" # sakura_cloud_api_token="*****" # curl -s --user “${sakura_cloud_api_token}”:“${sakura_cloud_api_secret}” ${webaccel_api_baseurl}monthlyusage?target=${target_month} | jq . { "Year": 2022, "Month": 2, "MonthlyUsages": [ { "SiteID": "***********", "Domain": "****.example.com", "ASCIIDomain": "****.example.com", "SubDomain": "********.user.webaccel.jp", "AccessCount": "1010204050", "BytesSent": "106658204050", "CacheMissBytesSent": "10824020707", "CacheHitRatio": 85.148514851485, "BytesCacheHitRatio": 99.89851675449, "Price": 495 }, ...(略).... } ], "Success": true, "is_ok": true } レスポンス内容
  9. テキスト加工 { "Year": 2022, "Month": 2, "MonthlyUsages": [ { "SiteID":

    "***********", "Domain": "****.example.com", "ASCIIDomain": "****.example.com", "SubDomain": "********.user.webaccel.jp", "AccessCount": "1010204050", "BytesSent": "106658204050", "CacheMissBytesSent": "10824020707", "CacheHitRatio": 85.148514851485, "BytesCacheHitRatio": 99.89851675449, "Price": 495 }, ...(略).... } ], "Success": true, "is_ok": true } レスポンス内容 通知したい 内容 ウェブアクセラレータ配信量レポート 2022年02月 ドメイン 転送量 金額 ==================== *****.example.com : 99.3 GiB , 495 円 *****.example.com : 11.2 GiB , 55 円 *****.user.webaccel.jp : 0.5 GiB , 0 円
  10. テキスト加工 { "Year": 2022, "Month": 2, "MonthlyUsages": [ { "SiteID":

    "***********", "Domain": "****.example.com", "ASCIIDomain": "****.example.com", "SubDomain": "********.user.webaccel.jp", "AccessCount": "1010204050", "BytesSent": "106658204050", "CacheMissBytesSent": "10824020707", "CacheHitRatio": 85.148514851485, "BytesCacheHitRatio": 99.89851675449, "Price": 495 }, ...(略).... } ], "Success": true, "is_ok": true } レスポンス内容 通知したい 内容 ウェブアクセラレータ配信量レポート 2022年02月 ドメイン 転送量 金額 ==================== *****.example.com : 99.3 GiB , 495 円 *****.example.com : 11.2 GiB , 55 円 *****.user.webaccel.jp : 0.5 GiB , 0 円 ①ドメイン名 ②転送量 ③金額 ※ byte → GiB
  11. 使用量を通知する(スクリプト例) #!/bin/bash webhookurl="https://hooks.slack.com/services/******************" channel_name="#*****" username="webaccel-report“ sakura_cloud_api_secret="*****" sakura_cloud_api_token="*****“ webaccel_api_baseurl="https://secure.sakura.ad.jp/cloud/zone/is1a/api/we baccel/1.0/" target_month=$(date

    -d '1 days ago' '+%Y%m’) text_target_month=$(date -d '1 days ago' '+%Y年%m月’) which jq >/dev/null rc=$? if [ $rc -ne 0 ] ; then echo "jqをインストールしてください“ exit fi jq_all=“” jq_all=$(curl -s --user "${sakura_cloud_api_token}":"${sakura_cloud_api_secret}" ${webaccel_api_baseurl}monthlyusage?target=${target_month} | jq '.MonthlyUsages[]’) rc=$? if [ $rc -ne 0 ] ; then report="取得に失敗しました" else report=$(echo "ドメイン" "転送量" "金額")"¥n====================¥n" for domain in $(echo $jq_all | jq '.Domain’) do jq_domain=$(echo $jq_all | jq ". | select(.Domain == "$domain")") bytes_sent=$(echo $jq_domain | jq -c .BytesSent ) bytes_sent=$(echo $bytes_sent | sed "s/¥"//g" ) gib_bytes_sent=$(bc <<< "scale=2; ${bytes_sent}/1024/1024/1024") price=$(echo $jq_domain | jq -c .Price ) price=$(echo $price | sed "s/¥"//g" ) domain=$(echo $domain | sed -e 's/"//g’) report=${report}$(echo $domain : $gib_bytes_sent GiB , $price "円" )"¥n" done fi massage="ウェブアクセラレータ配信量レポート ${text_target_month}¥n" massage=$massage'```'$report'```’ curl -s -S -X POST --data-urlencode "payload={¥"channel¥": ¥"${channel_name}¥", ¥"username¥": ¥"${username}¥", ¥"text¥": ¥"${massage}¥", ¥"icon_emoji¥": ¥":ghost:¥"}" $webhookurl >/dev/null exit
  12. 使用量を通知する(スクリプト例) #!/bin/bash webhookurl="https://hooks.slack.com/services/******************" channel_name="#*****" username="webaccel-report“ sakura_cloud_api_secret="*****" sakura_cloud_api_token="*****“ webaccel_api_baseurl="https://secure.sakura.ad.jp/cloud/zone/is1a/api/we baccel/1.0/" target_month=$(date

    -d '1 days ago' '+%Y%m’) text_target_month=$(date -d '1 days ago' '+%Y年%m月’) which jq >/dev/null rc=$? if [ $rc -ne 0 ] ; then echo "jqをインストールしてください“ exit fi jq_all=“” jq_all=$(curl -s --user "${sakura_cloud_api_token}":"${sakura_cloud_api_secret}" ${webaccel_api_baseurl}monthlyusage?target=${target_month} | jq '.MonthlyUsages[]’) rc=$? if [ $rc -ne 0 ] ; then report="取得に失敗しました" else report=$(echo "ドメイン" "転送量" "金額")"¥n====================¥n" for domain in $(echo $jq_all | jq '.Domain’) do jq_domain=$(echo $jq_all | jq ". | select(.Domain == "$domain")") bytes_sent=$(echo $jq_domain | jq -c .BytesSent ) bytes_sent=$(echo $bytes_sent | sed "s/¥"//g" ) gib_bytes_sent=$(bc <<< "scale=2; ${bytes_sent}/1024/1024/1024") price=$(echo $jq_domain | jq -c .Price ) price=$(echo $price | sed "s/¥"//g" ) domain=$(echo $domain | sed -e 's/"//g’) report=${report}$(echo $domain : $gib_bytes_sent GiB , $price "円" )"¥n" done fi massage="ウェブアクセラレータ配信量レポート ${text_target_month}¥n" massage=$massage'```'$report'```’ curl -s -S -X POST --data-urlencode "payload={¥"channel¥": ¥"${channel_name}¥", ¥"username¥": ¥"${username}¥", ¥"text¥": ¥"${massage}¥", ¥"icon_emoji¥": ¥":ghost:¥"}" $webhookurl >/dev/null exit ◆月次、週次、日次、など好みのタイミングでcronに登録 設定例:月初9時に前月分を取得の場合 9 0 1 * * /usr/local/bin/webaccel-usage-slack.sh