动手之前先画一张地图
目标
面对首次接触的客户系统,在进行任何操作之前先绘制地图。 明确需要请求什么、调查范围到哪里、哪些组件彼此相连、什么时候安全, 并首先写下回滚方法。
环境
一套客户系统位于 /opt/data/site。对你来说这是新系统,但对客户而言它已运行 10 年,
期间积累了许多从未记录的依赖关系。创建副本后,在该副本上工作。
cp -r /opt/data/site /root/site
cd /root/site
ls -R | head -40
你收到的只有这些。没有架构图,也没有 Wiki。
要创建的文件
inventory.txt 무엇이 있는지 + 첫날 요청할 것
retention.txt 로그 보존 기간과 그것이 조사에 뜻하는 것
upstream.txt 이 서비스를 부르는 쪽
downstream.txt 이 서비스가 부르는 쪽
shared.txt 구성도에 없는 공유 상태
timing.txt 언제가 안전하지 않은가
plan.md 변경 계획 — 첫 줄이 되돌리는 방법
rollback.sh 실제로 되돌리는 스크립트
snapshot.sh 재시작 전에 상태를 남기는 스크립트
评分方式
第 7 步和第 8 步中,评分程序会直接运行你的脚本。
rollback.sh 채점기가 설정을 일부러 바꾼 뒤 돌려서, 원본으로 돌아오는지 봅니다
snapshot.sh 프로세스·메모리·열린 파일·최근 로그 네 가지가 시각과 함께 나오는지 봅니다
只说不做的脚本无法通过。而且无论发生什么情况,评分程序都会将你的配置恢复原状。
步骤
- 记录现有内容,并列出第一天应同时提出的请求。 审批体系大多是串行的,因此第一天全部提交,才能并行推进。
- 找出日志的保留期限。该值决定调查范围。
- 根据访问日志的源 IP 找出所有上游,并统计各自的请求数量。
- 从配置中找出下游,并写明更改哪些内容时会给下游带来风险。
- 比较两个配置文件,找出共享状态。
- 从 crontab 中找出批处理窗口,确定安全时段。
plan.md和rollback.sh——变更计划的第一行不是变更内容, 而是回滚方法。还要写明回滚所需时间和观察窗口。snapshot.sh——在重启前保留状态。
参考
第 8 步的原因是本练习中最容易被忘记的部分。重启在消除症状的同时, 也会一并抹去证据。 即使必须重启,只要事先留下快照, 这一个文件日后就能构成报告的一半。
现有什么,需要请求什么
记录现有内容,并列出第一天应同时提出的请求。 审批体系大多是串行的,因此第一天全部提交,才能并行推进。
先查看有多少个配置文件。然后列出第一天要提出的请求——审批体系大多是串行的,只有 VPN 完成后才能创建账号,账号创建后才能授予权限。第一天全部同时提交,才能并行推进。
保留期限决定调查范围
找出日志的保留期限。该值决定调查范围。
该信息写在 etc/logrotate.conf 中。还要确认它是否与轮转文件的数量一致。如果收到超出该期限的问题反馈,就无法通过日志进行确认。
谁在调用该服务
根据访问日志的源 IP 找出所有上游,并统计各自的请求数量。
统计访问日志中的源 IP。不能只找到一个就结束——当该服务停止时,所有同时停止的系统都属于影响范围。
该服务在调用什么
从配置中找出下游,并写明更改哪些内容时会给下游带来风险。
查看配置中的 downstream。还要写明更改哪些内容时会给下游带来风险——延长超时时间时,我们认为给出了余量,但下游的连接会被占用更久。
架构图中没有的共享状态
比较两个配置文件,找出共享状态。
共有两个配置文件。查看是否存在指向同一对象的行。共享状态通常不会画在架构图中,但事故往往发生在这里。
什么时候不安全
从 crontab 中找出批处理窗口,确定安全时段。
查看 crontab,确认日终结算、夜间报告和月度结算各自在什么时候运行。即使技术上安全,时机错误也会造成事故。
首先写回滚方案
plan.md 和 rollback.sh——变更计划的第一行不是变更内容,
而是回滚方法。还要写明回滚所需时间和观察窗口。
变更计划的第一行必须是回滚方法。还要写明回滚所需时间和观察窗口(观察什么、观察多久)。评分程序会故意修改配置,再运行你的 rollback.sh,确认能否恢复原状。
在重启前留下记录
snapshot.sh——在重启前保留状态。
重启在消除症状的同时也会抹去证据。请将进程、内存、打开的文件和近期日志这四项内容连同时间一起保存。这个文件日后会构成报告的一半。