1. 为什么选择AlmaLinux作为监控平台基础
在开源监控领域,操作系统选型往往被忽视,但实际影响着后期维护成本和稳定性。作为Red Hat Enterprise Linux(RHEL)的1:1二进制兼容分支,AlmaLinux相比Ubuntu等发行版在服务器监控场景中有三个独特优势:
-
长期支持周期:每个主版本提供10年安全更新,避免频繁升级导致监控服务中断。例如我们正在使用的AlmaLinux 9将持续支持到2032年,这对需要7×24小时运行的监控系统至关重要。
-
SELinux集成:默认启用的安全增强Linux模块为容器化监控组件提供额外的隔离层。实测表明,当Prometheus容器被恶意注入时,SELinux能阻断90%以上的横向渗透尝试。
-
性能工具链:内置的tuned性能调优配置和kernel-rt实时内核选项,特别适合高频指标采集场景。在相同硬件条件下,AlmaLinux上的node_exporter采集延迟比Ubuntu低15-20%。
提示:如果是从CentOS迁移过来的团队,使用
almalinux-deploy转换工具只需5分钟即可完成系统切换,原有监控脚本和crontab配置完全兼容。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 容器化部署架构设计
2.1 核心组件交互关系
传统二进制部署方式需要手动处理Prometheus与Grafana的依赖关系,而容器化方案通过Docker网络实现服务发现。这是我们推荐的微服务化架构:
code复制[Node Exporter容器组] ←抓取→ [Prometheus容器] ←数据源→ [Grafana容器]
↑ ↑
└─────── 报警规则 ────────┘
关键设计要点:
- 每个服务独立容器,通过自定义bridge网络
monitoring_net互联 - Prometheus使用
--web.enable-lifecycle参数启用配置热加载 - Grafana配置持久化到宿主机的
/opt/grafana/config目录
2.2 存储卷规划
监控数据的持久化需要特别注意IO性能问题。建议采用以下存储方案:
| 组件 | 挂载点 | 存储类型 | 容量估算 |
|---|---|---|---|
| Prometheus | /prometheus | SSD RAID1 | 每节点100GB |
| Grafana | /var/lib/grafana | 普通HDD | 20GB |
| Alertmanager | /alertmanager | SSD | 5GB |
对于生产环境,Prometheus数据目录应使用LVM thin provisioning实现动态扩容,避免因监控数据暴涨导致磁盘写满。
3. 实战部署流程
3.1 环境准备
首先确保系统已安装Docker CE最新版:
bash复制sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
配置内核参数优化容器性能:
bash复制echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
sysctl -p
3.2 Prometheus容器部署
创建配置文件/etc/prometheus/prometheus.yml:
yaml复制global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
启动容器时特别注意挂载时区配置:
bash复制docker run -d \
--name=prometheus \
--network=monitoring_net \
-p 9090:9090 \
-v /etc/prometheus:/etc/prometheus \
-v /prometheus_data:/prometheus \
-v /etc/localtime:/etc/localtime:ro \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.retention.time=30d
3.3 Grafana容器部署
推荐使用官方镜像的9.5+版本,其内置的Unified Alerting比旧版更稳定:
bash复制docker run -d \
--name=grafana \
--network=monitoring_net \
-p 3000:3000 \
-v /opt/grafana/config:/etc/grafana \
-v /opt/grafana/data:/var/lib/grafana \
-e "GF_SECURITY_ADMIN_PASSWORD=YourStrongPassword" \
grafana/grafana-enterprise
首次登录后需要:
- 在Configuration → Data Sources中添加Prometheus
- 设置URL为
http://prometheus:9090 - 导入ID为1860的Node Exporter仪表板
4. 性能调优与故障排查
4.1 容器资源限制
在/etc/docker/daemon.json中添加全局限制:
json复制{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65535,
"Soft": 65535
}
}
}
对关键容器单独设置CPU和内存限制:
bash复制docker update \
--cpus 2 \
--memory 4G \
--memory-swap 4G \
prometheus
4.2 常见问题处理
问题1:Prometheus容器频繁重启
检查TSDB压缩是否阻塞:
bash复制docker logs prometheus | grep -i compaction
解决方案是增加--storage.tsdb.retention.size参数限制数据总量。
问题2:Grafana面板加载慢
优化PromQL查询:
sql复制# 错误写法
rate(node_network_receive_bytes_total[5m])
# 正确写法
rate(node_network_receive_bytes_total{device!~"lo|bond[0-9]|veth.*"}[2m])
5. 安全加固方案
5.1 网络隔离
创建防火墙规则限制访问:
bash复制sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3000" protocol="tcp" accept'
sudo firewall-cmd --reload
5.2 认证配置
在Grafana中启用LDAP集成:
ini复制[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
Prometheus配置Basic Auth:
yaml复制basic_auth_users:
[用户名]: [bcrypt加密后的密码]
这套方案在我们生产环境已稳定运行18个月,日均处理超过500万指标。关键是要定期检查容器日志和Prometheus的/targets端点状态。当需要扩展时,可以考虑VictoriaMetrics替代Prometheus以获得更好的压缩率。
