欢迎光临
我们一直在努力

企业级监控系统部署指南:Prometheus + Nightingale + Grafana 全流程

一、部署概述

本文档详细记录在企业内部部署完整监控系统的全过程,采用当前主流的监控解决方案组合:

监控架构设计

节点IP主机名部署组件用途说明
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提供灵活的告警策略管理

  • 这套组合方案具有开源、灵活、功能强大等特点,能够满足大多数企业的监控需求。建议定期维护和更新,并根据实际业务需求调整监控指标和告警规则。

    赞(0)
    未经允许不得转载:171主机测评 » 企业级监控系统部署指南:Prometheus + Nightingale + Grafana 全流程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址