大家好,我是阿萨。 今天的内容是3月4日晚上CC星球的一次直播课的内容笔记。这次分享从运维的角度给大家分享了日常测试过程中运维领域需要关注的技能和知识分享。
分享大咖是陈飞老师。 陈飞老师直接列了一张运维成长路线图,也可以用作性能测试必备技能列表。所以如果你想成为一个出色的TestOps,快来看看今天的分享吧。
如果你属于下面情况之一,那分享的内容就特别适合各位
- 性能测试人员或运维人员
- 想提升测试有效性的测试经理和测试管理层
- 拓展知识领域的测试人员
- 想提升测试技能的人
- 项目经理
今天内容PPT 和Xmind 内容已经得到陈飞老师的授权。分享内容主要聚焦在干货上。通过今天的分享内容,你会学到:
- 运维职责,运维是干啥的?运维日常工作职责有哪些?
- 运维与测试,运维和测试在日常工作中是如何配合工作的。常见的一些工作的规范。
- 高性能系统的构建,如果想要构建高性能系统的构建,需要了解的知识有哪些。如果确认一个系统是高可用的系统。
- 监控,常见监控对象,监控指标以及监控工具
- 技能与工作,总结运维人员的经常打交道的系统,需要的技能以及具体的一个工作场景。
下面开始分享的内容。
一,运维职责
运维职责也就是运维日常工作内容。分三个阶段:
发布前:分析和审核架构设计的合理性和高可运维性,确保产品发布之后能高效稳定的运行。
发布阶段:用自动化技术或平台确保产品可以高效的发布上线,上线后可快速稳定迭代。
发布后:可以7*24 小时稳定运行。解决运维中各种问题,日常不断优化系统,提升系统的稳定性。
运维人员日常需要掌握的技能树。日常运维需要掌握的技能特别多,常见技能树见下图。蓝色会重点分享。
运维需要掌握的技能见下表总结:
二, 运维与测试
运维和测试是如何分工的?运维和测试日常是如何配合的?运维使用怎么样的流程来保证日常测试的有效性。
以Gitlab 为例。Gitlab 作为 代码仓库,tag 标记版本,打包生成docker的镜像作为版本。开发使用docker镜像的差异性来做日常测试,开发测试完成后。 使用外网环境,进行上线前的最后一次测试。所有测试使用的是同一个docker 镜像,可以确保代码打包的一致性。所有配置文件都同步更新到了镜像内,配置文件会跟着镜像文件同步更新,运维只需要更新数据源和密钥信息就可以。
管理工具和测试技术见下方截图。 自动化测试可以覆盖90%的业务,剩下的10% 都是新需求。
日常运维很多都使用Jenkins 和Gitlab 完成的。 Jenkins 和GItlab 有哪些区别呢? 详细对比信息见下图。Gitlab的Devops 是和代码集成的,所以使用很方便。
中文的Gitlab 网站: https://docs.gitlab.cn/
CI和CD 相关章节可以参考官网样例。
运维和测试日常要做好四件事情:
- 定义环境使用规范: 多少套环境,每套环境的名称,使用者,用途,日常管理内容和监控手段。
- 定义岗位职责:开发,测试,环境运维,各种技术支持老师的岗位职责。
- 建立信息台账:将所有信息记录台账,环境清单,部署内容,执行操作记录,升级发版本操作手册等。
- 里程碑复盘:针对过去一个里程碑的问题进行复盘,针对新提测里程碑的交付件进行使用反馈。通过复盘发现重复发现的问题,进行整改。
形成一个整体的循环。
下面举例说明以上各项流程。
操作系统使用操作规范举例:
- 服务器时间同步和自动校准,更改服务器时间由TestOps操作。
- 统一部署用户和路径,应用,数据库和中间件等部署使用的用户以及路径的统一。
- 尽量使用跳板机,为了审计需要。
- 主机名命名,主机统一命名规范,hosts 文件统一内容。
- 端口使用,使用10000以上端口,不使用默认端口,其他端口和上下游商量。
- 系统权限,运维使用的账号和日常排查问题的账号分开。
数据库使用规范举例:
- 使用版本库记录数据库变迁,代码有版本,数据库也需要版本。MySQL5.6 主从单线程, MySQL 5.7 主从多线程,大版本功能也会影响功能。
- 历史数据谨慎回滚,外部数据小心导入,表结构可能有变化,脱敏,细心操作,防止覆盖不该覆盖的。
- 数据库健康检查,脏数据是怎么来的,是不是bug 导致的?清理脏数据。
- 无用数据清理,磁盘空间不够用的时候,历史备份不具备参考价值的时候。无用数据需要及时清理。
- 数据库权限:运维用的账号,应用使用的账号,日常排查问题账号分离。审计和查历史数据方便。
- 数据备份,自动备份、必须检查备份有效性提高备份的效率和回滚的便利性。每天冷备,增量备份都要准备齐全。
日志收集常见细则:
- 搭建ELK,把如何使用ELK 写成操作说明书。ELK统一标准化
- 日志规则设定,为日志设定统一的目录和切割规则和备份规则以及日志级别。统一规则后分析,切割和处理就很方便。
- 日志清理,通过定时任务清理日志,重要日志保留1个月。日志过大,服务器存储空间会顶爆。
- 特殊的日志的收集,Java 应用闪退或无响应时需要知道当时的JVM 状态。内存溢出,可以把内存日志转储。
- 操作行为日志,重启应用的日志,数据运维操作的日志。安全审计用。
- 发版日志,编译出错的日志,自动或紧急发版的日志。有问题的时候查看发版日志。方便排查问题。
版本和配置日常使用细则:
- 私服按分支建立,不同分支/环境挂不要混用私服,会相互污染。架构变更的时候,开发环境和线上环境因为三方件升级,导致兼容性出现异常的事情很常见。
- 有第二套发版方案, Jenkins会挂会慢,要有纯脚本的自动法本代替方案。运维和测试达成一致。
- 关注测试的用户体验,确保能启动成功才发版,要有快速回滚的方案。
- 配置文件的版本控制,尽量精简和整合配置文件,配置文件内容的权限控制。
- 初始化脚本以Git管理,DDL和DML 必须纳入管控。
- 检查有效性,包的时间、一致性。服务启动的时间。
.
监控报警的细则(运维,开发,测试都涉及最多的):
- 服务器监控,不能被动,未卜先知。(普罗米修斯监控磁盘空间)
- 服务监控:进程在不在?服务能正常调用吗?端口的监控,接口调用模拟用户操作。做自动化监控报警。
- 连通性监控,谨防无效的探活。各种探针,检测服务的连通性。
- 特殊故障监控,数据库死锁,主从不同步。都是重大问题,需要独立监控。
- 网络质量,丢包严重直接导致交易失败,带宽利用率监控。网络检测工具,检测网络。网络质量监控。
- 检查有效性,日志里的各种失败、exception Fatal error、fail. 日志收集和监控报警和相互关联的。ES可以报警,报出错误日志。日志和监控报警是相互依存的。
脚本编写的细则:
- 防root 执行,root 启动的服务又不安全,又无法被普通用户kill。 如果脚本没考虑到安全性,产生的漏洞都是致命。
- 兼容定时任务,命令使用绝对路径,输出日志使用绝对路径。相对路径会产生很多命令。高危命令会产生不可估计的后果。
- 兼容CI-CD 传参和ansible 调用,通过参数控制影响的范围。
- 脚本支持反复执行,自带kill,自带 防并发。
- 脚本风格统一,启动参数或配置,统一下发脚本读取配置执行,不写死变量。方便团队查阅。
- 使用Git管理脚本,精心维护的脚本值得传承. 脚本做好版本变更记录。
三,高性能系统的构建
高性能系统的最基本要求:高可用,高性能以及高稳定性。高稳定性如何验证呢?那就用到了监控。 高可用和高性能其实是需要压测来检验的。压测后针对薄弱点进行优化。
性能测试涉及各种工具。详细需要用到的各种各样工具,参考下图。HTTP server, 数据库,cache 以及硬件的。比如硬盘的I/O,很多问题都是因为硬盘I/O 导致。
流量回放,通过收集一天或者一个小时用户使用的流量,然后再重放用户的流量。
性能测试过程中需要查看的指标有:TPS,QPS,server的并发数和吞吐量等。
Linux 操作系统性能观测工具以及常见命令。
使用工具的时候一定要知道工具所使用的指标的含义。每一类型的工具掌握1-2 个就可以。要活学活用。
性能分析时不要忽略进程。
性能分析完,发现了瓶颈后,就要优化了。针对性能薄弱点进行优化。针对 网络,存储,操作系统等进行性能优化。
应用方面的性能调优,Web Server 的性能调优。数据库的性能调优。索引,单索引,联合索引。数据库表结构以及字段优化等。
所有性能优化有2方面,
应用和内核。一定要做好内核参数优化。一定要了解性能参数和指标。
服务高可用架构:如何设计一套高可用的服务? 分基础设施和应用两部分。
四 , 监控
监控主要是监控系统,监控应用,监控业务。
实施监控的流程和步骤:
- 确定监控对象:明确系统,应用还是业务监控。
- 确定监控指标:明确监控对象的具体监控指标。
- 确定告警格式:明确告警格式。
- 确定告警阈值:确定告警阈值。
- 确定负责人:确定问题跟踪责任人。
- 确定处理流程:责任人处理流程。
监控体系主要分为监控和告警,监控部分要明确监控对象的监控指标,同时这些针对监控对象的监控工具都有哪些? 详细信息,见下列截图:
监控后得到的告警可以使用各种方式通知到具体责任人。
针对基础设施和应用的监控中黄色部分是要重点关注的。
下图中黄色和红色的部分工具最好是重点掌握。
日常工作中运维经常使用的Linux 命令如下。
通用以及常见用户或进程的linux 的命令。
五,技能与工作
运维工作中需要用到的工具和基础知识包含如下内容:
- 基础信息:RAID、网卡、CPU、内存、IO、操作系统、内核、
- 无状态服务:keepalived、haproxy、Tomcat、nginx、httpd
- 有状态服务:kafka、zookeeper、rabbitmq、ES、fliebeat、logstach、redis、MongoDB、PHP、influxDB、mysql、redis
- 高可用服务:MHA、PXC、sharding
- 分析工具:percona toolkit、zipkin、skywalking
- 监控工具:zabbix、prometheus、grafana、Open-falcon、
- 测试工具:goreplay、nginx_http_mirror_module、Jemter
- 持续集成:Jenkins、gitlab、ansible、saltstack
建议:当前容器化技术十分火热,要想跟上时代的节奏docker的容器化是所有人必须要学习的技能,但是重点要注意只有在自己掌握了基础服务的应用后再展开学习容器化技术,否则后期碰到的问题自己将完全无法解决。
运维人员日常主要工作系统包含:
- 自动化部署系统
- 日志收集分析体系
- 报警系统
- 业务系统改进
- 容器化中间件服务
- 降级、容灾系统
使用常见监控报警作为例子演示一个日常运维的常见操作。通过该例子,相信大家会对运维的日常工作有一个深入的认识。
总结:
一)、运维方向
1、基础环境要有统一的标准。
2、监控日志数据一定要收集齐全,并且收集的数据要做相应的分析、告警。
3、容器化是当前技术发展的大方向,但是一定要先掌握基础的应用服务,再做容器化。
二)、测试方向
1、测试一定要深入了解业务流程逻辑,并且要对数据库的所有信息要有一定的掌握。
2、在做性能测试的时候,可以收集生产环境的请求信息,根据实际信息放大压测出的结果最为接近评测生产环境的性能。
三)、工作方向
1、运维、测试、开发,在日常工作中要注意避免各种简单错误,要注意团队间信任度。
2、在推进各类新型技术或者有想法做一些变更时,一定要先想好影响范围,并且团队之间一定要多沟通,尽量避免沟通不畅导致的各种问题。
从分享中可以看出陈飞老师实战经验很丰富,想要和陈飞老师深度链接的人,请扫描如下二维码添加陈飞老师深入交流。