当前位置:首页 > Linux > 正文

如何监控linux服务

监控 Linux服务可用 systemctl status [服务名]查状态, journalctl -u [服务名]看日志,配合 top/ htop观性能,或用Nagios/Zabbix等工具实现

监控Linux服务是保障系统稳定性和可靠性的核心任务之一,以下从核心监控维度、常用工具链、实战操作流程、典型场景解决方案四个层面展开详细说明,并提供可落地的操作示例与配置建议。


核心监控维度拆解

监控类型 关键指标 适用场景
进程状态 PID存在性、运行状态(Running/Sleeping)、重启次数 基础存活性验证
资源占用 CPU使用率、内存消耗量、磁盘I/O吞吐量、网络带宽 性能瓶颈定位
日志输出 错误日志频率、异常堆栈跟踪、关键业务日志缺失 故障根因分析
端口服务 指定端口监听状态、TCP连接数、请求响应延迟 Web/API服务可用性验证
依赖关系 关联服务的启动顺序、共享资源竞争(如数据库锁表) 复杂系统级联故障排查
自动恢复 崩溃后自动拉起策略、最大重试次数、故障转移机制 高可用架构设计


原生命令行工具集详解

systemctl体系

# 实时查看服务状态及最近日志片段 systemctl status nginx --no-pager --lines=20 # 显示完整启动历史(含失败记录) journalctl -u nginx.service --since "5 minutes ago" # 设置开机启动并启用失败自动重启 systemctl enable mysqld && systemctl restart mysqld

注意:systemctl仅能反映Service Unit层面的表象状态,无法捕获子进程异常退出等深层问题。

进程级监控三板斧

命令 功能描述 典型用法示例
pgrep -l 'nginx' 精确匹配进程名+显示PID 确认主/工作进程均正常运行
lsof -i :80 查看指定端口的实际绑定进程 排查Nginx未监听端口的特殊场景
strace -p <PID> 跟踪系统调用轨迹 诊断文件句柄泄漏导致的OOM Killer

资源监控组合技

# 动态刷新资源占用TOP5进程(含线程) watch -n 1 'ps -eo %cpu,%mem,cmd --sort=-%cpu | head -n 6' # 统计指定进程的历史资源峰值 awk '{print $1}' <(ps -o %cpu,comm= -C redis-server --no-headers) | sort -nr | head -1

进阶技巧:结合/proc文件系统可直接读取内核数据:

如何监控linux服务 第1张

专业监控工具选型指南

Prometheus+Grafana方案(云原生首选)

组件 作用说明 配置要点
Node Exporter 采集系统级指标(CPU/内存/磁盘) 修改/etc/node_exporter/node.yaml
cAdvisor 容器资源监控 对接Docker API
Blackbox Exporter ICMP/HTTP/TCP探针 定义自定义检测规则
Alertmanager 告警路由分发 按严重程度分级通知

部署示例

# prometheus.yml片段 static_configs: targets: ['node1:9100','node2:9100'] labels: role: node

Zabbix企业级方案

特色功能 技术实现 适用场景
自动发现 基于SNMP/Agent主动注册资产 大规模物理机群管理
模板继承 预置Linux通用模板+自定义项覆盖 快速标准化监控项
触发器函数 {ITEM_DATA}>{THRESHOLD} → eventid生成 复杂逻辑判断(如连续3次超限)

告警配置示例

如何监控linux服务 第2张

Netdata实时监控(零配置优势)

# CentOS安装命令 bash <(curl -Ss https://my-netdata.io/kickstart.sh) --non-interactive

核心优势:开箱即用的火焰图可视化、插件市场支持200+种服务集成、端到端加密传输。


关键场景应对策略

场景1:Java应用频繁GC停顿

诊断路径

  1. 使用jstat -gcutil <PID> 1000观察Full GC频率
  2. 通过jmap -heap <PID>导出堆转储分析对象引用链
  3. 调整JVM参数:-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75

监控强化

如何监控linux服务 第3张

# Prometheus JMX Exporter配置 rules: pattern: '<java_pid>' jmx_url: 'service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi'

场景2:MySQL慢查询堆积

优化步骤

  1. 开启慢查询日志:set global slow_query_log=1;
  2. 使用pt-query-digest slow.log生成TOP SQL排行
  3. 添加复合索引:ALTER TABLE orders ADD INDEX idx_user_date (user_id, create_time);

监控看板必备指标

  • InnoDB缓冲池命中率(Show Global Status Like 'Innodb_buffer_pool_reads%')
  • Lock等待时长(SHOW PROCESSLIST;)
  • Binlog写入延迟(Seconds_Behind_Master)


自动化运维增强实践

Ansible Playbook示例

name: Ensure Nginx is running and monitored hosts: webservers tasks: name: Start Nginx service service: name: nginx state: started enabled: yes name: Deploy Prometheus exporter copy: src: nginx-prometheus-exporter.tar.gz dest: /opt/ remote_src: no name: Add systemd unit file template: src: exporter.service.j2 dest: /etc/systemd/system/nginx-exporter.service notify: Reload daemon

shell脚本监控模板

#!/bin/bash SERVICE="redis-server" MAX_RETRIES=3 COUNTER=0 while true; do if ! systemctl is-active "$SERVICE" >/dev/null 2>&1; then ((COUNTER++)) echo "$(date) $SERVICE down! Attempting restart..." >> /var/log/service_monitor.log systemctl restart "$SERVICE" || { echo "Restart failed!"; exit 1; } sleep 5 else COUNTER=0 fi [ $COUNTER -ge $MAX_RETRIES ] && { echo "Max retries reached!"; exit 1; } sleep 60 done


相关问答FAQs

Q1: 为什么有时systemctl显示服务正在运行,但实际功能不可用?

A: 这是典型的”僵尸进程”现象,可能原因包括:①主进程已崩溃但子进程仍在运行;②服务挂起在初始化阶段未完成;③配置文件变更未生效,建议执行systemctl reset-state <service>强制重置状态,并检查journalctl -xe获取完整启动日志。

Q2: 如何在不安装额外软件的情况下实现简单的服务健康检查?

A: 可采用以下组合方案:①nc -zv <port>检测端口可达性;②curl --silent --head http://localhost/health验证HTTP端点;③pgrep -c <process>统计进程数量,将这些命令整合到crontab定时任务中,配合邮件通知即可构建简易

0