档案监控中心的核心是实时采集、分析档案库的访问日志、系统状态与业务指标。我们采用轻量级的Prometheus + Grafana + Alertmanager技术栈,所有组件均通过Docker容器化部署,确保环境一致性。
准备一台Linux服务器(CentOS 7.6+或Ubuntu 18.04+),配置建议2核CPU、4GB内存、50GB硬盘。首先安装必要的基础软件:
```bash CentOS系统 sudo yum install -y docker wget git sudo systemctl start docker sudo systemctl enable docker Ubuntu系统 sudo apt-get update sudo apt-get install -y docker.io wget git sudo systemctl start docker sudo systemctl enable docker ```
在服务器上建立清晰的目录结构,便于后续配置管理:
```bash mkdir -p /opt/archive-monitor/{config,prometheus-data,grafana-data,alertmanager-data} cd /opt/archive-monitor ```
这个结构将分别存放配置文件、监控数据、可视化数据和告警配置。
Prometheus负责定时抓取各类监控指标,我们需要配置其抓取规则和数据存储。
创建/opt/archive-monitor/config/prometheus.yml文件,内容如下:
```yaml global: scrape_interval: 15s 每15秒抓取一次数据 evaluation_interval: 15s 每15秒评估一次告警规则 scrape_configs: 监控Prometheus自身 - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] labels: service: 'prometheus-monitor' 监控档案服务器系统指标(需在档案服务器安装node_exporter) - job_name: 'archive-server-node' static_configs: - targets: ['192.168.1.100:9100'] 替换为实际档案服务器IP labels: server_type: 'archive-server' location: 'data-center-a' 监控档案数据库(MySQL示例) - job_name: 'archive-mysql' static_configs: - targets: ['192.168.1.101:9104'] mysqld_exporter端口 labels: db_type: 'mysql' db_name: 'archive_main' 监控档案应用服务 - job_name: 'archive-application' static_configs: - targets: ['192.168.1.102:8080'] 应用暴露的metrics端口 labels: app_name: 'archive-service' version: 'v2.1' alerting: alertmanagers: - static_configs: - targets: ['alertmanager:9093'] rule_files: - "/etc/prometheus/rules/.yml" ```
注意:配置文件中的IP地址需要替换为实际服务器的地址。
使用Docker运行Prometheus服务:
```bash docker run -d \ --name=prometheus \ --restart=always \ -p 9090:9090 \ -v /opt/archive-monitor/config/prometheus.yml:/etc/prometheus/prometheus.yml \ -v /opt/archive-monitor/prometheus-data:/prometheus \ prom/prometheus:latest \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/prometheus \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.console.templates=/etc/prometheus/consoles ```
启动后访问http://服务器IP:9090验证服务是否正常。
定义具体的监控阈值,并配置告警通知渠道。
创建/opt/archive-monitor/config/rules/archive-rules.yml文件:
```yaml groups: - name: archive-server-alerts rules: 服务器CPU使用率超过80%持续5分钟 - alert: HighCpuUsage expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) 100) > 80 for: 5m labels: severity: warning annotations: summary: "档案服务器CPU使用率过高" description: "实例 {{ $labels.instance }} CPU使用率已达 {{ $value }}%" 服务器内存使用率超过85% - alert: HighMemoryUsage expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) 100 > 85 for: 3m labels: severity: warning annotations: summary: "档案服务器内存使用率过高" description: "实例 {{ $labels.instance }} 内存使用率 {{ $value }}%" 档案磁盘使用率超过90% - alert: ArchiveDiskFull expr: 100 - (node_filesystem_avail_bytes{mountpoint="/archive"} / node_filesystem_size_bytes{mountpoint="/archive"} 100) > 90 for: 2m labels: severity: critical annotations: summary: "档案存储磁盘即将写满" description: "挂载点 /archive 使用率 {{ $value }}%" 档案服务HTTP错误率超过5% - alert: HighHttpErrorRate expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) 100 > 5 for: 2m labels: severity: warning annotations: summary: "档案服务HTTP错误率升高" description: "当前错误率 {{ $value }}%" - name: archive-db-alerts rules: 数据库连接数超过阈值 - alert: HighDatabaseConnections expr: mysql_global_status_threads_connected > 100 for: 3m labels: severity: warning annotations: summary: "档案数据库连接数过多" description: "当前连接数 {{ $value }}" ```
创建/opt/archive-monitor/config/alertmanager.yml配置文件:
```yaml global: smtp_smarthost: 'smtp.qq.com:587' QQ邮箱SMTP服务器 smtp_from: 'your-email@qq.com' 发件邮箱 smtp_auth_username: 'your-email@qq.com' smtp_auth_password: 'your-smtp-password' SMTP授权码,非登录密码 route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'archive-admin' receivers: - name: 'archive-admin' email_configs: - to: 'admin@yourcompany.com' subject: '【档案监控告警】{{ .GroupLabels.alertname }}' body: | 告警级别: {{ .CommonLabels.severity }} 告警名称: {{ .CommonAnnotations.summary }} 告警详情: {{ .CommonAnnotations.description }} 触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} 告警实例: {{ .CommonLabels.instance }} ```
重要:需要将邮箱配置替换为实际可用的SMTP信息。
```bash docker run -d \ --name=alertmanager \ --restart=always \ -p 9093:9093 \ -v /opt/archive-monitor/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml \ -v /opt/archive-monitor/alertmanager-data:/alertmanager \ prom/alertmanager:latest \ --config.file=/etc/alertmanager/alertmanager.yml \ --storage.path=/alertmanager ```
Grafana提供直观的监控数据展示面板,我们需要配置数据源和监控仪表盘。
```bash docker run -d \ --name=grafana \ --restart=always \ -p 3000:3000 \ -v /opt/archive-monitor/grafana-data:/var/lib/grafana \ grafana/grafana:latest ```

