找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

864

积分

0

好友

118

主题
发表于 昨天 23:13 | 查看: 1| 回复: 0

一、概述

1.1 背景介绍

运维团队每天面对的核心挑战之一就是“如何快速发现问题”。当你管理的服务器从几十台扩展到几百台,传统的逐台检查方式早已不可行。我们需要一套能够实时展示全局状态、快速定位异常的监控系统。

Zabbix作为开源监控领域的老牌选手,经过20多年的迭代,已经从单纯的监控工具演变为企业级监控平台。7.0 LTS版本在可视化方面做了大量改进,原生Dashboard功能已经能够满足大多数运维大屏需求,不再强依赖Grafana。

我们团队在2024年完成了从Zabbix 5.0到7.0的升级迁移,监控规模覆盖800+服务器、2000+网络设备。这篇文章会分享整个搭建过程中的技术细节和踩坑经验。

1.2 技术特点

Zabbix 7.0 LTS相比之前版本,有几个值得关注的变化:

架构层面

  • 原生支持高可用(HA)集群,不再需要借助Keepalived
  • TimescaleDB支持更成熟,历史数据压缩率提升40%
  • 新增Proxy负载均衡,单个Server可管理更多Proxy

可视化层面

  • Dashboard重构,支持更灵活的布局
  • 新增地理地图(Geomap)组件
  • SVG图形支持,可自定义拓扑图
  • 实时数据刷新间隔可配置到1秒

数据采集层面

  • Zabbix Agent 2成为默认推荐
  • 原生支持Prometheus数据格式导入
  • 新增Browser监控项类型

1.3 适用场景

场景 推荐方案 说明
中小企业(<200台服务器) 单机部署 Server+MySQL+Nginx一体化
中型企业(200-1000台) 分布式部署 Server+Proxy+TimescaleDB
大型企业(>1000台) 高可用集群 HA Server+多Proxy+TimescaleDB集群
混合云环境 多Proxy架构 每个网络区域部署独立Proxy
需要长期数据保留 TimescaleDB 数据压缩+自动分区

1.4 环境要求

组件 版本要求 硬件配置(500台监控规模)
操作系统 Rocky Linux 9.3+ / Ubuntu 24.04 -
Zabbix Server 7.0 LTS CPU: 4核, 内存: 8GB, 磁盘: 100GB SSD
Zabbix Proxy 7.0 LTS CPU: 2核, 内存: 4GB, 磁盘: 50GB SSD
数据库 TimescaleDB 2.14+ (PostgreSQL 16) CPU: 4核, 内存: 16GB, 磁盘: 500GB SSD
Web Server Nginx 1.24+ 与Server同机部署
PHP 8.1+ php-fpm方式运行
Zabbix Agent 7.0 (Agent 2) CPU: 1核, 内存: 512MB

二、详细步骤

2.1 准备工作

2.1.1 系统初始化

以Rocky Linux 9为例,执行基础配置:

# 设置主机名
hostnamectl set-hostname zabbix-server

# 关闭SELinux(生产环境建议配置策略而非关闭)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

# 配置防火墙
firewall-cmd --permanent --add-port=10051/tcp  # Zabbix Server
firewall-cmd --permanent --add-port=80/tcp     # Web界面
firewall-cmd --permanent --add-port=443/tcp    # HTTPS
firewall-cmd --reload

# 时间同步(监控系统对时间敏感)
dnf install -y chrony
systemctl enable --now chronyd
chronyc sources -v

踩坑记录:我们曾因为NTP时间不同步导致告警延迟。Zabbix Server与Agent时间差超过60秒时,部分Trigger会出现误报。建议监控规模超过100台时,内网部署NTP服务器。

2.1.2 安装TimescaleDB

MySQL虽然是Zabbix的默认选择,但在大规模部署时,TimescaleDB的表现明显更好。我们在500台规模的环境中测试,TimescaleDB的历史数据查询速度比MySQL快3-5倍。

# 安装PostgreSQL 16官方源
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 禁用系统自带PostgreSQL模块
dnf -qy module disable postgresql

# 安装PostgreSQL 16
dnf install -y postgresql16-server postgresql16-contrib

# 初始化数据库
/usr/pgsql-16/bin/postgresql-16-setup initdb

