news 2026/5/6 19:03:13

Zabbix 7.0与PostgreSQL 16.6高效监控实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zabbix 7.0与PostgreSQL 16.6高效监控实战指南

1. 环境准备与安装部署

最近在帮客户部署Zabbix 7.0监控PostgreSQL 16.6时,发现新版组合确实比老版本更稳定高效。先说说我的安装经验,这里会包含一些官方文档没提到的实用技巧。

首先需要准备两台服务器:一台跑Zabbix Server 7.0,另一台跑PostgreSQL 16.6。我建议使用AlmaLinux 8.10作为基础系统,这个发行版对Zabbix的支持特别好。下载官方提供的Zabbix Appliance镜像能省去很多麻烦,镜像里已经预装了所有必要组件。

安装时有个小坑要注意:默认网卡配置是DHCP模式,生产环境一定要改成静态IP。修改/etc/sysconfig/network-scripts/ifcfg-eth0文件时,记得把BOOTPROTO改成static,然后配上IPADDR、NETMASK这些参数。改完后别急着重启网络,先用nmcli con show检查下连接名称,有时候不一定是eth0。

中文环境配置也是个常见需求。除了安装langpacks-zh_CN包外,我建议额外执行dnf install glibc-langpack-zh,这样能确保所有中文编码都支持。改完locale后记得重启zabbix-server服务,否则Web界面可能还是显示英文。

2. Zabbix Agent2深度配置

Zabbix 7.0最大的改进之一就是Agent2的增强,特别是对PostgreSQL的监控支持。安装agent时要用这个命令:

yum install zabbix-agent2 zabbix-agent2-plugin-postgresql

配置文件/etc/zabbix/zabbix_agent2.conf里有几个关键参数:

  • ServerActive=192.168.24.17 # 指向Zabbix Server的IP
  • Hostname=pgtest1 # 必须和Web界面里配置的主机名一致
  • Plugins.PostgreSQL.ConnPoolSize=5 # 连接池大小根据监控项数量调整

实测发现PostgreSQL插件默认的5分钟采集间隔对于关键指标来说太长了。我通常会在/etc/zabbix/zabbix_agent2.d/plugins下新建一个postgresql.conf,加入:

Plugins.PostgreSQL.Timeout=30 Plugins.PostgreSQL.KeepAlive=60 Plugins.PostgreSQL.Sessions.=SELECT * FROM pg_stat_activity

这样就能实时监控会话情况了。重启agent后记得用zabbix_agent2 -t pg.stat_activity测试下能否正常获取数据。

3. PostgreSQL监控模板优化

Zabbix自带的PostgreSQL模板虽然能用,但针对16.6版本还需要做些调整。在模板"PostgreSQL by Zabbix agent2"中,我通常会修改这几个地方:

  1. 宏配置:

    • {$PG.USER} 改成实际的监控账号
    • {$PG.PASSWORD} 设置密码
    • {$PG.CONNSTRING.AGENT2} 调整为"host=127.0.0.1 dbname=postgres"
  2. 监控项新增:

    • 添加WAL监控项:pg_current_wal_lsn()pg_wal_lsn_diff()
    • 复制延迟监控:pg_stat_replication相关指标
    • 锁等待监控:pg_blocking_pids()
  3. 触发器优化:

    • 将默认的30秒连接超时改为10秒
    • 增加长事务告警:{pgtest1:pg.stat_activity.max(5m)}>300
    • 调整慢查询阈值:{pgtest1:pg.stat_statements.max_time.avg(10m)}>5000

这些调整需要根据实际业务特点来定。比如金融类业务可能需要更严格的锁监控,而分析型系统则要更关注WAL增长情况。

4. 性能调优实战技巧

经过多次压测,我总结出几个提升监控效率的关键点:

数据库端优化:

-- 创建专用监控账号 CREATE ROLE zabbix_mon WITH LOGIN PASSWORD 'securepassword'; GRANT pg_monitor TO zabbix_mon; ALTER ROLE zabbix_mon SET statement_timeout = '3s'; -- 调整统计参数 ALTER SYSTEM SET track_activities = on; ALTER SYSTEM SET track_counts = on; ALTER SYSTEM SET track_io_timing = on;

Zabbix Server端优化:

  • 调整Housekeeper频率:把默认的1小时改为4小时
  • 增加预处理工作线程:StartPreprocessors=10
  • 优化缓存大小:CacheSize=1G(根据内存调整)

