开发者社区> 张医博> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【OSS 排查方案-2】CDN+OSS 基础排查工具

简介: 工具说明: CDN+OSS 的服务架构。 目的:当用户遇到 CDN + OSS 投诉问题后,可以先用此工具测试一下基本的测试指标,初步判断问题故障点,同时可以将脚本结果粘贴给阿里云客服更快定位信息。 使用方法:sh check_cdn_oss.sh 域名 请求URL  OSS公网域名 Usge: check_cdn_oss.sh www.zhangyb.mobi http://www.zhangyb.mobi/index.html youkou.oss-cn-beijing.aliyuncs.com 如有需求,可提改进意见,工具会继续完善,谢谢。
+关注继续查看

工具说明: CDN+OSS 的服务架构。

目的:当用户遇到 CDN + OSS 投诉问题后,可以先用此工具测试一下基本的测试指标,初步判断问题故障点,同时可以将脚本结果粘贴给阿里云客服更快定位信息。

使用方法:sh check_cdn_oss.sh 域名 请求URL  OSS公网域名

Usge: check_cdn_oss.sh www.zhangyb.mobi http://www.zhangyb.mobi/index.html youkou.oss-cn-beijing.aliyuncs.com

如有需求,可提改进意见,工具会继续完善,谢谢。


#!/bin/bash
#-*- coding: utf-8 -*-
# author: hanli
# mail: zhang_15127648471@163.com
# describe: 在 LINUX 端上执行用来检查初步的排障信息。适用于 CDN+OSS 的服务场景
# Initial variable
# update: 2018-01-17

DOMAIN=$1
REQURL=$2
ENDPOINT=$3
LGREE="\033[32m"
LRED="\033[31m"
RGREE="\033[0m"
RESULT=""
CODE=""
STATUS=""
CACHE=""

# 检查脚本输入参数
function Judge(){
             
  local DOMAINS="www.zhangyb.mobi"
  local REQURLS="http://www.zhangyb.mobi/index.html"
  local ENDPOINTS="youkou.oss-cn-beijing.aliyuncs.com"
    
  if [ $1 -ne 3 ]; then
    echo -e "${LRED}Usge${RGREE}: $0 ${DOMAINS} ${REQURLS} ${ENDPOINTS}" && exit 1
  fi
  CheckEnvoirment
}   

# 检查本机依赖环境
function CheckEnvoirment(){
  echo -e "${LGREE}INFO: CHECKING SCRIPTS DENPENDENT ENVIORMENT... ${RGREE}"
  which sed >/dev/null 2>&1 && DealWith sed || echo -e "${LRED}INFO: THE SED CANNOT BE USE, START USE AWK${RGREE}"
  which awk >/dev/null 2>&1 && DealWith awk || echo -e "${LRED}INFO: THE AWK CANNOT BE USE${RGREE}"
  echo -e "${LRED}INFO: UNABLE FIND SCRIPTS DEPENDENT ENVIORMENT!!!${RGREE}" && exit 1
}

function DealWith(){

  if [ "$1" == "sed" ]; then
    OSSURL=$(echo ${REQURL} | sed -r 's/(http\:\/\/)([^\/]*)(\/.*)/\1'${ENDPOINT}'\3/' 2>&1 )
  elif [ "$1" == "awk" ]; then
    OSSURL=http://${ENDPOINT}$(echo ${REQURL} | awk -F"//" '{print $2}' | awk -F "/" '{print "/"$2}' 2>&1)
  else
    echo "${LRED}INFO: GET OSS URL ERROR!!!${RGREE}" && exit 1
  fi
  CheckPing
}    

# 开始各项检查
function CheckPing(){
  
  echo -e "${LGREE}INFO: CHECKING NETWORKING...${RGREE}"
  ping www.taobao.com -w 4 -d >/dev/null 2>/dev/null
  [ "$?" != "0" ] && echo -e "${LGREE}INFO: MACHINE NETWORKING FAILURE${RGREE}" && exit 1

  echo -e "${LGREE}INFO: NETWORK IS GOOD ${DOMAIN} CHECKING...${RGREE}"
  ping ${DOMAIN} -w 4 -d >/dev/null 2>/dev/null
  [ "$?" != "0" ] && echo -e "${LGREE}INFO: DOMAIN ${DOMAIN} NETWORK FAILURE${RGREE}"

  echo -e "${LGREE}INFO: OSS DOMAIN ${ENDPOINT} CHECKING...${RGREE}"
  ping ${ENDPOINT} -w 4 -d >/dev/null 2>/dev/null
  [ "$?" != "0" ] && echo -e "${LGREE}INFO: OSS ${ENDPOINT} NETWORK FAILURE${RGREE}"

  Check 
}
 
function Check(){

  if GetInfo; then
    echo -e "${LGREE}INFO: ${RESULT}${RGREE}"
  fi

  if GetDomain; then
    echo -e "${LGREE}INFO: CHECK WORK LEGAL${RGREE}"
  else
    echo -e "${LRED}INFO: DOMAIN SERVICE NOT IN ALIBABA${RGREE}" && exit 1
  fi

  if GetCurl; then
    echo -e "${LGREE}INFO: URL HTTP CODE ${STATUS}, CACHE TIME ${CACHE}${RGREE}"
  else
    echo -e "${LRED}INFO: CHECK CDN DOMAIN WORK IS FAILURE${RGREE}"
  fi

  if GetOSS; then
    echo -e "${LGREE}INFO: OSS IS WORK GOOD${RGREE}"
  else
    echo -e "${LRED}INFO: OSS IS WORK FAILURE${RGREE}"
  fi
  exit 0
}

