当前位置:网站首页 >  攻略

服务器运维数据留存实操指南:从采集到归档全链路配置

时间:2026年06月06日 10:50:31 来源:易频IT社区

一、核心留存数据定义

在开始配置前,必须明确需要留存哪些数据。以下四类是故障排查与性能分析的核心,必须全部覆盖。

1. 系统级指标数据

这些数据反映了服务器的整体健康状态。

  • CPU使用率:用户态、系统态、I/O等待、空闲百分比。
  • 内存使用:总内存、已用内存、缓存、交换分区使用情况。
  • 磁盘I/O:各分区的读写吞吐量、IOPS、使用率、inode使用数。
  • 网络流量:各网卡的流入/流出带宽、包量、错包/丢包数。
  • 系统负载:1分钟、5分钟、15分钟平均负载。

2. 应用服务日志

这是定位业务问题的直接依据。

  • 访问日志:记录所有请求的端点、状态码、响应时间、客户端IP。
  • 错误日志:应用抛出的异常、警告、崩溃堆栈信息。
  • 业务日志:关键业务流程记录,如订单创建、用户登录等。

3. 安全与审计日志

用于满足合规要求和安全事件追溯。

  • 用户登录日志:成功/失败的登录尝试、来源IP、时间、用户身份。
  • 权限变更日志:sudo命令执行、文件权限修改、用户增删。
  • 网络连接日志:异常的端口监听、外连行为。

4. 配置与状态快照

用于系统回滚和一致性比对。

  • 关键配置文件:如 /etc/nginx/nginx.conf, /etc/my.cnf 等。
  • 进程列表与端口监听:定期抓取的 `ps aux` 和 `netstat -tlnp` 结果。
  • 已安装软件包列表:如 `rpm -qa` 或 `dpkg -l` 的输出。

二、数据采集与集中化方案

我们将使用 Prometheus + Grafana + Loki 组合作为技术栈,实现指标和日志的采集、存储与可视化。

1. 部署 Prometheus 采集指标

在被监控服务器上安装 Node Exporter 来暴露系统指标。

下载并运行 Node Exporter:

 下载最新版本(请访问 https://prometheus.io/download/ 确认版本号)
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
解压
tar xvf node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64/
以后台服务方式启动
sudo ./node_exporter &

验证 Node Exporter 是否工作,访问 http://你的服务器IP:9100/metrics,应能看到大量以 `node_` 开头的指标。

接着,在监控服务器上安装和配置 Prometheus 来抓取这些数据。

 下载 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64/

编辑配置文件 `prometheus.yml`,添加你的目标服务器:

 在 scrape_configs: 部分添加以下配置
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['服务器1_IP:9100', '服务器2_IP:9100']  替换为你的实际IP和端口

启动 Prometheus:

sudo ./prometheus --config.file=prometheus.yml &

2. 部署 Loki 和 Promtail 采集日志

Loki 负责存储日志,Promtail 负责采集并发送给 Loki。

首先在监控服务器上安装 Loki。创建配置文件 `loki-config.yaml`:

auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /tmp/loki/boltdb-shipper-active
cache_location: /tmp/loki/boltdb-shipper-cache
shared_store: filesystem
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s

使用 Docker 运行 Loki(确保服务器已安装 Docker):

docker run -d --name loki -v $(pwd)/loki-config.yaml:/mnt/config/loki-config.yaml -p 3100:3100 grafana/loki:2.9.0 --config.file=/mnt/config/loki-config.yaml

每一台需要采集日志的服务器上安装 Promtail。创建配置文件 `promtail-config.yaml`:

server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://监控服务器IP:3100/loki/api/v1/push  替换为你的Loki服务器IP
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/log
- targets:
- localhost
labels:
job: nginx
__path__: /var/log/nginx/log  如果你的应用日志在其他路径,请修改此处

使用 Docker 运行 Promtail:

服务器运维数据留存实操指南:从采集到归档全链路配置

docker run -d --name promtail -v $(pwd)/promtail-config.yaml:/mnt/config/promtail-config.yaml -v /var/log:/var/log --link loki grafana/promtail:2.9.0 --config.file=/mnt/config/promtail-config.yaml

3. 部署 Grafana 进行可视化

在监控服务器上安装 Grafana:

 对于 Ubuntu/Debian
sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/oss/release/grafana_10.1.5_amd64.deb
sudo dpkg -i grafana_10.1.5_amd64.deb
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

访问 http://监控服务器IP:3000,默认用户名和密码为 admin/admin。首次登录会要求修改密码。

添加数据源: 1. 点击左侧齿轮图标进入 Configuration -> Data Sources。 2. 点击 Add data source。 3. 选择 Prometheus,在 URL 栏填写 `http://localhost:9090`(即Prometheus地址),点击 Save & Test。 4. 再次点击 Add data source,选择 Loki,在 URL 栏填写 `http://localhost:3100`,点击 Save & Test

三、配置自动化留存与告警

仅有采集不够,必须确保数据长期留存并在异常时及时告警。

1. 配置 Prometheus 数据长期存储

Prometheus 本地存储不适合长期数据。配置它远程写入到对象存储(如 MinIO)或远程端点。

编辑 `prometheus.yml`,添加远程写入配置:

remote_write:
- url: "http://你的远程存储网关地址/api/v1/write"
queue_config:
max_samples_per_send: 1000
capacity: 10000
max_shards: 200

如果你使用 Thanos 或 Cortex 等长期存储方案,其端点即为这里的 URL。

2. 配置 Loki 日志留存策略

编辑之前创建的 `loki-config.yaml`,修改以下部分以启用和设置留存周期:

 将原有的 limits_config 和 table_manager 部分替换或修改为:
limits_config:
retention_period: 720h  日志保留30天 (2430=720小时)
其他配置...
table_manager:
retention_deletes_enabled: true  启用自动删除
retention_period: 720h  与上面保持一致

重启 Loki 容器使配置生效:

docker restart loki

3. 配置关键告警规则

在 Prometheus 配置目录下创建 `alert_rules.yml` 文件:

groups:
- name: server_alerts
rules:
- alert: HighCpuUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))  100) > 85
for: 5m
labels:
severity: warning
annotations:
summary: "高CPU使用率 (实例 {{ $labels.instance }})"
description: "CPU使用率持续5分钟高于85%,当前值为 {{ $value }}%"
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes  100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "高内存使用率 (实例 {{ $labels.instance }})"
description: "内存使用率持续5分钟高于90%,当前值为 {{ $value }}%"
- alert: DiskWillFillIn4Hours
expr: predict_linear(node_filesystem_free_bytes{job="node"}[6h], 43600) < 0
for: 5m
labels:
severity: critical
annotations:
summary: "磁盘将在4小时内写满 (实例 {{ $labels.instance }}, 挂载点 {{ $labels.mountpoint }})"
description: "基于过去6小时的增长趋势,预测该磁盘将在4小时内写满。"

