监控工具之基础设施监控(部署配置篇)

一、Zabbix 部署与配置

1.1 Zabbix 架构与组件

Zabbix 采用 Client/Server 架构,核心组件包括:

  • Zabbix Server:接收监控数据,处理告警
  • Zabbix Agent:安装在被监控主机,收集数据
  • Zabbix Proxy:分布式监控场景下的中间节点
  • Zabbix Web:Web 管理界面
  • Database:存储监控数据(MySQL/PostgreSQL/Oracle)

1.2 Zabbix Server 安装(CentOS 7)

1.2.1 安装前准备
# 关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 安装依赖
yum install -y gcc gcc-c++ make wget vim net-snmp net-snmp-devel curl curl-devel
1.2.2 安装数据库
# 安装MySQL
yum install -y mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb

# 初始化数据库
mysql_secure_installation

# 创建Zabbix数据库和用户
mysql -u root -p
CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'zabbix_password';
FLUSH PRIVILEGES;
exit
1.2.3 安装 Zabbix Server
# 添加Zabbix源
rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-release-5.4-1.el7.noarch.rpm
yum clean all

# 安装Zabbix组件
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent

# 导入初始数据
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
1.2.4 配置 Zabbix Server
# 修改配置文件
vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix_password  # 设置数据库密码

# 配置PHP时区
vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai

# 启动服务
systemctl start zabbix-server httpd zabbix-agent
systemctl enable zabbix-server httpd zabbix-agent
1.2.5 Web 界面初始化
  1. 访问 http://server_ip/zabbix
  2. 按照向导完成安装(数据库连接信息:用户 zabbix,密码 zabbix_password)
  3. 初始登录:用户名 Admin,密码 zabbix

1.3 Zabbix Agent 部署

1.3.1 Linux 客户端安装
# 安装Zabbix Agent
rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-release-5.4-1.el7.noarch.rpm
yum install -y zabbix-agent

# 配置Agent
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.100  # Zabbix Server IP
ServerActive=192.168.1.100  # Zabbix Server IP
Hostname=web-server-01  # 客户端主机名