# 测试 CDN 访问连通性
function GetCurl(){

  CODE=$(curl -svo /dev/null ${REQURL} -m 2 2>&1 | egrep -i "HTTP\/[1|2]\.[0|2|1] .*" | fgrep 200)

  if [ ! -z "${CODE}" ]; then
    STATUS=$(curl -svo /dev/null ${REQURL} -m 2 2>&1 | grep -i "x-cache" | grep -i hit >/dev/null && echo "HIT" || echo "MISS")
    CACHE=$(curl -svo /dev/null ${REQURL} -m 2 2>&1 | grep -i "X-Swift-CacheTime" | awk '{print $3}')
    return 0
  fi
  return 1
}

# 测试 OSS 访问连通性
function GetOSS(){
  local OSSCODE=$(curl -svo /dev/null ${OSSURL} -H "Host: ${DOMAIN}" -m 2 2>&1 | egrep -i "HTTP\/[1|2]\.[0|2|1] .*" | fgrep 200)
  local OSSRESP=$(curl -sv0 /dev/null ${OSSURL} -m 2 2>&1 | egrep -i "HTTP\/[1|2]\.[0|2|1] .*" | fgrep 200)
  [ ! -z "${OSSCODE}" ] || [ ! -z "${OSSRESP}" ] && return 0 || return 1
}

# 获取本地的 DNS CLIENT IP
function GetInfo(){

  local TIMESTART=$(date +%s)
  local TIMEEND=$(date +%s)
  local URL="https://42-120-74-167-408161718.dns-detect.alicdn.com/api/cdnDetectHttps"
  local METHOD="commitDetectHttps"
  local DETECTID="408161718"
  local JQUERY="jQuery110104439492578113773"
  local INFO=$(curl -v "${URL}?method=${METHOD}&detectId=${DETECTID}&cb=${JQUERY}_${TIMESTART}&_=${TIMEEND}" 2>&1 | xargs | awk '{print $NF}')

  if [ ! -z "${INFO}" ]; then
    RESULT=$(echo ${INFO} | egrep -o "ldns\:.*\,localIp\:[^}]*")
    [ ! -z "${RESULT}" ] && return 0 || return 1
  fi
  return 1
}

# 判断是否有 CNAME 记录,是否在阿里云加速
function GetDomain(){

  local CNAME=$(dig ${DOMAIN} +time=1 2>&1 | fgrep CNAME | awk '{print $NF}' |fgrep kunlun)
  [ ! -z "${CNAME}" ] && return 0 || return 1
}


Judge $#


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【前端之旅】Web基础与开发工具
【前端之旅】Web基础与开发工具
13 0
挑战21天手写前端框架 day4 框架的本质是命令行工具?
挑战21天手写前端框架 day4 框架的本质是命令行工具?
47 0
css基础
0. 浏览器读取选择器是从右向左依次选择 div.test p a.son{} 1.选择所有的a.son 返回结果列表 2.检查结果列表中父元素是否有p,返回结果列表 3.返回结果列表中是否有div.
622 0
css基础
CSS  CSS介绍  导入css  Css选择器  CSS属性  CSS框模型 css介绍 1. css是什么 CSS 指层叠样式表 (Cascading Style Sheets)  样式定义如何显示 HTML 元素  样式通常存储在样式表中  把样式添加到 HTML 4.
1219 0
如何排查Java内存泄露(内附各种排查工具介绍)
今天刚刚才加一个故障review会议, 故障非常典型, 在google也可以找到相似案例介绍。 在排查问题的过程中,使用了大量的工具, 发现有问题的地方还不只一个,总结一下. (本篇文章不会重点描述案例本身,重点会介绍个人对java内存泄露问题的排查思路和各种工具的使用)。
21378 0
css基础
第四章 CSS基础    {属性:值;}1.CSS是成叠样式表(Cascading Style Sheets)的缩写.它用于定义HTML元素的显示形式.2.将CSS引入HTML的方式有三种:   a.外部样式表:           b.嵌入样式表:       .....   c.内联样式表:        属性名为style 举例:3.CSS中的选择器:  A:简单选择器;    a:元素选择器;元素 { 属性: 值; }    b:类选择器;.类名 { 属性: 值; }  注意有个点。
753 0
代理服务器验证工具
这里提供的是使用python3自己写程序来验证代理,而如果用现成的工具的话,参考一下这篇文章,写得很详细: 代理服务器验证工具下载及使用教程   下面进入正题 由于经常要使用代理服务器,而网上提供的代理服务器很多都是临时的,一个一个的手动验证费时费力,所以我就想用python3的urllib库来写一个服务器获取、验证工具。
897 0
[C#1] 2-类型基础
1.System.Object CLR要求每个类型都要继承自System.Object[直接或者间接方式],如果不显示继承,编译器会自动为我们添加对System.Object的继承。 System.Object提供几个公有实例方法: Equals:如果两个对象具有相同的值,返回true; GetHashCode: 返回对象的值的散列码。
478 0
+关注
张医博
喜欢钻研新的语言,动手实践自己想要学会的知识。
文章
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
阿里云 JindoFS+OSS 数据上云实战
立即下载
白山直播CDN流传递链路优化实践
立即下载
云存储之OSS实战进阶分享
立即下载