启动后访问http://服务器IP:3000,使用默认账号admin/admin登录。
登录Grafana后按顺序操作:
Grafana社区提供了丰富的仪表盘模板,我们使用两个适合档案监控的模板:
重复上述步骤,导入数据库监控面板ID7362(MySQL Overview)。
需要在被监控的档案服务器上安装exporter来暴露监控指标。
登录档案服务器执行:
```bash 下载node_exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz 解压并安装 tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz sudo cp node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin/ sudo chmod +x /usr/local/bin/node_exporter 创建systemd服务 sudo tee /etc/systemd/system/node_exporter.service << EOF [Unit] Description=Node Exporter After=network.target [Service] User=root ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target EOF 启动服务 sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter ```
在监控服务器上验证是否能采集到档案服务器的数据:
```bash 测试连通性和数据采集 curl http://档案服务器IP:9100/metrics | head -20 ```
如果能看到以""开头的HELP和TYPE注释行,以及具体的监控指标,表示采集正常。
定期检查各组件运行状态:
```bash 检查所有容器状态 docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 查看Prometheus日志 docker logs prometheus --tail 50 查看最近告警 curl http://localhost:9093/api/v2/alerts ```
修改Prometheus启动参数调整数据保留时间,编辑启动命令中的--storage.tsdb.retention.time参数:
```bash 修改为保留30天数据 --storage.tsdb.retention.time=30d ```
然后重启Prometheus容器生效。
问题1:Prometheus无法连接被监控服务器
检查防火墙设置,确保监控服务器能访问被监控服务器的对应端口(9100、8080等)。
问题2:Grafana图表显示"No data"
检查数据源配置的URL是否正确,确保Prometheus服务正常运行。
问题3:收不到告警邮件
检查Alertmanager配置中的SMTP信息,特别是授权码是否正确,使用telnet测试SMTP连通性:
```bash telnet smtp.qq.com 587 ```
至此,一个完整的档案监控中心已部署完成。系统将自动采集监控数据、展示可视化图表,并在出现异常时发送告警通知。后续可根据实际需求增加更多监控指标和告警规则。