在 `prometheus.yml` 中引用此告警规则文件:

rule_files:
- "alert_rules.yml"

配置 Alertmanager(需单独安装)来接收这些告警并通过邮件、钉钉、企业微信等渠道发送。这里以邮件为例,创建 `alertmanager.yml`:

global:
smtp_smarthost: 'smtp.你的邮箱服务商.com:587'  如 smtp.qq.com:587
smtp_from: '你的发件邮箱@xxx.com'
smtp_auth_username: '你的发件邮箱@xxx.com'
smtp_auth_password: '你的邮箱授权码'  注意不是登录密码,是SMTP授权码
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: '接收告警的邮箱@xxx.com'
send_resolved: true  问题恢复时也发送邮件

启动 Alertmanager 并确保 Prometheus 配置中指向它。

四、关键配置与状态快照脚本

编写一个 Shell 脚本,定期收集配置和状态,并归档到指定目录。

创建脚本 `/opt/scripts/collect_snapshot.sh`:

!/bin/bash
定义备份目录和日期
BACKUP_DIR="/var/backups/server_snapshot"
DATE=$(date +%Y%m%d_%H%M%S)
SNAPSHOT_DIR="$BACKUP_DIR/snapshot_$DATE"
mkdir -p $SNAPSHOT_DIR
1. 收集关键配置文件
echo "收集配置文件中..."
cp -r /etc/nginx $SNAPSHOT_DIR/ 2>/dev/null || true
cp -r /etc/mysql $SNAPSHOT_DIR/ 2>/dev/null || true
cp /etc/hosts $SNAPSHOT_DIR/
cp /etc/resolv.conf $SNAPSHOT_DIR/
cp /etc/fstab $SNAPSHOT_DIR/
根据你的服务添加更多配置文件
2. 收集系统状态信息
echo "收集系统状态中..."
ps aux > $SNAPSHOT_DIR/ps_aux.txt
ss -tlnp > $SNAPSHOT_DIR/ss_tlnp.txt
df -h > $SNAPSHOT_DIR/df_h.txt
free -h > $SNAPSHOT_DIR/free_h.txt
systemctl list-units --type=service --state=running > $SNAPSHOT_DIR/running_services.txt
3. 收集软件包列表
echo "收集软件包列表中..."
if [ -f /etc/redhat-release ]; then
rpm -qa > $SNAPSHOT_DIR/rpm_qa.txt
elif [ -f /etc/debian_version ]; then
dpkg -l > $SNAPSHOT_DIR/dpkg_l.txt
fi
4. 打包并清理旧备份(保留最近30天)
echo "打包快照..."
cd $BACKUP_DIR
tar -czf snapshot_$DATE.tar.gz snapshot_$DATE/
rm -rf $SNAPSHOT_DIR
删除30天前的备份
find $BACKUP_DIR -name "snapshot_.tar.gz" -mtime +30 -delete
echo "快照收集完成: $BACKUP_DIR/snapshot_$DATE.tar.gz"

给脚本添加执行权限并设置每日凌晨3点自动执行:

chmod +x /opt/scripts/collect_snapshot.sh
编辑crontab
(crontab -l 2>/dev/null; echo "0 3    /opt/scripts/collect_snapshot.sh") | crontab -

五、最终检查清单

部署完成后,请逐项核对:

  • 指标采集:访问 Grafana,导入一个 Node Exporter 仪表盘(ID:1860),检查所有服务器指标是否正常显示,且无数据断点。
  • 日志采集:在 Grafana Explore 页面,数据源选择 Loki,在 Label filter 中选择 `job` -> `varlogs`,点击 `Show logs`,应能看到 `/var/log/` 下的最新日志内容。
  • 告警通道:手动触发一个告警(例如,使用 `stress` 命令临时拉高CPU),检查是否能在5分钟后收到配置的告警邮件。
  • 快照脚本:手动执行一次 `/opt/scripts/collect_snapshot.sh`,检查 `/var/backups/server_snapshot/` 目录下是否生成一个包含配置和状态文件的 `.tar.gz` 包,并可以正常解压查看。
  • 存储空间:检查监控服务器上 Prometheus 和 Loki 的数据目录(默认为 `/tmp` 相关路径,生产环境应挂载到大容量磁盘),确保有充足空间。

至此,一个包含指标、日志、配置快照的完整服务器运维数据留存体系已部署完毕。所有组件均采用开源方案,配置细节完整,可直接复制使用。后续只需根据业务增长,按此架构水平扩展监控节点即可。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图