监控策略优化:

  1. 关键指标(如连接数、锁等待)采用1分钟间隔
  2. 次要指标(如表空间使用率)用5分钟间隔
  3. 历史数据保留策略:
    • 原始数据保留7天
    • 小时聚合数据保留1个月
    • 日聚合数据保留1年

这套配置在我负责的几个PB级数据库上运行稳定,Zabbix Server的资源消耗能控制在5%以内。

5. 常见问题排查指南

遇到监控数据不更新时,可以按这个流程排查:

  1. 检查agent日志:
journalctl -u zabbix-agent2 -f --lines=50

常见错误包括:

  • 认证失败:检查{$PG.USER}和{$PG.PASSWORD}宏
  • 连接超时:调整Plugins.PostgreSQL.Timeout
  • 权限不足:确保监控账号有pg_monitor角色
  1. 测试插件连接:
zabbix_agent2 -t pg.version
  1. 检查PostgreSQL日志:
SELECT * FROM pg_stat_activity WHERE application_name LIKE '%zabbix%';
  1. 网络连通性测试:
psql -h 127.0.0.1 -U zabbix_mon -d postgres -c "SELECT 1"

中文乱码问题通常是因为字体缺失,解决方法:

  1. 把Windows的simsun.ttc字体上传到服务器
  2. 复制到/usr/share/zabbix/assets/fonts/
  3. 修改define.inc.php中的字体配置

6. 高级监控场景实现

对于需要深度监控的场景,我推荐使用自定义LLD(Low-Level Discovery)来动态发现数据库对象。比如监控所有表的膨胀情况:

首先创建发现规则:

{ "data": [ { "{#SCHEMA}": "public", "{#TABLE}": "users" } ] }

然后创建监控项原型:

SELECT n_dead_tup FROM pg_stat_user_tables WHERE schemaname='{#SCHEMA}' AND relname='{#TABLE}'

再配置触发器原型:

{pgtest1:pg.stat_user_tables.n_dead_tup[{#SCHEMA},{#TABLE}].avg(5m)}>1000

这样就能自动监控所有表的死元组数量了。类似的方法还可以用于监控:

  • 索引使用率
  • 分区表大小
  • 复制槽状态
  • 后台worker进程

7. 可视化与告警优化

Zabbix 7.0的仪表盘功能增强了很多,我习惯这样配置:

  1. 创建专属PostgreSQL仪表盘
  2. 添加这些核心组件:
    • 连接数趋势图
    • 查询响应时间热力图
    • 锁等待矩阵图
    • 缓冲区命中率仪表

告警策略建议分级设置:

  • 紧急级(P0):数据库不可用、主从不同步
  • 重要级(P1):连接数超过80%、长事务
  • 警告级(P2):空间不足、缓存命中率下降

告警通知最好带上上下文信息,比如:

[P1告警] PostgreSQL连接数过高 (当前值: {ITEM.VALUE}) 受影响对象: {HOST.NAME} 触发条件: >80%最大连接数 相关指标: 活动连接: {pgtest1:pg.stat_activity.count.last()} 最大连接数: {pgtest1:pg.settings.max_connections.last()}

这样的告警信息能帮运维人员快速定位问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 17:27:17

如何撤销PUBLIC的危险权限_REVOKE EXECUTE ON UTL_FILE

必须用REVOKE EXECUTE ON SYS.UTL_FILE FROM PUBLIC撤销PUBLIC权限,DROP会破坏数据库;需先查DBA_TAB_PRIVS确认权限存在,再检查DBA_DEPENDENCIES识别依赖对象,建议按需授权而非全局撤销。撤销 PUBLIC 对 UTL_FILE 的 EXECUTE 权限…

作者头像 李华
网站建设 2026/4/17 22:43:52

2025届学术党必备的AI学术方案推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理技术的智能工具是AI写作软件,它能辅助用户完成文章撰写任务&…

作者头像 李华
网站建设 2026/4/18 2:03:56

Python-O365实战指南:Microsoft Teams深度集成与自动化方案

Python-O365实战指南:Microsoft Teams深度集成与自动化方案 【免费下载链接】python-o365 A simple python library to interact with Microsoft Graph and Office 365 API 项目地址: https://gitcode.com/gh_mirrors/py/python-o365 在当今数字化办公环境中…

作者头像 李华
网站建设 2026/4/14 22:05:49

Phi-4-mini-reasoning推理质量评估:在GSM8K、MATH数据集上的实测表现

Phi-4-mini-reasoning推理质量评估:在GSM8K、MATH数据集上的实测表现 1. 模型简介 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员,它特别针对数学推理能力…

作者头像 李华