一、部署概述
本文档详细记录在企业内部部署完整监控系统的全过程,采用当前主流的监控解决方案组合:
监控架构设计
| 192.168.30.134 | monitor-01 | Prometheus + Nightingale + Grafana + MariaDB + Redis + Node Exporter | 监控主节点 |
| 192.168.30.132 | node-01 | Node Exporter | 业务节点1 |
| 192.168.30.133 | node-02 | Node Exporter | 业务节点2 |
架构流程图:
text
业务节点(node-01, node-02)
↓ (metrics数据)
Node Exporter (9100端口)
↓
Prometheus (9090端口,数据采集存储)
↗ ↖
Grafana (3000端口) Nightingale (17000端口)
(可视化展示) (告警管理)
二、基础环境配置
2.1 所有节点通用配置
bash
# 设置主机名(分别在各自节点执行)
# 134节点:
hostnamectl set-hostname monitor-01
# 132节点:
hostnamectl set-hostname node-01
# 133节点:
hostnamectl set-hostname node-02
# 所有节点编辑hosts文件
cat >> /etc/hosts << EOF
192.168.30.134 monitor-01
192.168.30.132 node-01
192.168.30.133 node-02
EOF
# 关闭防火墙(生产环境请谨慎操作)
systemctl stop firewalld
systemctl disable firewalld
# 安装基础工具
yum install -y wget curl tar vim net-tools
三、监控主节点部署(192.168.30.134)
3.1 数据库安装与配置
bash
# 安装MariaDB(MySQL兼容)
yum install -y mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb
# 安全初始化(交互式)
mysql_secure_installation
# 按提示设置root密码,如:MySQL@123
# 其他选项建议:移除匿名用户、禁止远程root登录等
# 安装Redis
yum install -y redis
systemctl start redis
systemctl enable redis
# 验证服务状态
systemctl status mariadb
systemctl status redis
3.2 Prometheus 部署
bash
# 创建工作目录
mkdir -p /opt/prometheus
cd /opt
# 下载并解压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
mv prometheus-2.45.0.linux-amd64/* prometheus/
rm -rf prometheus-2.45.0.linux-amd64*
# 配置Prometheus监控目标
cat > /opt/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s # 采集间隔
evaluation_interval: 15s # 规则评估间隔
scrape_configs:
– job_name: 'prometheus'
static_configs:
– targets: ['localhost:9090'] # 监控自身
– job_name: 'node' # 节点监控
static_configs:
– targets:
– '192.168.30.132:9100' # 业务节点1
– '192.168.30.133:9100' # 业务节点2
– '192.168.30.134:9100' # 监控节点自身
relabel_configs:
– source_labels: [__address__]
target_label: instance
regex: '(.*):9100'
replacement: '${1}'
EOF
# 创建Systemd服务
cat > /etc/systemd/system/prometheus.service << 'EOF'
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
User=root
ExecStart=/opt/prometheus/prometheus \\
–config.file=/opt/prometheus/prometheus.yml \\
–storage.tsdb.path=/opt/prometheus/data \\
–web.listen-address=:9090 \\
–web.enable-lifecycle
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus
3.3 Nightingale(夜莺监控)部署
bash
# 创建安装目录
mkdir -p /opt/n9e
cd /opt
# 下载并解压Nightingale
wget https://github.com/ccfos/nightingale/releases/download/v8.5.1/n9e-v8.5.1-linux-amd64.tar.gz
tar -xzf n9e-v8.5.1-linux-amd64.tar.gz -C /opt/n9e
rm -rf n9e-v6.0.0-linux-amd64*
# 数据库初始化
mysql -u root -p
# 执行以下SQL语句:
CREATE DATABASE n9e_v6 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'n9e'@'%' IDENTIFIED BY 'n9e@2024';
GRANT ALL PRIVILEGES ON n9e_v6.* TO 'n9e'@'%';
FLUSH PRIVILEGES;
EXIT;
# 导入表结构
tail -n +5 /opt/n9e/n9e.sql | mysql -u root -p n9e_v6
# 配置Nightingale
cp /opt/n9e/etc/config.toml /opt/n9e/etc/config.toml.bak
cat > /opt/n9e/etc/config.toml << 'EOF'
[Global]
RunMode = "release"
[Log]
Dir = "logs"
Level = "DEBUG"
Output = "stdout"
[HTTP]
Host = "0.0.0.0"
Port = 17000
CertFile = ""
KeyFile = ""
PrintAccessLog = false
PProf = false
ExposeMetrics = true
ShutdownTimeout = 30
MaxContentLength = 67108864
ReadTimeout = 20
WriteTimeout = 40
IdleTimeout = 120
[HTTP.ShowCaptcha]
Enable = false
[HTTP.APIForAgent]
Enable = true
[HTTP.APIForService]
Enable = true
[HTTP.APIForService.BasicAuth]
user001 = "ccc26da7b9aba533cbb263a36c07dcc5"
[HTTP.JWTAuth]
SigningKey = "5b94a0fd640fe2765af826acfe42d151"
AccessExpired = 1500
RefreshExpired = 10080
RedisKeyPrefix = "/jwt/"
[HTTP.ProxyAuth]
Enable = false
HeaderUserNameKey = "X-User-Name"
DefaultRoles = ["Standard"]
[HTTP.RSA]
OpenRSA = false
RSAPublicKeyPath = "/etc/n9e/public.pem"
RSAPrivateKeyPath = "/etc/n9e/private.pem"
RSAPassWord = ""
# ====== 数据库配置 ======
[DB]
# MySQL 连接字符串,根据您的实际情况修改
# 格式:用户名:密码@tcp(地址:端口)/数据库名?参数
DSN = "n9e:n9e@2024@tcp(127.0.0.1:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local&allowNativePasswords=true"
Debug = false
DBType = "mysql" # 必须为 "mysql"
MaxLifetime = 7200
MaxOpenConns = 150
MaxIdleConns = 50
TablePrefix = ""
# ====== Redis 配置 ======
[Redis]
Address = "127.0.0.1:6379"
Username = ""
Password = ""
DB = 0
UseTLS = false
TLSMinVersion = "1.2"
RedisType = "standalone"
# ====== 告警配置 ======
[Alert]
[Alert.Heartbeat]
IP = "192.168.30.134" # 修改为本机IP
Interval = 1000
EngineName = "default"
# ====== 中心配置 ======
[Center]
MetricsYamlFile = "./etc/metrics.yaml"
I18NHeaderKey = "X-Language"
[Center.AnonymousAccess]
PromQuerier = true
AlertDetail = true
# ====== 数据推送配置 ======
[Pushgw]
LabelRewrite = true
[[Pushgw.Writers]]
Url = "http://127.0.0.1:9090/api/v1/write"
BasicAuthUser = ""
BasicAuthPass = ""
Headers = ["X-From", "n9e"]
Timeout = 10000
DialTimeout = 3000
TLSHandshakeTimeout = 30000
ExpectContinueTimeout = 1000
IdleConnTimeout = 90000
KeepAlive = 30000
MaxConnsPerHost = 0
MaxIdleConns = 100
MaxIdleConnsPerHost = 100
# ====== 数据读取配置 ======
[Readers]
[[Readers.Clusters]]
Name = "default"
Addrs = ["http://192.168.30.134:9090"] # Prometheus地址
Timeout = 30000
UseTLS = false
TLSMinVersion = "1.2"
MaxIdleConnsPerHost = 100
MaxConnsPerHost = 0
[Readers.Clusters.TLSConfig]
InsecureSkipVerify = false
[Readers.Clusters.BasicAuth]
Username = ""
Password = ""
[BasicAuth]
User = "root"
Password = "root.2020"
EOF
# 创建Systemd服务
cat > /etc/systemd/system/n9e.service << 'EOF'
[Unit]
Description=Nightingale
After=network.target mariadb.service redis.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/n9e
ExecStart=/opt/n9e/n9e
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start n9e
systemctl enable n9e
3.4 Grafana 部署
bash
# 配置Grafana仓库
cat > /etc/yum.repos.d/grafana.repo << 'EOF'
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
# 安装Grafana
yum install -y grafana
systemctl start grafana-server
systemctl enable grafana-server
# 重置admin密码
grafana-cli admin reset-admin-password admin123
3.5 Node Exporter 部署(监控节点自身)
bash
cd /opt
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.6.0.linux-amd64.tar.gz
mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/
rm -rf node_exporter-1.6.0.linux-amd64*
cat > /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/node_exporter \\
–web.listen-address=:9100 \\
–collector.systemd \\
–collector.netdev \\
–collector.diskstats \\
–collector.filesystem
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
四、业务节点部署(192.168.30.132/133)
bash
# 下载并安装Node Exporter
cd /root
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.6.0.linux-amd64.tar.gz
mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/
rm -rf node_exporter-1.6.0.linux-amd64*
# 创建服务文件(与主节点配置相同)
cat > /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/node_exporter \\
–web.listen-address=:9100 \\
–collector.systemd \\
–collector.netdev \\
–collector.diskstats \\
–collector.filesystem
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
# 验证安装
curl -s http://localhost:9100/metrics | head -5
五、系统整合与配置
5.1 Grafana 数据源配置
访问Grafana界面
text
地址:http://192.168.30.134:3000
用户名:admin
密码:admin123
添加Prometheus数据源
-
点击左侧齿轮图标 → Data sources
-
点击 "Add data source"
-
选择 "Prometheus"
-
配置参数:
-
URL: http://192.168.30.134:9090
-
其他参数保持默认
-
-
点击 "Save & Test",显示成功即可
导入监控仪表板
-
点击 "+" → "Import"
-
输入仪表板ID:1860(Node Exporter完整仪表板)
-
选择刚才创建的Prometheus数据源
-
点击 "Import"
5.2 Nightingale 配置
访问夜莺界面
text
地址:http://192.168.30.134:17000
用户名:root
密码:root.2020
配置数据源
-
登录后进入 "系统配置" → "数据源"
-
点击 "添加"
-
配置参数:
-
名称:Prometheus
-
插件类型:prometheus
-
HTTP地址:http://192.168.30.134:9090
-
超时:10000ms
-
-
点击 "保存"
配置监控目标
-
进入 "监控对象" → "目标管理"
-
系统会自动发现配置在Prometheus中的节点
5.3 告警规则配置示例
在Nightingale中配置CPU使用率告警:
进入 "告警管理" → "告警规则"
点击 "新建规则"
配置参数:
-
规则名称:CPU使用率过高
-
PromQL表达式:100 – (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
-
触发条件:> 80
-
持续时间:5分钟
配置通知方式(邮件、钉钉、企业微信等)
六、验证与测试
6.1 服务状态检查
bash
# 在主节点检查所有服务状态
systemctl status prometheus
systemctl status n9e
systemctl status grafana-server
systemctl status node_exporter
systemctl status mariadb
systemctl status redis
# 检查端口监听
netstat -tlnp | grep -E '9090|17000|3000|9100|3306|6379'
6.2 访问地址汇总
| Prometheus | http://192.168.30.134:9090 | 无需登录 |
| Grafana | http://192.168.30.134:3000 | admin/admin123 |
| Nightingale | http://192.168.30.134:17000 | root/root.2020 |
| Node Exporter | http://192.168.30.134:9100/metrics | 无需登录 |
6.3 关键指标检查
Prometheus目标状态
-
访问:http://192.168.30.134:9090/targets
-
检查所有node_exporter是否显示为"UP"
节点监控数据
-
在Grafana中查看导入的仪表板
-
确认能看到所有三个节点的监控数据
七、故障排查指南
7.1 常见问题及解决方案
Prometheus无法采集数据
bash
# 检查网络连通性
curl http://目标节点:9100/metrics
# 检查防火墙
iptables -L -n
# 查看Prometheus日志
journalctl -u prometheus -f
Nightingale无法启动
bash
# 检查数据库连接
mysql -u n9e -p -h 127.0.0.1
# 检查Redis连接
redis-cli ping
# 查看夜莺日志
tail -f /opt/n9e/logs/n9e.log
Node Exporter无数据
bash
# 检查服务状态
systemctl status node_exporter
# 手动测试采集
/usr/local/bin/node_exporter –web.listen-address=:9100
# 检查端口占用
lsof -i:9100
八、生产环境建议
安全性增强
-
为各服务创建专用运行用户
-
配置SSL/TLS加密通信
-
启用防火墙,仅开放必要端口
-
定期更新组件版本
高可用部署
-
Prometheus集群部署
-
MySQL主从复制
-
Redis哨兵或集群模式
-
多Grafana实例负载均衡
性能优化
-
调整Prometheus存储参数
-
配置数据保留策略
-
使用远程存储(如Thanos)
-
定期清理过期数据
备份策略
bash
# 备份Prometheus数据
tar -czf prometheus-backup-$(date +%Y%m%d).tar.gz /opt/prometheus/data
# 备份数据库
mysqldump -u root -p n9e_v6 > n9e-backup-$(date +%Y%m%d).sql
# 备份配置文件
cp -r /opt/prometheus/prometheus.yml /opt/n9e/etc/config.toml /backup/
九、总结
通过本文档的步骤,您已经成功部署了一个完整的企业级监控系统。该系统具备:
数据采集层:Node Exporter采集主机指标
存储计算层:Prometheus进行数据存储和告警计算
可视化层:Grafana提供丰富的仪表板展示
告警管理层:Nightingale提供灵活的告警策略管理
这套组合方案具有开源、灵活、功能强大等特点,能够满足大多数企业的监控需求。建议定期维护和更新,并根据实际业务需求调整监控指标和告警规则。

