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. ウェブアクセラレータ(CDNサービス) の使用量などをSlackに通知する @さくらのマイクロコミュニティ (CLI/APIユーザの会) vol.6 2022/03/03 ©SAKURA Internet Inc. さくらインターネット

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

    担当サービス の開発・運用をしています。 さくらインターネット 所属
  3. 本日の発表内容 【本日の発表内容】 ウェブアクセラーレータのAPIを利用して 使用量の情報をSlackに通知する 📰さくらのクラウド ウェブアクセラレータ(CDN) の使用量などのレポートをSlackに通知する https://qiita.com/nozomi1773/items/a1e25e8f2e90877a2f88 📰ウェブアクセラレータの転送量・課金額などをSlack通知するスクリプト https://github.com/nozomi1773/webaccel-usage-slack

  4. CDNサービスとは ウェブアクセラレータ サービスサイト より ( https://www.sakura.ad.jp/services/cdn/ ) CDN(Content Delivery Network)

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

    オリジンサーバ(お客様のサーバ)のデータをCDNサーバへキャッシュし、 データの配信を肩代わりするサービス 【CDNが活躍する事例】 突発的なアクセス増が予想される(保険としても) ・ テレビやインターネットニュース、SNSで取り上げられた ・ 通販サイトのタイムセール など 大量の配信がしたい ・ 画像・動画データ ・ ゲームのデータ など
  6. ウェブアクセラレータの使用量とは?① 「転送量」「課金量」について ウェブアクセラレータ サービスサイト より ( https://www.sakura.ad.jp/services/cdn/ ) ウェブアクセラレータからの 配信量

    = 課金額 課金は、アウトバウンド側トラフィックのみ
  7. ウェブアクセラレータの使用量とは?② コントロールパネル ウェブアクセラレータのコントロールパネルでは、 月別の利用情報/リアルタイム更新のアクセスグラフが確認できます 「アクセス数」 「転送量」 「キャッシュヒット率(転送量/リクエスト数)」 「課金額」 リアルタイムグラフ 利用情報のレポート

  8. ウェブアクセラレータの使用量とは?② コントロールパネル ウェブアクセラレータのコントロールパネルでは、 月別の利用情報/リアルタイム更新のアクセスグラフが確認できます 「アクセス数」 「転送量」 「キャッシュヒット率(転送量/リクエスト数)」 「課金額」 リアルタイムグラフ 利用情報のレポート

    本日はこちらを使います
  9. ウェブアクセラレータのAPI機能 ウェブアクセラレータのAPIでできること (2022年3月3日時点) ◆情報取得系 ・月別使用量の取得 ・サイト一覧の取得 ・サイト詳細の取得 ◆設定変更系 ・サイトの設定変更 ◆証明書関連

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

    ・証明書の情報を取得 ・証明書と秘密鍵の情報を作成 ・証明書と秘密鍵の情報を更新 ◆キャッシュ削除系 ・キャッシュの全件削除 ・キャッシュの個別削除 本日はこちらを使います ウェブアクセラレータ APIマニュアルより ( https://manual.sakura.ad.jp/cloud/webaccel/api.html )
  11. 使用量を通知する(通知イメージ) ③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 円 ① 情報取得 ② テキスト加工
  12. 情報取得① ウェブアクセラレータ用のAPIキーの発行方法 ・対象のさくらのクラウドアカウント (通知したいウェブアクセラレータのサイト登録をしているクラウドアカウント) ・ 「リソース操作APIキー」で、 「他サービスへのアクセス権」に 【ウェブアクセラレータ】 を選択したキーを作成

  13. 情報取得② 月別使用量取得API クラウドアカウントに登録されている全サイトの月別使用量を取得 API URL : https://secure.sakura.ad.jp/cloud/zone/is1a/api/webaccel/1.0/monthlyusage(?target=yyyymm) ウェブアクセラレータ APIマニュアルより (

    https://manual.sakura.ad.jp/cloud/webaccel/api.html )
  14. 情報取得③ 月別使用量取得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 .
  15. 情報取得③ 月別使用量取得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 } レスポンス内容
  16. テキスト加工 { "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 円
  17. テキスト加工 { "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
  18. Webhook準備 ・Slack Webhookの準備 ・ Incoming Webhooks のエンドポイントを取得 ・ POSTリクエストで通知テスト

  19. 使用量を通知する(スクリプト例) #!/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
  20. 使用量を通知する(スクリプト例) #!/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
  21. まとめ ・ウェブアクセラレータのAPIでできること ・ウェブアクセラレータご利用中で 定期的に利用量レポートを自動通知したい方は、APIをぜひ活用ください!