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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 工具说明: 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 $#


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
测试技术 对象存储
大量执行OSS PutObject时卡住的问题排查
##问题反馈 接到有客户反馈,在批量putobject时,发现上传到一定数量后应用卡住了,同时句柄数增加明显。 客户表示 1.使用10个worker线程进行put操作。 2.每个线程独立使用OssClient。 3.OssClient没有执行shutdown ##排查过程 根据客户的描述,写了一个类似的程序来进行复现 开启五个线程,每个线程上传10000次object来测试
4695 0
|
7月前
|
存储 API 对象存储
对象存储OSS产品常见问题之图片无法加载排查如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
661 0
|
网络协议 Java 开发工具
【 OSS 排查方案-9 上传 OSS 延迟超时】
基础排查 一、 上传 OSS 出现慢的场景,OSS 会返回一个 requestID 属性,请保留这个 requestID 这是 OSS 所有信息的查询入口,升级阿里云时可以快速定位问题,如果上传超时的话时没有这个属性的。
9582 1
|
移动开发 JSON JavaScript
阿里云OSS PostObject错误及排查详细版本
PostObject使用表单上传文件到OSS。PostObject的消息实体通过 多重表单格式multipart/form-data 编码,详细说明请参看 RFC 2388。Put Object中参数通过HTTP请求头传递,Post Object参数则作为消息体的表单域传递。
1812 0
|
存储 监控 安全
OSS异常流量排查及防护
OSS适用于存储各种类型的静态资源。您在OSS中存储静态资源。当OSS生成流量大的异常流量时,可能是恶意引用黑客攻击或请求访问OSS资源的恶意IP引起的。针对上述情况,本文将向您展示如何定位异常流量以及如何保护流量。
1670 0
OSS异常流量排查及防护
|
API 对象存储
【OSS 排查方案-10 请求 OSS 返回 404】
什么是 404 404 标准的 http code 状态码,代表用户请求的资源在服务端不存在, 404 并不是一个异常状态码?而是一个正常的响应。换句话说 404 已经成为了一个结果,这种响应常见在 client 端下载 OSS 的资源时出现。
【OSS 排查方案-10 请求 OSS 返回 404】
|
编解码 对象存储 索引
【OSS 排查方案-12 livechannel 直播推流】
OSS livechannel 推流过程 生成推流 URL设置推流状态 录制 M3u8 缺失 默认录制成品的 m3u8 所以只有最后 3 片,遵循的是 hls 协议的默认规则,是正常想象,可以通过调用 PostVodPlaylist 接口将指定时间范围内的 ts 文件汇聚到一个 m3u8 索引内来解决; tips EndTime 必须大于 StartTime,且时间跨度不能大于 1 天。
【OSS 排查方案-12 livechannel 直播推流】
|
JSON 对象存储 数据格式
【OSS 排查方案-13 postobject】
EntityTooLarge 出现这种问题基本是客户端的 post 代码中限制的请求的 body 大小,排查这种问题最好是通过抓包,或者构造 post 源码上看下。当你的 bucket 不是 public-read-write 时,需要客户端的 post 代码中提供 post policy ,这这属性中,有关于 content-length-range 的设置,不注意的话这个地方基础设置都是 10M,建议检查下这个地方。
【OSS 排查方案-13 postobject】
|
对象存储
【OSS 排查方案-14 url 编码问题】
经过 url encode 编码访问失败 编码前 : http://oss-cn-hangzhou.aliyuncs.com/fun-punch-hls/ji-test/c133249354654050a66ec4341e61c23f?Expires=1540451197&OSSAccessKey.
【OSS 排查方案-14 url 编码问题】
|
弹性计算 Java 开发工具
【OSS 排查方案-3】OSS 的网络排查
鉴于之前遇到很多 本地-》OSS ,上传、下载总是慢的情况,或者上传、下载经常出现错误或者异常的问题。根据多个典型案例,抽象出一下排查方案,希望对大家快速定位问题有所帮助。
【OSS 排查方案-3】OSS 的网络排查
下一篇
无影云桌面