1. 运维工程师的成长之路
运维这个岗位,说简单也简单,说复杂也复杂。简单在于入门门槛不高,复杂在于需要掌握的知识体系庞大且更新迭代快。我从业八年,从最初的服务器重启小工到现在负责整个基础设施架构,踩过的坑比解决的问题还多。这篇笔记记录了我这些年积累的实战经验,希望能给刚入行的朋友一些参考。
运维工作的核心价值在于保障业务稳定运行。听起来简单,但要做到7×24小时无故障,需要掌握服务器管理、网络配置、监控告警、自动化部署等一系列技能。更重要的是培养系统性思维——任何一个看似简单的故障背后,都可能隐藏着复杂的连锁反应。
2. 基础环境搭建与配置
2.1 Linux系统精要
运维的根基是Linux系统。不要满足于会几个基本命令,要深入理解系统运行机制。我建议从以下几个方面重点突破:
-
文件系统与权限管理:理解inode结构、硬链接与软链接区别。掌握chmod的数值表示法(比如755代表什么),以及特殊权限位(SUID/SGID/sticky bit)的应用场景。
-
进程管理与服务控制:熟练使用systemd管理服务,理解服务单元的依赖关系。一个实用技巧:
bash复制# 查看服务启动耗时
systemd-analyze blame
- 日志分析:掌握journalctl的过滤技巧,比如:
bash复制journalctl -u nginx --since "2023-08-01" --until "2023-08-02"
注意:/var/log目录下的日志文件会轮转,分析时要注意时间范围。建议配置集中式日志收集系统如ELK。
2.2 网络配置实战
网络问题是运维日常中最常见的故障点。必须掌握:
- TCP/IP协议栈:理解三次握手、四次挥手过程,会用tcpdump抓包分析
- 防火墙配置:iptables/nftables规则编写,特别注意SNAT/DNAT的区别
- 网络诊断工具:mtr比traceroute更实用,ss比netstat性能更好
分享一个排查网络延迟的实战案例:
bash复制# 使用mtr诊断到目标主机的网络路径
mtr -n --report www.example.com
# 用tc模拟网络延迟(测试服务容错能力)
tc qdisc add dev eth0 root netem delay 100ms
3. 监控与告警体系建设
3.1 监控指标选择
监控不是越多越好,关键指标要抓准。我总结的监控黄金指标:
- 资源类:CPU负载(注意不是使用率)、内存使用(包括swap)、磁盘IOPS、网络带宽
- 服务类:HTTP状态码分布、接口响应时间、数据库查询耗时
- 业务类:订单创建量、支付成功率、活跃用户数
推荐使用Prometheus+Granfana组合,配置示例:
yaml复制# prometheus.yml 片段
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['192.168.1.10:9100']
3.2 告警策略优化
告警风暴是运维人员的噩梦。遵循这些原则:
- 分级告警:设置P0-P3不同级别,P0必须立即处理,P3可以延迟
- 聚合告警:相同服务的多个实例告警合并通知
- 静默策略:维护窗口期自动静默预期中的告警
Alertmanager配置示例:
yaml复制route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
4. 自动化运维实践
4.1 配置管理工具
手工操作服务器是运维大忌。推荐使用Ansible,它的优势:
- 无Agent架构,通过SSH工作
- YAML语法易读易写
- 模块丰富,社区支持好
一个安装Nginx的playbook示例:
yaml复制- hosts: webservers
tasks:
- name: Install nginx
apt:
name: nginx
state: latest
- name: Start nginx
service:
name: nginx
state: started
4.2 CI/CD流水线
现代运维必须掌握持续集成部署。GitLab CI的典型配置:
yaml复制stages:
- test
- build
- deploy
test_job:
stage: test
script:
- npm test
deploy_prod:
stage: deploy
only:
- master
script:
- ansible-playbook deploy.yml
重要提示:生产环境部署一定要有审批流程,不能完全自动化。
5. 故障排查方法论
5.1 系统级故障
遇到服务器卡顿,按这个顺序排查:
- 使用top查看整体负载(load average三个值分别代表1/5/15分钟平均负载)
- free -h看内存使用情况
- iostat -x 1查看磁盘IO
- dmesg | tail检查内核日志
5.2 网络故障
网络不通时的检查清单:
- ping目标IP(检查基础连通性)
- telnet IP port(检查具体端口)
- traceroute看路由路径
- 检查本地防火墙规则
- 确认目标服务监听正确IP(netstat -tunlp)
6. 安全加固指南
6.1 SSH安全
默认SSH配置很不安全,必须修改:
bash复制# /etc/ssh/sshd_config 关键配置
PermitRootLogin no
PasswordAuthentication no
AllowUsers yourname
Port 2222 # 修改默认端口
6.2 系统加固
- 定期更新系统补丁
- 安装fail2ban防暴力破解
- 配置iptables默认DROP策略
- 使用auditd监控关键文件变更
7. 性能调优技巧
7.1 Linux内核参数
/etc/sysctl.conf关键优化:
bash复制# 提高TCP连接复用
net.ipv4.tcp_tw_reuse = 1
# 增大文件描述符限制
fs.file-max = 65535
# 减少swap使用倾向
vm.swappiness = 10
7.2 Nginx优化
nginx复制worker_processes auto; # 自动匹配CPU核心数
events {
worker_connections 10240; # 每个worker最大连接数
multi_accept on;
}
8. 运维工程师的自我修养
技术之外,这些软技能同样重要:
- 文档习惯:所有操作都要记录,故障要有复盘报告
- 沟通能力:能用非技术语言向业务部门解释技术问题
- 时间管理:区分优先级,重要但不紧急的事最容易忽视
- 持续学习:每周至少花5小时学习新技术
我个人的学习路径:
- 第一阶段(0-1年):掌握Linux基础和常用服务搭建
- 第二阶段(1-3年):深入理解网络协议和性能调优
- 第三阶段(3-5年):构建自动化运维体系
- 第四阶段(5年+):参与架构设计,关注业务连续性
最后分享一个血泪教训:永远要有回滚方案。无论变更看起来多么简单,都要预先想好出问题怎么快速恢复。我曾经因为一个简单的配置文件修改导致生产环境宕机两小时,这个教训终身难忘。