运维工程师每天都在做什么
作为一名在大连工作的Linux运维工程师我的日常工作大概包括:监控系统告警处理服务器异常、部署和更新应用程序、排查性能瓶颈和安全事件、编写和维护自动化脚本、参与系统架构设计评审、值夜班(是的运维需要7×24小时on-call)。听起来很杂但其实有章可循。这篇文章想把最基本的运维知识体系梳理出来供入行不久的朋友参考。
必须掌握的Linux命令
不管你用什么管理面板(宝塔/军哥lnmp等)底层都离不开这些命令:文件操作(ls -lah查看文件详情/du -sh *查看目录大小/find / -name "*.log" -mtime +7查找旧文件/tar czf backup.tar.gz压缩打包)、进程管理(ps aux | grep nginx查看进程/top实时监控资源占用/kill -9强制结束僵尸进程/htop增强版top推荐安装)、网络诊断(netstat -tunlp查看端口监听/ss -ant替代netstamp/curl -I https://example.com测试HTTP响应/dig/traceroute排查DNS和网络路由问题)、磁盘管理(df -h查看磁盘使用率/iotop监控IO负载/lsblk查看分区挂载情况)、权限管理(chmod/chown修改权限和属主/sudo提权操作/visudo编辑sudoers文件)、文本处理(grep/sed/awk三大神器必须熟练掌握——grep过滤文本sed流式编辑awk文本分析统计。这三个命令能解决80%的日志分析需求)。
强烈建议把常用的命令写成alias或者shell函数保存在~/.bashrc中提高效率。
系统安全加固 checklist
一台新服务器拿到手后第一件事就是安全加固。以下是我们的标准 checklist :账号安全(禁用root远程登录创建普通用户并赋予sudo权限/修改SSH默认端口(虽然安全性有限但能挡住大部分扫描bot)/设置强密码或更好的方式——SSH密钥登录禁用密码认证)、防火墙(iptables/firewalld/ufw三选一配置规则:只开放必要的端口(22/80/443/8080等)其余全部拒绝。切记:修改SSH端口后要先放行新端口再断开旧连接否则把自己锁在外面了)、系统更新(yum update/apt upgrade定期更新系统补丁。建议配置自动安全更新:yum-cron/apt unattended-upgrades)、 fail2ban (安装fail2ban自动封禁暴力破解SSH密码的IP地址——这是防入侵的最有效低成本手段之一)、日志审计(配置/var/log的轮转logrotate防止日志撑满磁盘/定期审查auth.log/secure等安全日志发现可疑登录尝试)、多余服务关闭(systemctl list-unit-files查看所有服务禁用不需要的服务systemctl disable xxx减少攻击面)。
做完以上几步你的服务器安全等级就已经超过了互联网上80%的服务器。
日志分析与故障排查
出了问题怎么查?答案是看日志。关键日志文件的位置:Nginx/Apache(/var/log/nginx/access.log 访问日志/error.log 错误日志)、应用日志(通常在应用的logs目录下或通过systemctl journalctl -u appname查看)、系统日志(/var/log/messages 或 journalctl 查看系统级别的消息和错误)、认证日志(/var/log/secure 或 auth.log 查看登录成功/失败的记录)、定时任务日志(/var/log/cron 查看crontab执行记录)。
排查思路:先看时间点(什么时候开始出问题的?→ 对应时间段内的日志有什么异常?)→ 再看错误信息(error/fail/timeout/exception等关键词grep一下)→ 分析根因(是代码bug?资源耗尽?外部依赖故障?网络问题?)→ 制定修复方案(紧急恢复→根本修复→预防复发)。
推荐工具:lnav(日志文件的可视化浏览器支持高亮过滤和搜索)、goaccess(Web格式的访问日志实时分析工具生成漂亮的报表)。
自动化运维工具入门
当你管理的服务器超过3台的时候手动逐台操作就变得不现实了。这时候就需要自动化运维工具:Shell脚本(最基础的自动化——把重复的操作写成脚本。bash足够用了如果想更强大可以学Python)、Ansible(agentless的配置管理工具使用YAML格式描述期望的状态。学习成本低效果显著——强烈推荐作为第一个学习的自动化工具。典型用法:批量执行命令/批量部署应用/批量修改配置)、Docker(容器化技术——把应用及其依赖打包为一个标准化镜像在任何环境下都能一致运行。"在我的机器上能跑"这种借口在Docker面前不复存在)、监控告警(Zabbix/Prometheus + Grafana——前者传统后者现代化。Prometheus + Grafana是目前最流行的开源监控方案界面漂亮功能强大)。
学习路径建议:先精通Shell脚本→ 再学Ansible做配置管理→ 然后学Docker做应用容器化→ 最后学Kubernetes做容器编排(如果需要的话)。一步一步来不要贪多。
运维的好习惯
最后分享几个让运维生涯更愉快的好习惯:操作前备份(修改任何配置文件前先cp一份bak文件——关键时刻救你命)、变更要有记录(每次操作写在运维日志里——什么时候做了什么为什么要做结果如何。出问题时这就是最好的复盘资料)、不要在凌晨操作(除非紧急变更否则尽量在工作时间操作——凌晨人的判断力下降容易出错而且出了问题找不到人帮忙)、文档要及时更新(系统架构变了文档也要跟着变——过时的文档比没有文档更危险因为它会给你错误的指引)、保持学习(运维技术迭代很快Kubernetes/eBPF/Service Mesh等新技术层出不穷每月抽出时间学习新东西才能不被淘汰)。
运维工作辛苦但也有独特的成就感——当你深夜排查出一个诡异bug让系统恢复正常运行的那一刻一切辛苦都值得了。