本文主要介绍 Serverless 应用的网络环境以及 Serverless 应用容器内的环境,了解背景知识以及基本的运维知识后能够利用 Webshell 完成基本的运维需求。html
用户能够经过阿里云控制台直接获取 ECS 的 Shell,从而完成本身的运维需求。若是 ECS 内开启了 SSH 服务,且 ECS 存在弹性公网 IP,那么用户也能够在本地经过 SSH 服务获取 ECS 的 Shell 完成运维需求。java
因为 EDAS Serverless 特殊的架构以及网络环境,用户暂时没法直接从本地经过 SSH 服务获取应用容器的 Shell。在 Serverless 场景中,容器是一个暂态的、供应用运行的环境,通常来讲不须要进入运维。为了方便用户进行线上问题定位排查,EDAS 在控制台提供了一个简单的Webshell,供用户查看调试本身的容器。git
EDAS 默认给出的 Jar War 类型应用的容器基础镜像主要是面向应用运行时,不带有冗余的排查工具,所以对运维人员可能不够友好。对于用户自身的镜像,不须要镜像中启动 SSH 服务,只须要带有可执行的/bin/bash
便可。用户本身的镜像能够带上必须的运维工具方便排查。目前 Webshell 不支持 Windows 镜像。github
EDAS 应用节点处于用户本身购买的阿里云 VPC 内。在 EDAS 中,还额外提供了一层中间件服务调用隔离的手段:EDAS 命名空间。EDAS 命名空间与 VPC 内的 VSWITCH 是绑定关系,一个 EDAS 命名空间对应一个 VSWITCH,一个 VSWITCH 能够对应多个EDAS命名空间。VPC 的原理以及基本的产品状况能够在阿里云VPC官方文档了解。简单来说,VPC 内的 IP 地址为局域网地址,不一样 VPC 内的2层以上数据包没法路由到目的地。EDAS 命名空间主要作中间件逻辑隔离,不一样命名空间内的应用在中间件层面是隔离的,如服务发现以及配置下发等。shell
因为 VPC 的产品特性以及当前的 EDAS Serverless 的产品特性,容器没法直接触达 VPC 外的服务(阿里云产品除外,如 OSS、镜像服务等)。在没有额外配置的状况下,你的容器运行在网络“孤岛”环境。centos
了解了基本的网络状况,如今能够明白为何用户没法直接触达本身的容器了。bash
容器内须要访问公网服务,能够经过购买 NAT,并配置 VPC 内 VSWITCH 的SNAT
规则便可,详见阿里云Serverless文档。SNAT规则可让VPC内地址访问公网地址,从而使用公网暴露的服务,获取到公网的资源。网络
基于阿里云容器镜像服务,EDAS 集成了为用户构建以及管理镜像的功能。用于构建的基础镜像为centos:7
,在此基础上为用户配置好了时区、语言与编码方式、Open JDK 运行环境。容器存在的目的是为了让应用运行起来,EDAS 不可能以占用全部用户运行时资源为代价,集成过多的工具,对于容器内工具备需求的用户,建议自行构建镜像,或者按需从 OSS 拉取。架构
线上容器的运维通常是没必要要的。若是你肯定须要进入容器进行运维,请务必了解你的操做对线上业务的风险:对于单点应用,你的行为可能致使容器 OOM,从而致使分钟级别的业务中断,而对于多点部署的业务,上述现象可能形成业务秒级中断。app
诊断 EDAS 应用通常从这几个方面入手:常规检查
,上传搜集的日志
。
常规检查的方法比较多,以 Java 应用为例,通常是检查进程、线程以及 JVM 的健康状态。
ps -ef | grep java
检查你的 Java 进程是否还存在。这里必须特别说明的是,容器内通常须要使用主进程
启动你的应用,这样一旦你的应用被kill掉,容器也会退出,EDAS 会将退出的容器从新启动,防止业务中断。dmesg | grep -i kill
查看OOM相关日志。若是存在日志,那么说明你的应用进程被 kill 掉了,接着检查工做目录下hs_err_pid{PID}.log
日志文件,定位具体的缘由。# 接入arthas,需求打通公网 wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
curl -v {host/ip} {port}
检查域名解析以及连通性,经过tcpdump
抓包观察分析网络调用状况。受限于容器内工具的匮乏,比较推荐的方案是将容器内搜集到的日志上传到云端,而后下载到本地进行分析。目前,EDAS 暂时没有提供容器内日志的下载功能,这里给出一种基于阿里云 OSS 服务的解决方案。OSS 打通了阿里云生态几乎全部的网络环境,你几乎能够在任何网络环境下上传以及下载 OSS 上的文件。
## 以64位centos系统,root下 ## 没有打通公网的状况下能够选择在本地下载,而后将这个文件上传到oss,而后取oss的vpc内地址进行下载 wget http://gosspublic.alicdn.com/ossutil/1.5.0/ossutil64 chmod 755 ossutil64
## 请先确保帐号(没必要是当前帐号,任意开通阿里云oss服务的帐号都可)已开通 OSS 服务 ## 按照提示配置你的 AK SK endpoint信息,ststoken 不须要填写 ./ossutil64 config ## 检查帐号是否可用,若是报错则配置错误,若是没有bucket,则建议前往oss控制台建立,命令行工具也支持建立 ./ossutil64 ls ## 这里建立一个模拟的日志文件,用于上传 echo "Hello" > edas-app.log ./ossutil64 cp edas-app.log {bucket-address,例如:oss://test-bucket,能够从上述命令"./ossutil64 ls"中查看}
原文连接 本文为云栖社区原创内容,未经容许不得转载。