# 启动Agent
systemctl start zabbix-agent
systemctl enable zabbix-agent
1.3.2 Windows 客户端安装
  1. 下载 Zabbix Agent Windows 版本(https://www.zabbix.com/download_agents
  2. 解压到 C:\zabbix-agent
  3. 修改 zabbix_agentd.win.conf:
Server=192.168.1.100
ServerActive=192.168.1.100
Hostname=win-server-01

      4. 安装为服务:

zabbix_agentd.exe --install --config C:\zabbix-agent\zabbix_agentd.win.conf
net start "Zabbix Agent"

1.4 Zabbix 监控配置

1.4.1 添加主机
  1. 登录 Zabbix Web 界面
  2. 导航至 Configuration → Hosts → Create host
  3. 填写主机信息:
    • Host name:与 Agent 配置的 Hostname 一致
    • Groups:选择或创建主机组(如 Linux servers)
    • Interfaces:添加 Agent 接口(IP 地址和端口 10050)

     4. 点击 Templates → Select → 搜索 Template OS Linux → Add

     5. 点击 Add 完成主机添加

1.4.2 自定义监控项

以监控 Nginx 连接数为例:

        a.在被监控主机上创建脚本:

cat > /usr/local/bin/nginx_connections.sh << EOF
#!/bin/bash
netstat -ant | grep :80 | grep -c ESTABLISHED
EOF
chmod +x /usr/local/bin/nginx_connections.sh

        b.在 Zabbix Agent 配置中添加:

vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx.connections,/usr/local/bin/nginx_connections.sh

        c.在 Zabbix Web 界面创建监控项:

    • Configuration → Hosts → 选择主机 → Items → Create item
    • Name:Nginx established connections
    • Key:nginx.connections
    • Type:Zabbix agent
    • Type of information:Numeric (unsigned)
    • Update interval:30s

        d.创建触发器:

    • Configuration → Hosts → 选择主机 → Triggers → Create trigger
    • Name:Nginx connections high
    • Expression:{web-server-01:nginx.connections.last()} > 1000
    • Severity:Warning

二、Prometheus + Grafana 部署与配置

2.1 Prometheus 架构与组件

Prometheus 生态系统包含多个组件:

  • Prometheus Server:核心组件,负责数据采集和存储
  • Exporters:数据采集器,针对不同服务
  • Pushgateway:接收短生命周期任务的数据
  • Alertmanager:处理告警
  • Grafana:数据可视化

2.2 Prometheus 安装(Linux)

# 创建用户
useradd -M -s /sbin/nologin prometheus

# 下载并解压
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
tar xvf prometheus-2.37.0.linux-amd64.tar.gz
mv prometheus-2.37.0.linux-amd64 /usr/local/prometheus

# 创建数据目录
mkdir -p /var/lib/prometheus
chown -R prometheus:prometheus /usr/local/prometheus /var/lib/prometheus

# 创建系统服务
cat > /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=Prometheus
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --web.console.templates=/usr/local/prometheus/consoles \
  --web.console.libraries=/usr/local/prometheus/console_libraries

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
systemctl start prometheus
systemctl enable prometheus

2.3 Node Exporter 安装(主机监控)

# 下载并安装
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin/

# 创建系统服务
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/node_exporter \
  --collector.systemd \
  --collector.processes \
  --collector.netclass

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
systemctl start node_exporter
systemctl enable node_exporter

2.4 配置 Prometheus 采集目标

编辑 Prometheus 配置文件:

vim /usr/local/prometheus/prometheus.yml

添加 node_exporter 采集配置:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'nodes'
    static_configs:
    - targets: ['localhost:9100', '192.168.1.101:9100', '192.168.1.102:9100']

重启 Prometheus 使配置生效:

systemctl restart prometheus

访问 Prometheus Web 界面(http://server_ip:9090),在 Status → Targets 中可查看采集目标状态。

2.5 Grafana 安装与配置

# 安装Grafana
wget https://dl.grafana.com/oss/release/grafana-9.0.6-1.x86_64.rpm
yum install -y grafana-9.0.6-1.x86_64.rpm

# 启动服务
systemctl start grafana-server
systemctl enable grafana-server

# 开放防火墙端口(如果启用)
firewall-cmd --add-port=3000/tcp --permanent
firewall-cmd --reload

登录 Grafana Web 界面(http://server_ip:3000),初始用户名和密码均为 admin,首次登录需修改密码。

2.6 配置 Grafana 连接 Prometheus

  1. 登录 Grafana 后,点击 Add your first data source
  2. 选择 Prometheus
  3. 在 URL 字段输入 Prometheus 地址(如http://localhost:9090
  4. 点击 Save & Test,显示 Data source is working 表示配置成功

2.7 导入 Grafana 仪表盘

  1. 访问 Grafana 仪表盘市场:Grafana dashboards | Grafana Labs
  2. 搜索适合的仪表盘(如 Node Exporter Full,ID: 1860)
  3. 在 Grafana 中,点击 Create → Import
  4. 输入仪表盘 ID,点击 Load
  5. 选择 Prometheus 数据源,点击 Import

三、Nagios 部署与配置

3.1 Nagios 架构

Nagios 是一款老牌开源监控工具,主要组件包括:

  • Nagios Core:核心引擎
  • Nagios Plugins:监控插件
  • Web Interface:Web 管理界面
  • NRPE:远程主机监控代理

3.2 Nagios 安装(CentOS 7)

# 安装依赖
yum install -y httpd php gcc glibc glibc-common make gettext automake autoconf wget openssl-devel

# 创建用户和组
useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache

# 下载并安装Nagios Core
cd /tmp
wget https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.14.tar.gz
tar xvf nagios-4.4.14.tar.gz
cd nagioscore-nagios-4.4.14

# 编译安装
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf

# 配置Nagios Web界面认证
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

# 安装Nagios插件
cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.4.6.tar.gz
tar xvf nagios-plugins-2.4.6.tar.gz
cd nagios-plugins-2.4.6

./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

# 启动服务
systemctl start httpd
systemctl enable httpd
systemctl start nagios
systemctl enable nagios

访问 Nagios Web 界面:http://server_ip/nagios,使用用户名 nagiosadmin 和设置的密码登录。

3.3 配置 Nagios 监控远程主机

以监控远程 Linux 主机为例:

        a.在远程主机安装 NRPE 和插件:

yum install -y nrpe nagios-plugins-all

# 配置NRPE
vim /etc/nagios/nrpe.cfg
server_address=远程主机IP
allowed_hosts=Nagios服务器IP

# 启动NRPE
systemctl start nrpe
systemctl enable nrpe

        b.在 Nagios 服务器上安装 NRPE 插件:

cd /tmp
wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz
tar xvf nrpe-4.1.0.tar.gz
cd nrpe-4.1.0
./configure
make all
make install

        c.配置 Nagios 监控远程主机:

# 创建主机配置文件
vim /usr/local/nagios/etc/objects/remote_hosts.cfg

define host {
    use                     linux-server
    host_name               web-server-01
    alias                   Web Server 01
    address                 192.168.1.101
    max_check_attempts      5
    check_period            24x7
    notification_interval   30
    notification_period     24x7
}

define service {
    use                     generic-service
    host_name               web-server-01
    service_description     PING
    check_command           check_ping!100.0,20%!500.0,60%
}

define service {
    use                     generic-service
    host_name               web-server-01
    service_description     SSH
    check_command           check_ssh
    check_interval          5
    retry_interval          1
}

define service {
    use                     generic-service
    host_name               web-server-01
    service_description     HTTP
    check_command           check_http
    check_interval          5
    retry_interval          1
}

        d.在 Nagios 主配置中包含新配置文件:

vim /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/remote_hosts.cfg

        e.验证配置并重启 Nagios:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
systemctl restart nagios

四、监控工具对比与选择建议
 

4.1 功能特性对比

特性

Zabbix

Prometheus + Grafana

Nagios

架构设计

C/S 架构,依赖数据库

时序数据库,拉取模式

插件式架构,C/S 模式

数据存储

关系型数据库(MySQL/PostgreSQL)

本地时序数据库,支持远程存储

文件或数据库

可视化能力

内置基础图表,功能有限

Grafana 提供强大可视化,支持多种图表

基础 Web 界面,图表简陋

告警机制

支持多级告警、多种通知方式

通过 Alertmanager,支持告警分组、抑制

基础告警,需自定义脚本扩展

扩展性

良好,支持自定义监控项和模板

优秀,丰富的 Exporter 生态

一般,依赖插件扩展

学习曲线

中等,配置相对复杂

较陡,需理解 PromQL 和指标模型

较陡,配置文件复杂

社区支持

活跃,中文资源丰富

非常活跃,更新快

稳定,资源相对较少

适用规模

中小到大型企业

中大型企业,云原生环境

中小型企业,传统环境

部署复杂度

中等

中等,组件较多

较高,需手动配置

4.2 性能对比

场景

Zabbix

Prometheus + Grafana

Nagios

监控节点数

支持数千节点

支持数万节点

适合数百节点

数据采集频率

最低 1 秒

最低 15 秒(可配置更低)

最低 1 分钟(可自定义)

资源消耗

中高(数据库为主)

中(内存和磁盘 IO)

高可用支持

支持,需额外配置

支持,联邦集群模式

需第三方工具(如 DRBD)

分布式监控

支持 Proxy 节点

支持联邦和远程写

支持分布式监控器

4.3 选型建议

        a.中小企业传统环境:优先选择 Zabbix

    • 理由:功能全面,部署相对简单,中文支持好,社区活跃
    • 适合场景:服务器、网络设备、传统应用监控

        b.云原生 / 容器环境:优先选择 Prometheus + Grafana

    • 理由:天生适合容器监控,Kubernetes 生态紧密集成,时序数据处理高效
    • 适合场景:Docker、K8s 集群、微服务架构

        c.简单监控需求 / 老旧系统:可选择 Nagios

    • 理由:轻量稳定,资源消耗低,历史悠久
    • 适合场景:少量关键服务器监控,对资源占用敏感的环境

        d.混合环境:可采用组合方案

    • Zabbix + Prometheus:Zabbix 监控传统设备,Prometheus 监控容器
    • 通过 API 实现数据互通,Grafana 统一展示

五、高级配置与扩展

5.1 Zabbix 高级配置

5.1.1 分布式监控(Zabbix Proxy)

当监控节点跨地域或数量庞大时,需部署 Zabbix Proxy:

# 安装Zabbix Proxy
yum install -y zabbix-proxy-mysql

# 配置数据库
mysql -u root -p
CREATE DATABASE zabbix_proxy CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON zabbix_proxy.* TO zabbix@localhost IDENTIFIED BY 'proxy_password';
FLUSH PRIVILEGES;
exit

# 配置Zabbix Proxy
vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.1.100  # Zabbix Server IP
Hostname=proxy-1
DBPassword=proxy_password
ConfigFrequency=3600  # 配置同步间隔(秒)

# 启动服务
systemctl start zabbix-proxy
systemctl enable zabbix-proxy

在 Zabbix Web 界面添加 Proxy:

  • Administration → Proxies → Create proxy
  • Proxy name:与配置文件中 Hostname 一致
  • Proxy mode:Active
  • 点击 Add 完成配置
5.1.2 自动发现与自动注册

实现主机自动加入监控:

# Zabbix Server配置自动发现
vim /etc/zabbix/zabbix_server.conf
DiscovererUpdateFrequency=60  # 发现频率(秒)

# Web界面配置自动发现规则
Configuration → Discovery → Create discovery rule
- Name: Local network discovery
- IP range: 192.168.1.1-254
- Delay: 30m
- Checks: 添加ICMP ping和TCP 10050端口检查

# 配置自动注册动作
Configuration → Actions → Event source: Auto registration
- Create action: 命名为Auto register Linux hosts
- Conditions: Host metadata contains Linux
- Operations: 
  - Add host
  - Add to host group: Linux servers
  - Link to template: Template OS Linux

5.2 Prometheus 高级配置

5.2.1 联邦集群(Federation)

实现 Prometheus 分布式部署:

# 子Prometheus配置
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.101:9100', '192.168.1.102:9100']

# 主Prometheus配置(联邦)
scrape_configs:
  - job_name: 'federate'
    scrape_interval: 15s
    honor_labels: true
    metrics_path: '/federate'
    params:
      'match[]':
        - '{job=~"node|prometheus"}'
    static_configs:
      - targets:
        - '192.168.1.110:9090'  # 子Prometheus 1
        - '192.168.1.111:9090'  # 子Prometheus 2
5.2.2 告警配置(Alertmanager)
# 安装Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
tar xvf alertmanager-0.24.0.linux-amd64.tar.gz
mv alertmanager-0.24.0.linux-amd64 /usr/local/alertmanager

# 配置Alertmanager
cat > /usr/local/alertmanager/alertmanager.yml << EOF
global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alert@example.com'
  smtp_auth_username: 'alert@example.com'
  smtp_auth_password: 'password'
  smtp_require_tls: true

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email-notifications'

receivers:
- name: 'email-notifications'
  email_configs:
  - to: 'admin@example.com'

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
EOF

# 启动服务
cat > /etc/systemd/system/alertmanager.service << EOF
[Unit]
Description=Alertmanager
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target
EOF

systemctl start alertmanager
systemctl enable alertmanager

在 Prometheus 中配置 Alertmanager:

# prometheus.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 'localhost:9093'

rule_files:
  - "alert_rules.yml"

创建告警规则:

# alert_rules.yml
groups:
- name: host_alerts
  rules:
  - alert: HighCpuUsage
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage on {{ $labels.instance }}"
      description: "CPU usage is above 80% for 5 minutes (current value: {{ $value }})"

5.3 Nagios 高级配置

5.3.1 配置邮件告警
# 安装邮件组件
yum install -y sendmail mailx

# 配置通知命令
vim /usr/local/nagios/etc/objects/commands.cfg
define command {
    command_name    notify-host-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "Host Alert: $HOSTNAME$ is $HOSTSTATE$" $CONTACTEMAIL$
}

define command {
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTEMAIL$
}

# 配置联系人
vim /usr/local/nagios/etc/objects/contacts.cfg
define contact {
    contact_name            nagiosadmin
    use                     generic-contact
    alias                   Nagios Admin
    email                   admin@example.com
}

六、监控最佳实践

6.1 监控指标设计原则

        a.聚焦核心指标:遵循 "少而精" 原则,避免指标泛滥

    • 服务器:CPU、内存、磁盘 IO、网络流量
    • 应用:响应时间、错误率、吞吐量
    • 业务:关键业务流程成功率

        b.设置合理阈值

    • 避免告警风暴(如 CPU 使用率阈值设为 80% 而非 50%)
    • 结合历史数据和业务高峰调整阈值
    • 不同级别告警设置不同阈值(警告 < 严重 < 紧急)

        c.分层监控

6.2 告警策略设计

        a.告警分级

    • P1(紧急):核心业务中断,需立即处理(<15 分钟响应)
    • P2(严重):重要功能受影响,需尽快处理(<1 小时响应)
    • P3(警告):性能下降,不影响核心功能(<24 小时响应)

        b.告警渠道

    • P1:电话 + 短信 + 邮件 + 即时通讯
    • P2:短信 + 邮件 + 即时通讯
    • P3:邮件 + 即时通讯

        c.告警抑制

    • 避免级联告警(如服务器宕机只告警主机不可达,不告警其上的所有服务)
    • 重复告警递增间隔(5 分钟→10 分钟→30 分钟→1 小时)

6.3 监控系统维护

        a.定期巡检

    • 检查监控覆盖率(新增节点是否纳入监控)
    • 验证告警有效性(模拟故障测试告警)
    • 清理无效指标和过期数据

        b.性能优化

    • 监控数据保留策略(近期详细数据 + 远期聚合数据)
    • 调整采集频率(非关键指标可降低频率)
    • 分布式部署减轻单点压力

        c.灾备方案

    • 监控系统本身需高可用
    • 关键告警配置多重通知渠道
    • 定期备份监控配置

七、总结与展望

基础设施监控是保障系统稳定运行的关键环节,选择合适的监控工具并进行合理配置,能够及时发现和解决问题,降低故障影响。

Zabbix 以其全面的功能和成熟的生态,适合传统环境的全方位监控;Prometheus+Grafana 凭借强大的时序数据处理能力和可视化效果,成为云原生环境的首选;Nagios 则在资源受限或简单监控场景中仍有一席之地。

未来监控趋势将向智能化、自动化方向发展:

  • AI 辅助监控:通过机器学习预测故障,自动调整阈值
  • 全链路追踪:结合 APM 工具实现端到端监控
  • DevOps 集成:监控即代码,配置纳入版本管理
  • 业务监控融合:从技术指标向业务价值指标转变

无论选择哪种工具,建立完善的监控体系并持续优化,才能真正发挥监控的价值,为业务稳定运行保驾护航。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值