# 安装TimescaleDB
dnf install -y https://packagecloud.io/timescale/timescaledb/el/9/x86_64/timescaledb-2-postgresql-16-2.14.2-0.el9.x86_64.rpm

# 配置TimescaleDB
timescaledb-tune --pg-config=/usr/pgsql-16/bin/pg_config --yes

# 启动PostgreSQL
systemctl enable --now postgresql-16

配置PostgreSQL认证(/var/lib/pgsql/16/data/pg_hba.conf):

# Zabbix Server连接
host    zabbix          zabbix          127.0.0.1/32            scram-sha-256
host    zabbix          zabbix          ::1/128                 scram-sha-256

创建数据库和用户:

sudo -u postgres psql << 'EOF'
CREATE USER zabbix WITH PASSWORD 'YourStrongPassword_2025';
CREATE DATABASE zabbix OWNER zabbix;
\c zabbix
CREATE EXTENSION IF NOT EXISTS timescaledb;
EOF

2.1.3 安装Zabbix Server

# 添加Zabbix 7.0官方源
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-4.el9.noarch.rpm
dnf clean all

# 安装Zabbix组件
dnf install -y zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2

# 导入初始数据库结构
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

# 启用TimescaleDB扩展(这一步很关键)
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix

2.2 核心配置

2.2.1 Zabbix Server配置

编辑 /etc/zabbix/zabbix_server.conf

# 数据库配置
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=YourStrongPassword_2025
DBPort=5432

# 性能调优(500台规模)
StartPollers=20
StartPollersUnreachable=5
StartTrappers=10
StartPingers=5
StartDiscoverers=5
StartHTTPPollers=5

# 缓存配置
CacheSize=256M
HistoryCacheSize=128M
HistoryIndexCacheSize=64M
TrendCacheSize=64M
ValueCacheSize=256M

# 超时配置
Timeout=30
TrapperTimeout=300

# 日志配置
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=100
DebugLevel=3

# 告警脚本路径
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts

# 启用HA(可选,需要多节点)
# HANodeName=zabbix-server-01
# NodeAddress=192.168.1.10:10051

参数说明

参数 建议值 说明
StartPollers 主机数/25 主动轮询进程数
CacheSize 256M-1G 配置数据缓存,监控项越多越大
HistoryCacheSize 128M-512M 历史数据写入缓存
ValueCacheSize 256M-1G Trigger计算缓存

2.2.2 Nginx配置

编辑 /etc/nginx/conf.d/zabbix.conf

server {
    listen          80;
    server_name     zabbix.example.com;

    # 强制HTTPS跳转(生产环境)
    return 301 https://$server_name$request_uri;
}

server {
    listen          443 ssl http2;
    server_name     zabbix.example.com;

    ssl_certificate     /etc/nginx/ssl/zabbix.crt;
    ssl_certificate_key /etc/nginx/ssl/zabbix.key;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    root    /usr/share/zabbix;
    index   index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/run/php-fpm/zabbix.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # 大屏展示优化:增加缓冲区
    location /api_jsonrpc.php {
        fastcgi_pass   unix:/run/php-fpm/zabbix.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }
}

2.2.3 PHP-FPM优化

编辑 /etc/php-fpm.d/zabbix.conf

[zabbix]
user = nginx
group = nginx
listen = /run/php-fpm/zabbix.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

; Zabbix PHP配置要求
php_value[max_execution_time] = 300
php_value[memory_limit] = 256M
php_value[post_max_size] = 32M
php_value[upload_max_filesize] = 16M
php_value[max_input_time] = 300
php_value[date.timezone] = Asia/Shanghai

2.3 启动和验证

# 启动服务
systemctl enable --now zabbix-server zabbix-agent2 nginx php-fpm

# 检查Server状态
systemctl status zabbix-server
tail -f /var/log/zabbix/zabbix_server.log

# 验证端口监听
ss -tlnp | grep -E '10051|80|443'

访问 https://zabbix.example.com 完成Web安装向导。默认管理员账号:Admin,密码:zabbix

重要:首次登录后立即修改Admin密码,并创建日常使用的运维账号。


三、示例代码和配置

3.1 完整配置示例

3.1.1 运维大屏Dashboard配置

Zabbix 7.0的Dashboard支持导入导出,以下是一个典型的运维大屏JSON配置:

