本文档风哥主要介绍Linux系统监控与日志审计体系的搭建方法,包括监控系统的部署、日志集中管理、审计系统配置等内容,学习交流加群风哥微信: itpux-com风哥教程参考Linux官方文档System administration、Security等章节,适合系统管理员和DevOps工程师在生产环境中使用。
Part01-基础概念与理论知识
1.1 系统监控的概念与重要性
系统监控是指对计算机系统的运行状态、性能指标、资源使用情况等进行实时监测和分析的过程。通过系统监控,管理员可以及时发现系统异常、性能瓶颈和潜在问题,确保系统的稳定运行。
- 及时发现系统异常和故障
- 预防性能瓶颈和系统崩溃
- 优化系统资源使用
- 提高系统可靠性和可用性
- 为容量规划提供数据支持
1.2 日志审计的概念与作用
日志审计是指对系统、应用程序和用户操作的日志进行收集、分析和存储的过程。通过日志审计,管理员可以追踪系统事件、安全事件和用户行为,为故障排查、安全分析和合规审计提供依据。
1.3 常用监控与日志工具
常用的系统监控与日志工具包括:
- 监控工具:Prometheus、Grafana、Zabbix、Nagios
- 日志管理工具:ELK Stack(Elasticsearch、Logstash、Kibana)、Graylog
- 审计工具:Auditd、Rsyslog
- 系统自带工具:top、htop、vmstat、iostat、sar
风哥提示:
Part02-生产环境规划与建议
2.1 监控体系架构规划
生产环境监控体系架构规划要点:
from PG视频:www.itpux.com
– 数据采集层:通过exporter采集系统、应用和服务的指标
– 数据存储层:使用时序数据库存储监控数据
– 数据可视化层:通过Grafana等工具展示监控数据
– 告警层:基于预设阈值触发告警
# 监控范围规划
– 基础设施监控:服务器CPU、内存、磁盘、网络
– 应用监控:应用性能、响应时间、错误率
– 服务监控:服务可用性、接口调用情况
– 容器监控:容器状态、资源使用
– 网络监控:网络连通性、延迟、丢包率
# 监控指标规划
– 系统指标:CPU使用率、内存使用率、磁盘使用率、网络流量
– 应用指标:请求量、响应时间、错误率、并发数
– 服务指标:服务状态、调用次数、失败次数
# 监控部署模式
– 集中式:所有监控数据集中存储和管理
– 分布式:分区域部署监控节点,统一汇总
– 混合式:结合集中式和分布式优点
2.2 日志管理策略规划
日志管理策略规划要点:
– 集中收集:所有服务器日志集中到日志服务器
– 分类收集:按应用、服务类型分类收集
– 实时收集:实时传输日志数据
# 日志存储策略
– 存储期限:根据合规要求和业务需求设置
– 存储方式:热存储(快速访问)和冷存储(归档)
– 存储介质:SSD(热数据)和HDD(冷数据)
# 日志分析策略
– 实时分析:实时监控日志中的异常
– 离线分析:定期对日志进行深度分析
– 趋势分析:分析日志数据的趋势变化
# 日志安全策略
– 日志加密:传输和存储加密
– 访问控制:限制日志访问权限
– 完整性保护:防止日志被篡改
2.3 告警策略规划
告警策略规划要点:
- 告警级别:紧急、严重、警告、信息
- 告警触发条件:基于阈值、趋势、模式
- 告警通知方式:邮件、短信、微信、电话
- 告警处理流程:告警确认、故障定位、故障处理、告警恢复
- 告警抑制:避免告警风暴和重复告警
Part03-生产环境项目实施方案
3.1 Prometheus监控系统部署
3.1.1 安装Prometheus
$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
$ cd prometheus-2.45.0.linux-amd64
# 查看版本
$ ./prometheus –version
prometheus, version 2.45.0 (branch: HEAD, revision: xxxxxxx)
build user: root@xxxx
build date: 20260401-xx:xx:xx
go version: go1.20.5
platform: linux/amd64
# 配置Prometheus
$ vim prometheus.yml
# 启动Prometheus
$ ./prometheus –config.file=prometheus.yml &
# 验证启动状态
$ curl http://localhost:9090
# 配置系统服务
$ sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
ExecStart=/path/to/prometheus –config.file=/path/to/prometheus.yml
Restart=always
[Install]
WantedBy=multi-user.target
# 启动服务
$ sudo systemctl daemon-reload
$ sudo systemctl start prometheus
$ sudo systemctl enable prometheus
# 查看服务状态
$ sudo systemctl status prometheus
● prometheus.service – Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-04-05 10:00:00 CST; 5min ago
Main PID: 12345 (prometheus)
Tasks: 10
Memory: 50.0M
CPU: 1.2%
CGroup: /system.slice/prometheus.service
└─12345 /path/to/prometheus –config.file=/path/to/prometheus.yml
3.1.2 安装Node Exporter
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.6.更多视频教程www.fgedu.net.cn0/node_exporter-1.6.0.linux-amd64.tar.gz
# 解压
$ tar -xzf node_exporter-1.6.0.linux-amd64.tar.gz
$ cd node_exporter-1.6.0.linux-amd64
# 查看版本
$ ./node_exporter –version
node_exporter, version 1.6.0 (branch: HEAD, revision: xxxxxxx)
build user: root@xxxx
build date: 20260401-xx:xx:xx
go version: go1.20.5
platform: linux/amd64
# 配置系统服务
$ sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
ExecStart=/path/to/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
# 启动服务
$ sudo systemctl daemon-reload
$ sudo systemctl start node_exporter
$ sudo systemctl enable node_exporter
# 查看服务状态
$ sudo systemctl status node_exporter
● node_exporter.service – Node Exporter
Loade更多学习教程公众号风哥教程itpux_comd: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-04-05 10:05:00 CST; 3min ago
Main PID: 12346 (node_exporter)
Tasks: 8
Memory: 10.0M
CPU: 0.5%
CGroup: /system.slice/node_exporter.service
└─12346 /path/to/node_exporter
# 验证Node Exporter
$ curl http://localhost:9100/metrics
# 在Prometheus中添加Node Exporter目标
$ vim prometheus.yml
scrape_configs:
– job_name: ‘node’
static_configs:
– targets: [‘localhost:9100’]
# 重启Prometheus
$ sudo systemctl restart prometheus
3.2 Grafana可视化配置
3.2.1 安装Grafana
$ sudo cat > /etc/yum.repos.d/grafana.repo << EOF [grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key EOF # 安装Grafana $ sudo dnf install grafana -y # 启动Grafana服务 $ sudo systemctl start grafana-server $ sudo systemctl enable grafana-server # 查看服务状态 $ sudo systemctl status grafana-server ● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2026-04-05 10:10:00 CST; 2min ago Main PID: 12347 (grafana-server) Tasks: 15 Memory: 100.0M CPU: 2.0% CGroup: /system.slice/grafana-server.service └─12347 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm # 访问Grafana # 浏览器打开 http://localhost:3000 # 默认用户名:admin,默认密码:admin
3.2.2 配置Prometheus数据源
1. 登录Grafana
2. 点击左侧菜单的”Configuration” -> “Data sources”
3. 点击”Add data source”
4. 选择”Prometheus”
5. 在”URL”字段中输入Prometheus的地址:http://localhost:9090
6. 点击”Save & Test”
7. 看到”Data source is working”表示配置成功
3.2.3 导入监控面板
1. 点击左侧菜单的”Dashboards” -> “Import”
2. 在”Import via grafana.com”字段中输入面板ID:1860
3. 点击”Load”
4. 选择Prometheus数据源
5. 点击”Import”
6. 查看导入的面板,包含CPU、内存、磁盘、网络等监控指标
3.3 Rsyslog日志集中管理
3.3.1 配置Rsyslog服务器
$ sudo dnf install rsyslog -y
# 配置Rsyslog服务器
$ sudo vim /etc/rsyslog.conf
# 启用UDP接收
module(load=”imudp”)
input(type=”imudp” port=”514″)
# 启用TCP接收
module(load=”imtcp”)
input(type=”imtcp” port=”514″)
# 配置日志存储
$template RemoteLogs, “/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log”
*.* ?RemoteLogs
# 重启Rsyslog服务
$ sudo systemctl restart rsyslog
$ sudo systemctl enable rsyslog
# 查看服务状态
$ sudo systemctl status rsyslog
● rsyslog.service – System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-04-05 10:15:00 CST; 1min ago
Main PID: 12348 (rsyslogd)
Tasks: 4
Memory: 5.0M
CPU: 0.3%
CGroup: /system.slice/rsyslog.service
└─12348 /usr/sbin/rsyslogd -n
# 开放防火墙端口
$ sudo firewall-cmd –add-port=514/udp –permanent
$ sudo firewall-cmd –add-port=514/tcp –permanent
$ sudo firewall-cmd –reload
3.3.2 配置Rsyslog客户端
$ sudo dnf install rsyslog -y
# 配置Rsyslog客户端
$ sudo vim /etc/rsyslog.conf
# 添加远程日志服务器
*.* @192.168.1.100:514
# 重启Rsyslog服务
$ sudo systemctl restart rsyslog
$ sudo systemctl enable rsyslog
# 测试日志发送
$ logger “Test log from client”
# 在服务器端查看日志
$ ls -la /var/log/remote/
$ cat /var/log/remote/client-hostname/logger.log
Apr 5 10:20:00 client-hostname root: Test log from client
3.4 Auditd审计系统配置
3.4.1 安装并配置Auditd
$ sudo dnf install audit -y
# 启动Auditd服务
$ sudo systemctl start auditd
$ sudo systemctl enable auditd
# 查看服务状态
$ sudo systemctl status auditd
● auditd.service – Security Auditing Service
Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-04-05 10:25:00 CST; 30s ago
Main PID: 12349 (auditd)
Tasks: 5
Memory: 2.0M
CPU: 0.1%
CGroup: /system.slice/auditd.service
└─12349 /sbin/auditd
# 配置Auditd规则
$ sudo vim /etc/audit/rules.d/audit.rules
# 监控重要文件
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
# 监控系统调用
-a always,exit -F arch=b64 -S execve -k command_execution
-a always,exit -F arch=b32 -S execve -k command_execution
# 监控登录行为
-w /var/log/lastlog -p wa -k login_logs
-w /var/run/utmp -p wa -k utmp
-w /var/log/wtmp -p wa -k wtmp
# 重启Auditd服务
$ sudo systemctl restart auditd
# 查看审计日志
$ sudo ausearch -k passwd_changes
# 实时监控审计事件
$ sudo aureport -au
风哥提示:
Part04-生产案例与实战讲解
4.1 服务器监控实战案例
4.1.1 配置服务器监控告警
$ vim /path/to/prometheus/rules/server_alerts.yml
groups:
– name: server_alerts
rules:
– alert: HighCPUUsage
expr: (100 – (avg by(instance) (irate(node_cpu_seconds_total{mode=”idle”}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: “High CPU Usage on {{ $labels.instance }}”
description: “CPU usage is above 80% for 5 minutes”
– alert: HighMemoryUsage
expr: (1 – (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: “High Memory Usage on {{ $labels.instance }}”
description: “Memory usage is above 85% for 5 minutes”
– alert: HighDiskUsage
expr: (1 – (node_filesystem_avail_bytes{mountpoint=”/”} / node_filesystem_size_bytes{mountpoint=”/”})) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: “High Disk Usage on {{ $labels.instance }}”
description: “Disk usage is above 90% for 5 minutes”
# 在prometheus.yml中引用告警规则
$ vim /path/to/prometheus/prometheus.yml
rule_files:
– “rules/server_alerts.yml”
# 重启Prometheus
$ sudo systemctl restart prometheus
# 在Grafana中配置告警通知
1. 点击左侧菜单的”Alerting” -> “Notification channels”
2. 点击”Add channel”
3. 配置通知方式(邮件、Slack等)
4. 点击”Save”
4.1.2 服务器监控面板配置
1. 点击左侧菜单的”Dashboards” -> “Import”
2. 输入面板ID:1860(Node Exporter Full)
3. 选择Prometheus数据源
4. 点击”Import”
5. 查看服务器监控面板,包含:
– CPU使用率和负载
– 内存使用情况
– 磁盘使用率和I/O
– 网络流量
– 系统运行时间
4.2 容器监控实战案例
4.2.1 安装cAdvisor
$ docker run \
–volume=/:/rootfs:ro \
–volume=/var/run:/var/run:ro \
–volume=/sys:/sys:ro \
–volume=/var/lib/docker/:/var/lib/docker:ro \
–publish=8080:8080 \
–detach=true \
–name=cadvisor \
gcr.io/cadvisor/cadvisor:v0.47.0
# 查看cAdvisor状态
$ docker ps | grep cadvisor
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx gcr.io/cadvisor/cadvisor:v0.47.0 “/usr/bin/cadvisor -logtostderr” 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp cadvisor
# 访问cAdvisor web界面
# 浏览器打开 http://localhost:8080
4.2.2 配置Prometheus监控容器
$ vim /path/to/prometheus/prometheus.yml
scrape_configs:
– job_name: ‘cadvisor’
static_configs:
– targets: [‘localhost:8080’]
# 重启Prometheus
$ sudo systemctl restart prometheus
# 导入容器监控面板
1. 点击左侧菜单的”Dashboards” -> “Import”
2. 输入面板ID:14282(cAdvisor Exporter)
3. 选择Prometheus数据源
4. 点击”Import”
5. 查看容器监控面板,包含:
– 容器CPU使用率
– 容器内存使用情况
– 容器网络流量
– 容器磁盘I/O
4.3 日志分析与故障排查案例
4.3.1 日志分析工具配置
# 安装Elasticsearch
$ sudo dnf install elasticsearch -y
$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
# 安装Logstash
$ sudo dnf install logstash -y
$ sudo systemctl start logstash
$ sudo systemctl enable logstash
# 安装Kibana
$ sudo dnf install kibana -y
$ sudo systemctl start kibana
$ sudo systemctl enable kibana
# 配置Logstash接收rsyslog日志
$ sudo vim /etc/logstash/conf.d/rsyslog.conf
input {
syslog {
port => 514
type => syslog
}
}
filter {
if [type] == “syslog” {
grok {
match => { “message” => “%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}” }
add_field => [ “received_at”, “%{@timestamp}” ]
add_field => [ “received_from”, “%{host}” ]
}
date {
match => [ “syslog_timestamp”, “MMM d HH:mm:ss”, “MMM dd HH:mm:ss” ]
}
}
}
output {
elasticsearch {
hosts => [“localhost:9200”]
index => “syslog-%{+YYYY.MM.dd}”
}
}
# 重启Logstash
$ sudo systemctl restart logstash
# 配置rsyslog发送日志到Logstash
$ sudo vim /etc/rsyslog.conf
*.* @192.168.1.100:514
# 重启rsyslog
$ sudo systemctl restart rsyslog
# 访问Kibana
# 浏览器打开 http://localhost:5601
# 创建索引模式:syslog-*
# 查看日志数据
4.3.2 故障排查实战
# 1. 通过Prometheus查看CPU使用率
# 访问Prometheus web界面,查询:
100 – (avg by(instance) (irate(node_cpu_seconds_total{mode=”idle”}[5m])) * 100
# 2. 通过Grafana查看详细CPU使用情况
# 打开服务器监控面板,查看CPU使用率图表
# 3. 登录服务器查看进程
$ top
top – 10:30:00 up 1 day, 2:30, 2 users, load average: 4.50, 3.80, 3.20
Tasks: 150 total, 1 running, 149 sleeping, 0 stopped, 0 zombie
%Cpu(s): 85.0 us, 10.0 sy, 0.0 ni, 5.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8192000 total, 1024000 free, 5120000 used, 2048000 buff/cache
KiB Swap: 4096000 total, 3072000 free, 1024000 used. 1536000 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 fgedu 20 0 2097152 1048576 16384 R 80.0 12.8 0:30.00 java
# 4. 查看进程详情
$ ps aux | grep java
fgedu 12345 80.0 12.8 2097152 1048576 ? R 10:29 0:30 java -jar application.jar
# 5. 查看应用日志
$ tail -f /var/log/application.log
2026-04-05 10:29:00 INFO Application started
2026-04-05 10:29:30 ERROR OutOfMemoryError: Java heap space
2026-04-05 10:30:00 ERROR GC overhead limit exceeded
# 6. 分析问题原因:Java应用内存不足,导致频繁GC,CPU使用率升高
# 7. 解决方案:增加Java堆内存
$ java -Xmx2g -Xms1g -jar application.jar
# 8. 验证解决方案
$ top
top – 10:35:00 up 1 day, 2:35, 2 users, load average: 1.20, 2.50, 3.00
Tasks: 150 total, 1 running, 149 sleeping, 0 stopped, 0 zombie
%Cpu(s): 10.0 us, 5.0 sy, 0.0 ni, 85.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8192000 total, 512000 free, 5632000 used, 2048000 buff/cache
KiB Swap: 4096000 total, 3072000 free, 1024000 used. 1024000 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 fgedu 20 0 2097152 1048576 16384 S 10.0 12.8 0:35.00 java
Part05-风哥经验总结与分享
5.1 系统监控最佳实践
系统监控最佳实践:
- 全面覆盖:监控所有关键系统和服务,包括基础设施、应用和网络
- 合理阈值:根据系统特点设置合理的告警阈值,避免过多的误告警
- 分层监控:建立从基础设施到应用的分层监控体系
- 自动化响应:对于常见问题实现自动化响应和处理
- 定期 review:定期 review 监控指标和告警策略,根据实际情况调整
- 容量规划:基于监控数据进行容量规划,确保系统资源充足
5.2 日志审计最佳实践
日志审计最佳实践:
- 集中管理:将所有服务器的日志集中管理,便于分析和查询
- 分类存储:按应用、服务类型分类存储日志,提高查询效率
- 合理保留:根据合规要求和业务需求设置日志保留期限
- 安全存储:确保日志存储安全,防止被篡改或删除
- 实时分析:实时分析日志,及时发现异常和安全事件
- 自动化处理:对于常见日志模式实现自动化处理和告警
5.3 常见问题排查技巧
常见问题排查技巧:
- 系统性能问题:使用top、vmstat、iostat等工具分析系统资源使用情况
- 网络问题:使用ping、traceroute、netstat等工具分析网络连通性和性能
- 应用问题:查看应用日志,使用strace、lsof等工具分析应用行为
- 存储问题:使用df、du、iostat等工具分析存储使用情况和I/O性能
- 安全问题:查看安全日志,使用auditd、fail2ban等工具分析安全事件
- 容器问题:使用docker logs、docker stats等工具分析容器状态和日志
风哥提示:
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