{
"zabbix_export": {
"version": "7.0",
"template_dashboards": [
            {
"name": "NOC运维大屏",
"display_period": "60",
"auto_start": "1",
"pages": [
                    {
"name": "整体概览",
"widgets": [
                            {
"type": "problems",
"name": "当前告警",
"x": "0",
"y": "0",
"width": "12",
"height": "5",
"fields": [
                                    {"type": "INTEGER", "name": "severities", "value": "4"},
                                    {"type": "INTEGER", "name": "severities", "value": "5"},
                                    {"type": "INTEGER", "name": "show_lines", "value": "15"}
                                ]
                            },
                            {
"type": "systeminfo",
"name": "系统状态",
"x": "12",
"y": "0",
"width": "6",
"height": "3"
                            },
                            {
"type": "problemhosts",
"name": "问题主机TOP10",
"x": "18",
"y": "0",
"width": "6",
"height": "5",
"fields": [
                                    {"type": "INTEGER", "name": "show_lines", "value": "10"}
                                ]
                            },
                            {
"type": "graph",
"name": "网络流量趋势",
"x": "0",
"y": "5",
"width": "12",
"height": "4"
                            },
                            {
"type": "clock",
"name": "当前时间",
"x": "12",
"y": "3",
"width": "3",
"height": "2"
                            },
                            {
"type": "triggeroview",
"name": "触发器概览",
"x": "15",
"y": "3",
"width": "9",
"height": "6"
                            }
                        ]
                    },
                    {
"name": "服务器状态",
"widgets": [
                            {
"type": "dataover",
"name": "CPU使用率TOP",
"x": "0",
"y": "0",
"width": "8",
"height": "5"
                            },
                            {
"type": "dataover",
"name": "内存使用率TOP",
"x": "8",
"y": "0",
"width": "8",
"height": "5"
                            },
                            {
"type": "dataover",
"name": "磁盘使用率TOP",
"x": "16",
"y": "0",
"width": "8",
"height": "5"
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

3.1.2 自定义监控模板

创建Linux服务器深度监控模板,包含业务常用指标:

# 通过Zabbix API创建模板的Python脚本
# 文件: create_linux_template.py

import requests
import json

ZABBIX_URL = "https://zabbix.example.com/api_jsonrpc.php"
ZABBIX_USER = "Admin"
ZABBIX_PASS = "your_password"

class ZabbixAPI:
    def __init__(self, url):
        self.url = url
        self.auth = None
        self.headers = {"Content-Type": "application/json-rpc"}

    def login(self, user, password):
        payload = {
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {"username": user, "password": password},
            "id": 1
        }
        response = requests.post(self.url, json=payload, headers=self.headers, verify=False)
        self.auth = response.json()["result"]
        return self.auth

    def call(self, method, params):
        payload = {
            "jsonrpc": "2.0",
            "method": method,
            "params": params,
            "auth": self.auth,
            "id": 1
        }
        response = requests.post(self.url, json=payload, headers=self.headers, verify=False)
        return response.json()

def main():
    api = ZabbixAPI(ZABBIX_URL)
    api.login(ZABBIX_USER, ZABBIX_PASS)

    # 创建模板
    template_result = api.call("template.create", {
        "host": "Template Linux Server Advanced",
        "groups": [{"groupid": "1"}], # Templates组
        "description": "深度Linux服务器监控模板"
    })

    template_id = template_result["result"]["templateids"][0]
    print(f"Template created with ID: {template_id}")

    # 创建监控项
    items = [
        {
            "name": "TCP连接数 - ESTABLISHED",
            "key_": "net.tcp.count[established]",
            "type": 0, # Zabbix agent
            "value_type": 3, # Numeric unsigned
            "delay": "60s",
            "history": "7d",
            "trends": "365d"
        },
        {
            "name": "TCP连接数 - TIME_WAIT",
            "key_": "net.tcp.count[time_wait]",
            "type": 0,
            "value_type": 3,
            "delay": "60s",
            "history": "7d",
            "trends": "365d"
        },
        {
            "name": "系统负载 - 5分钟",
            "key_": "system.cpu.load[all,avg5]",
            "type": 0,
            "value_type": 0, # Numeric float
            "delay": "60s",
            "history": "7d",
            "trends": "365d"
        },
        {
            "name": "进程数",
            "key_": "proc.num[]",
            "type": 0,
            "value_type": 3,
            "delay": "60s",
            "history": "7d",
            "trends": "365d"
        }
    ]

    for item in items:
        item["hostid"] = template_id
        api.call("item.create", item)
        print(f"Item created: {item['name']}")

    # 创建触发器
    triggers = [
        {
            "description": "TCP TIME_WAIT连接数过高 (>{$TCP_TIMEWAIT_THRESHOLD})",
            "expression": f"last(/Template Linux Server Advanced/net.tcp.count[time_wait])>10000",
            "priority": 2 # Warning
        },
        {
            "description": "系统负载过高 (5分钟平均 > CPU核心数*2)",
            "expression": f"last(/Template Linux Server Advanced/system.cpu.load[all,avg5])>8",
            "priority": 3 # Average
        },
        {
            "description": "进程数异常 (>500)",
            "expression": f"last(/Template Linux Server Advanced/proc.num[])>500",
            "priority": 2
        }
    ]

    for trigger in triggers:
        api.call("trigger.create", trigger)
        print(f"Trigger created: {trigger['description']}")

if __name__ == "__main__":
    main()

3.1.3 Agent 2配置示例

/etc/zabbix/zabbix_agent2.conf

# 基础配置
Server=192.168.1.10
ServerActive=192.168.1.10
Hostname=web-server-01
HostMetadata=Linux web nginx mysql

# 日志配置
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=50
DebugLevel=3

# 性能配置
BufferSize=1000
Timeout=30

# 插件配置(Agent 2特有)
Plugins.SystemRun.LogRemoteCommands=1

# 自定义监控项
UserParameter=nginx.status
  • ,/usr/local/bin/nginx_status.sh $1 UserParameter=mysql.status
  • ,/usr/local/bin/mysql_status.sh $1 UserParameter=app.healthcheck,curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health # TLS加密(生产环境必须) TLSConnect=psk TLSAccept=psk TLSPSKIdentity=web-server-01 TLSPSKFile=/etc/zabbix/zabbix_agent2.psk
  • 生成PSK密钥:

    openssl rand -hex 32 > /etc/zabbix/zabbix_agent2.psk
    chmod 640 /etc/zabbix/zabbix_agent2.psk
    chown root:zabbix /etc/zabbix/zabbix_agent2.psk
    cat /etc/zabbix/zabbix_agent2.psk
    # 输出类似:a]f5b8c7d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7

    3.2 实际应用案例

    案例一:多机房统一监控大屏

    我们公司有3个机房(北京、上海、广州),需要在NOC中心展示统一监控视图。

    架构设计

                        ┌─────────────────┐
                        │  NOC监控大屏    │
                        │  (浏览器全屏)   │
                        └────────┬────────┘
                                 │
                        ┌────────▼────────┐
                        │  Zabbix Server  │
                        │   (北京机房)    │
                        └────────┬────────┘
               ┌─────────────────┼─────────────────┐
               │                 │                 │
        ┌──────▼──────┐   ┌──────▼──────┐   ┌──────▼──────┐
        │ Proxy-BJ    │   │ Proxy-SH    │   │ Proxy-GZ    │
        │ (北京机房)  │   │ (上海机房)  │   │ (广州机房)  │
        └──────┬──────┘   └──────┬──────┘   └──────┬──────┘
               │                 │                 │
          [200台服务器]     [150台服务器]     [100台服务器]

    Proxy配置(以上海Proxy为例):

    # /etc/zabbix/zabbix_proxy.conf
    ProxyMode=0  # 主动模式
    Server=192.168.1.10  # 北京Server地址
    Hostname=Proxy-SH
    ProxyLocalBuffer=24  # 本地缓存24小时
    ProxyOfflineBuffer=72  # 离线缓存72小时
    
    DBHost=127.0.0.1
    DBName=zabbix_proxy
    DBUser=zabbix
    DBPassword=ProxyPassword_2025
    
    StartPollers=15
    StartDiscoverers=3
    CacheSize=128M

    大屏配置要点

    1. 使用Host Groups按机房分组
    2. 创建聚合图形显示各机房核心指标
    3. 配置Dashboard页面自动轮播(60秒/页)
    4. 使用地理地图组件显示机房位置和状态

    案例二:业务系统健康度看板

    电商平台需要展示各业务模块的健康状态:

    -- 创建业务健康度计算项(在PostgreSQL中)
    -- 这是一个辅助视图,用于Dashboard展示
    
    CREATE VIEW v_business_health AS
    SELECT
        hg.name as business_name,
    COUNT(CASE WHEN p.severity >= 4 THEN 1 END) as critical_count,
    COUNT(CASE WHEN p.severity = 3 THEN 1 END) as warning_count,
    CASE
    WHEN COUNT(CASE WHEN p.severity >= 4 THEN 1 END) > 0 THEN 'CRITICAL'
    WHEN COUNT(CASE WHEN p.severity = 3 THEN 1 END) > 5 THEN 'WARNING'
    ELSE 'OK'
    END as health_status
    FROM host_groups hg
    LEFT JOIN hosts_groups hgh ON hg.groupid = hgh.groupid
    LEFT JOIN hosts h ON hgh.hostid = h.hostid
    LEFT JOIN problems p ON p.objectid IN (
    SELECT triggerid FROM triggers WHERE templateid IN (
    SELECT triggerid FROM functions WHERE itemid IN (
    SELECT itemid FROM items WHERE hostid = h.hostid
            )
        )
    )
    WHERE hg.name LIKE 'Business-%'
    GROUP BY hg.name;

    Dashboard配置:

    • 使用"Data overview"组件显示关键业务指标
    • 配置颜色阈值:CPU>80%红色,60-80%黄色
    • 使用"Graph"组件显示业务QPS趋势
    • 添加"URL"组件嵌入内部系统链接

    四、最佳实践和注意事项

    4.1 最佳实践

    4.1.1 性能优化

    数据库层面

    -- TimescaleDB性能优化配置
    -- 在postgresql.conf中添加
    
    shared_buffers = 4GB  # 总内存的25%
    effective_cache_size = 12GB  # 总内存的75%
    maintenance_work_mem = 1GB
    checkpoint_completion_target = 0.9
    wal_buffers = 64MB
    default_statistics_target = 100
    random_page_cost = 1.1  # SSD存储
    effective_io_concurrency = 200  # SSD存储
    
    # TimescaleDB特定配置
    timescaledb.max_background_workers = 8

    历史数据清理策略

    -- 配置数据保留策略(在Zabbix Web界面的Housekeeping设置)
    -- 或通过SQL直接配置
    
    -- 历史数据保留7天
    UPDATE config SET hk_history_global = 1, hk_history = '7d';
    
    -- 趋势数据保留365天
    UPDATE config SET hk_trends_global = 1, hk_trends = '365d';
    
    -- 启用TimescaleDB压缩(数据超过7天自动压缩)
    SELECT add_compression_policy('history', INTERVAL '7 days');
    SELECT add_compression_policy('history_uint', INTERVAL '7 days');
    SELECT add_compression_policy('trends', INTERVAL '7 days');
    SELECT add_compression_policy('trends_uint', INTERVAL '7 days');

    监控项优化

    优化点 建议
    采集间隔 非关键指标设置为5分钟,关键指标1分钟
    历史保留 详细数据7天,趋势数据1年
    预处理 使用正则提取减少存储量
    主动/被动 大规模场景使用主动模式减少Server压力

    4.1.2 安全加固

    # 1. 禁用默认账户
    # 在Web界面将Admin账户禁用,使用独立管理员账户
    
    # 2. 配置API访问控制
    # /etc/zabbix/zabbix_server.conf
    # 限制可调用API的IP范围(需要通过Nginx实现)
    
    # 3. Agent通信加密
    # 所有Agent必须配置PSK或证书加密
    
    # 4. 数据库访问限制
    # pg_hba.conf只允许localhost和Zabbix Server访问

    用户权限矩阵

    角色 权限 适用人员
    Super Admin 全部权限 系统管理员(限2-3人)
    Admin 配置管理,无用户管理 运维工程师
    User 只读,可确认告警 值班人员
    Guest 仅查看Dashboard 大屏展示

    4.1.3 高可用配置

    Zabbix 7.0原生HA配置:

    # 节点1 /etc/zabbix/zabbix_server.conf
    HANodeName=zabbix-node-01
    NodeAddress=192.168.1.10:10051
    
    # 节点2 /etc/zabbix/zabbix_server.conf
    HANodeName=zabbix-node-02
    NodeAddress=192.168.1.11:10051

    数据库需要独立高可用(PostgreSQL流复制或Patroni集群)。

    4.2 注意事项

    常见错误 原因 解决方案
    Web界面显示"Zabbix server is not running" Server未启动或数据库连接失败 检查zabbix_server.log,确认数据库配置
    Agent连接超时 防火墙阻断或Agent未启动 检查10050端口,telnet测试连通性
    图形显示"No data" 时间不同步或监控项配置错误 检查NTP,验证item key正确性
    Dashboard加载缓慢 数据量过大或数据库性能不足 优化查询,增加缓存,清理历史数据
    Trigger不触发 表达式错误或数据未采集 使用表达式测试功能,检查item状态
    内存不足OOM CacheSize配置过大或监控项过多 调整缓存参数,优化监控项数量
    Proxy数据积压 网络延迟或Server处理能力不足 检查Proxy日志,增加Server轮询进程

    五、故障排查和监控

    5.1 故障排查

    5.1.1 Server启动失败

    # 检查日志
    tail -100 /var/log/zabbix/zabbix_server.log
    
    # 常见错误处理
    # 错误:cannot connect to database
    # 解决:检查数据库服务状态和连接参数
    systemctl status postgresql-16
    psql -h 127.0.0.1 -U zabbix -d zabbix -c "SELECT 1"
    
    # 错误:cannot allocate shared memory
    # 解决:调整内核参数
    echo "kernel.shmmax = 68719476736" >> /etc/sysctl.conf
    sysctl -p
    
    # 错误:listener failed
    # 解决:检查端口占用
    ss -tlnp | grep 10051

    5.1.2 数据采集异常排查流程

    1. 检查Agent状态
       → systemctl status zabbix-agent2
       → tail -f /var/log/zabbix/zabbix_agent2.log
    
    2. 测试Agent连通性(在Server上执行)
       → zabbix_get -s <agent_ip> -k agent.ping
       → zabbix_get -s <agent_ip> -k system.uptime
    
    3. 检查防火墙
       → telnet <agent_ip> 10050
       → firewall-cmd --list-all
    
    4. 验证配置
       → grep -E "^Server|^Hostname" /etc/zabbix/zabbix_agent2.conf
    
    5. 检查Web界面
       → Configuration → Hosts → 查看主机状态图标
       → Monitoring → Latest data → 查看item状态

    5.1.3 性能问题诊断

    # Server内部统计
    zabbix_server -R diaginfo
    
    # 数据库慢查询分析
    tail -f /var/lib/pgsql/16/data/log/postgresql-*.log | grep -E "duration: [0-9]{4,}"
    
    # 缓存命中率检查(在Zabbix Web界面)
    # Reports → System information → 查看cache hit ratio
    
    # 监控进程状态
    ps aux | grep zabbix_server | grep -v grep | wc -l

    5.2 性能监控

    Zabbix自带的Internal监控模板已经覆盖大部分自监控需求,重点关注以下指标:

    关键指标:
    - zabbix[wcache,history,used]: 历史数据写缓存使用量
    - zabbix[rcache,buffer,pused]: 配置缓存使用百分比
    - zabbix[process,poller,avg,busy]: 轮询进程繁忙程度
    - zabbix[queue]: 监控队列长度
    - zabbix[vmware,buffer,pused]: VMware缓存(如使用)
    
    告警阈值建议:
    - 缓存使用率 > 80 %: Warning
    - 进程繁忙度 > 75 %: Warning(需增加进程数)
    - 队列长度 > 500: 立即处理

    5.3 备份与恢复

    5.3.1 自动备份脚本

    #!/bin/bash
    # /opt/scripts/zabbix_backup.sh
    
    BACKUP_DIR="/backup/zabbix"
    DATE=$(date +%Y%m%d_%H%M%S)
    RETENTION_DAYS=7
    
    # 创建备份目录
    mkdir -p ${BACKUP_DIR}/{database,config}
    
    # 备份数据库(仅结构和配置数据,不含历史)
    pg_dump -h 127.0.0.1 -U zabbix -d zabbix \
        --exclude-table-data='history*' \
        --exclude-table-data='trends*' \
        --exclude-table-data='events*' \
        -F c -f ${BACKUP_DIR}/database/zabbix_config_${DATE}.dump
    
    # 备份配置文件
    tar -czf ${BACKUP_DIR}/config/zabbix_config_${DATE}.tar.gz \
        /etc/zabbix/ \
        /usr/lib/zabbix/alertscripts/ \
        /usr/lib/zabbix/externalscripts/
    
    # 清理过期备份
    find ${BACKUP_DIR} -type f -mtime +${RETENTION_DAYS} -delete
    
    # 记录备份日志
    echo "[$(date)] Backup completed: zabbix_config_${DATE}" >> /var/log/zabbix_backup.log

    配置定时任务:

    # crontab -e
    0 2 * * * /opt/scripts/zabbix_backup.sh >> /var/log/zabbix_backup.log 2>&1

    5.3.2 恢复流程

    # 停止Zabbix Server
    systemctl stop zabbix-server
    
    # 恢复数据库
    pg_restore -h 127.0.0.1 -U zabbix -d zabbix -c /backup/zabbix/database/zabbix_config_20250108.dump
    
    # 恢复配置文件
    tar -xzf /backup/zabbix/config/zabbix_config_20250108.tar.gz -C /
    
    # 启动服务
    systemctl start zabbix-server

    六、总结

    6.1 技术要点回顾

    阶段 关键点
    环境准备 TimescaleDB替代MySQL提升大规模部署性能
    Server部署 根据监控规模调整进程数和缓存参数
    安全配置 PSK加密通信,最小权限原则
    大屏构建 原生Dashboard已足够,合理利用组件
    性能优化 关注缓存命中率和进程繁忙度
    高可用 7.0原生HA + 数据库集群

    6.2 进阶学习方向

    1. Zabbix API深度开发:自动化主机管理、批量模板导入、告警自愈
    2. 与CMDB集成:实现资产信息自动同步
    3. 日志监控集成:结合ELK实现日志告警
    4. 容器监控:Kubernetes集群监控方案
    5. AIOps探索:基于历史数据的异常检测

    6.3 参考资料

    • Zabbix 7.0 官方文档
    • TimescaleDB官方文档
    • Zabbix中国社区
    • PostgreSQL 16官方手册

    通过本文的详细步骤,你应该已经掌握了基于Zabbix 7.0 LTS构建企业级监控平台和运维大屏的核心技能。从环境准备、性能调优到可视化大屏配置,每个环节都需要根据实际监控规模进行调整。希望这些来自一线实践的经验能帮助你少走弯路。如果想与更多同行交流运维与 DevOps 经验,欢迎访问云栈社区


    附录

    A. 命令速查表

    操作 命令
    启动Server systemctl start zabbix-server
    查看Server状态 systemctl status zabbix-server
    查看Server日志 tail -f /var/log/zabbix/zabbix_server.log
    测试Agent连通性 zabbix_get -s <ip> -k agent.ping
    获取监控项值 zabbix_get -s <ip> -k <key>
    清除运行时诊断 zabbix_server -R diaginfo
    重载配置缓存 zabbix_server -R config_cache_reload
    检查进程 zabbix_server -R ha_status
    数据库连接测试 psql -h 127.0.0.1 -U zabbix -d zabbix

    B. 配置参数详解

    参数 默认值 建议值(500台) 说明
    StartPollers 5 20 主动轮询进程数
    StartPollersUnreachable 1 5 不可达主机轮询进程
    StartTrappers 5 10 接收主动数据进程
    CacheSize 32M 256M 配置缓存大小
    HistoryCacheSize 16M 128M 历史写缓存
    ValueCacheSize 8M 256M 值缓存大小
    Timeout 3 30 超时时间(秒)

    C. 术语表

    术语 说明
    Host 被监控的设备或系统
    Item 监控项,数据采集的基本单位
    Trigger 触发器,定义告警条件
    Action 动作,触发后执行的操作
    Template 模板,监控配置的集合
    Proxy 代理,用于分布式监控架构
    LLD 低级别自动发现,动态创建监控项
    PSK 预共享密钥,用于加密通信
    NVPS 每秒新值数,衡量系统吞吐量



    上一篇:GitHub 43.4K Star开源神器:Legado安卓阅读器,自定义书源无广告
    下一篇:Node.js开发中如何确保代码与注释同步更新
    您需要登录后才可以回帖 登录 | 立即注册

    手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

    GMT+8, 2026-1-27 04:27 , Processed in 0.280199 second(s), 41 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2025-2026 云栈社区.

    快速回复 返回顶部 返回列表