首页 > 其他分享 >zabbix使用自动发现对pg的复制槽进行状态监控

zabbix使用自动发现对pg的复制槽进行状态监控

时间:2024-08-11 15:19:48浏览次数:10  
标签:被动模式 模版 agent server zabbix 复制 pg 监控

zabbix使用自动发现对pgsql的复制槽进行状态监控

环境介绍:

本例中安装zabbix开源软件和postgres,软件版本信息如下:

软件 版本
zabbix Zabbix6.4.0
zabbix-server上postgres 14.7
zabbix-agent 6.4.17
zabbix-agent上postgres 16.3

主机信息如下:

Red Hat Enterprise Linux Server 7.9 (Maipo)
主机名 主机地址 用途
zib_server 192.168.101.238 zabbix的服务器地址
pgsql_master 192.168.101.232 pgsql的主服务器
pgsql_backup 192.168.101.239 pgsql的备服务器

1. 模版自动发现规则配置

点击数据采集 > 模版 > 创建模版,进入创建模版页面。如图所示。

模版配置如图所示。填写模版名称,选择模版所在的模版组。点击添加即可。

然后再次点击自己创建好的模版。

进入如下页面,点击自动发现规则 > 创建自动发现规则。进入自动发现规则创建页面。

进行自动发现规则的配置。其中与监听项配置相似。配置名称和类型,并且将键值配置好。完成之后点击添加即可。

在zabbix-agent客户端进行自定义键值配置。

soltInfo.conf文件中。

UserParameter=soltInfo[*],"$1"/pgsql_soltInfo.sh "$2"

pgsql_soltInfo.sh文件中。

#!/bin/bash
PGSHELL_ENV="$1"
source $PGSHELL_ENV/zabbix_shell.conf 
query="SELECT json_build_object(
    '{#SLOTNAME}', slot_name,
    'plugin', plugin,
    'database', database,
    'active', active
) FROM pg_replication_slots"

# 执行查询,并获取结果
slots=$($PSQL -t -c "${query}")

# 处理并格式化结果
# 1. 删除所有空白字符
# 2. 将多个 JSON 对象分隔符 { } 替换为 { },{ 
# 3. 在开始处添加 {"data":[ 
# 4. 在结束处添加 ]} 
formatted_slots=$(echo "$slots" | tr -d '[:space:]' | sed 's/}{/},{/g' | sed 's/^/{\"data\":[/' | sed 's/$/]}/')

# 如果查询结果为空,返回 {"data":[]}
if [[ -z "$slots" || "$slots" == "NULL" ]]; then
    formatted_slots="{\"data\":[]}"
fi

# 输出 JSON 格式的数据
echo "$formatted_slots"

测试如图所示。

获取到的JSON结果。

{
  "data": [
    {
      "{#SLOTNAME}": "pgbackup",
      "plugin": null,
      "database": null,
      "active": false
    },
    {
      "{#SLOTNAME}": "test_slot1",
      "plugin": null,
      "database": null,
      "active": true
    }
  ]
}

2. 创建监控项原型

创建自定义规则完成之后,点击创建好的自定义规则,再点击上方导航栏的监控项原型,再点击右上角的创建监控项原型,即可进入创建监控项原型的页面。

在这里提供两种思路,一个是使用服务器主动去执行客户端脚本来获取复制槽的信息。如下图所示。

soltStatus.conf文件中。

UserParameter=soltStatus[*],"$1"/soltStatus.sh "$2" "$3"

soltStatus.sh文件中。

#!/bin/bash
PGSHELL_CONFDIR="$1"
source $PGSHELL_CONFDIR/zabbix_shell.conf 

soltName="$2"
if [ -z "$soltName" ]; then
  soltName="pgbackup"
fi
query="SELECT active FROM pg_replication_slots where slot_name='${soltName}';"
	
# 执行查询,并获取结果
result=$($PSQL -t -c "${query}" | tr -d '[:space:]')
# 检查结果并输出状态
if [ "$result" == "t" ]; then
#    echo "Replication slot '$SLOT_NAME' is active."
	echo "T"
elif [ "$result" == "f" ]; then
#    echo "Replication slot '$SLOT_NAME' is inactive."
	echo "F"
else
#    echo "Unexpected result: $result"
	echo "F"
fi

另外一个是使用采集器服务器被动接收客户端主动发送的信息。如下图所示。

完成之后点击添加即可。

这两者选择的类型不同,前一个主动执行客户端的脚本获取数据,后一个让客户端自己本地定义一个定时任务执行脚本,向服务器发送数据即可。

3. 创建触发器类型

点击上方导航栏的触发器类型,然后点击右上角的创建触发器原型。进入创建触发器原型页面。如下图所示。

这里也展示了两种思路创建的触发器的创建,原理是基本一致的,只是配置方面有些许差异。

客户端被动触发器。

客户端主动触发器。

配置完成之后,点击添加即可。

4. 在主机上添加模版

点击监测 > 主机 > 对应主机 > 主机,进入配置模版页面。如下图所示。

在这个页面选择对应的模版,然后点击更新即可。如下图所示。

5. 对于客户端主动模式

对于客户端主动模式,因为是客户端主动去发送信息的,因此需要再客户端本地区执行一个定时任务来定时发送数据。

5.1 查看当前的定时任务

crontab -l

5.2 创建或者编辑crontab

sudo crontab -e
或者
crontab -e

5.3 添加定时任务

* * * * * /usr/local/zabbix/etc/shell_dict/slotShell.sh "/home/zabbix/zabbix_env"  >> /var/log/slotShell.log 2>&1

5.4 查看定时任务

crontab -l

[root@pgsql-master ~]# crontab -l
* * * * * /usr/local/zabbix/etc/shell_dict/slotShell.sh "/home/zabbix/zabbix_env"  >> /var/log/slotShell.log 2>&1

6. 查看最新数据和触发器是

查看最新数据。如下图所示。

结果如下图所示。

点击每个监控项,然后点击触发器,即可查看该监控项上的触发器。如下图所示。

在问题上也能查看报警的触发器。如下图所示。

7. 修改pg数据的复制槽状态

修改从库的配置文件。

primary_slot_name = 'pgbackup'
改为
primary_slot_name = 'test_slot1'

然后使用pg_ctl重启从库服务器。

pg_ctl restart

查看主动上的复制槽状态。

postgres=# SELECT * FROM pg_replication_slots;
 slot_name  | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_
wal_size | two_phase | conflicting 
------------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+------
---------+-----------+-------------
 pgbackup   |        | physical  |        |          | f         | f      |            |  751 |              | 0/71B0530   |                     | reserved   |      
         | f         | 
 test_slot1 |        | physical  |        |          | f         | t      |       7628 |  751 |              | 0/71B0530   |                     | reserved   |      
         | f         | 
(2 rows)

在查看web网页上的数据是否更新。

附录一 crontab的使用

1. 介绍

crontab 是 Linux 和 Unix 系统中用于定时任务调度的工具。它允许用户在指定的时间或时间间隔自动执行脚本或命令。通过 crontab,你可以安排系统和用户级别的定时任务,从而实现自动化操作。详情请见crontab简单介绍.md文档

2. 示例

每分钟执行一次脚本

* * * * * /path/to/your/script.sh

每天凌晨 2 点执行脚本

0 2 * * * /path/to/your/script.sh

每周一中午 12 点执行脚本

0 12 * * 1 /path/to/your/script.sh

每月 1 号凌晨 1 点执行脚本

0 1 1 * * /path/to/your/script.sh

3. 注意事项

  • 脚本权限: 确保脚本具有执行权限。可以使用 chmod +x /path/to/your/script.sh 来设置执行权限。

  • 绝对路径: 在 crontab 中使用绝对路径,避免路径问题。

  • 环境变量: crontab 任务在执行时不会加载用户的环境变量,可能需要在脚本中设置必要的环境变量。

  • 输出重定向: 将脚本的输出重定向到日志文件,以便调试。例如:

    0 2 * * * /path/to/your/script.sh >> /var/log/mycron.log 2>&1
    

附录二 主动模式和被动模式

1. zabbix主被动模式介绍

  • 被动模式:被动模式就是由zabbix server向zabbix agent发出指令获取数据, 即zabbixagent被动的去获取数据并返回给zabbix server, zabbix server周期性的向agent 索取数据, 这总模式的最大问题就是会加大zabbix server的工作量, 在数百台服务器的环境下zabbix server不能及时获取到最新数据, 但这也是默认的工作方式。
  • 主动模式是有zabbix agent主动采集数据并返回给zabbix server, 不再需要zabbix serve进行干预, 因此主动模式在一定程度上可减轻zabbix server的压力。

在优化zabbix的时候,主动模式优化后会大大减少zabbix server的压力

简而言之:被动模式就是zabbix-sevrer主动向zabbix-agent索要数据,好几千台服务器每次都要索要的话会非常的慢,从而影响监控值的刷新,主动模式就是zabbix-agent主动像zabbix-sever汇报数据,也就好比发了个通知,大家来这里集合一样,这样可以大大减轻zabbix server的压力

被动模式每次刷新监控项几乎都是一秒一个

zabbix监控主被动模式

  • 被动模式zabbix服务器从监控端拉数据,

  • 主动模式zabbix agent主动向服务器推数据。

  • zabbix监控默认为被动模式,zabbix agent被动的接受Zabbix Server的监控指令并返回数据。

  • zabbix主动模式为zabbix agent主动向zabbix Server发送请求拿来监控项并返回数据。

2. zabbix主被动模式详解

zabbix被动模式

  • zabbix agent被动的接受zabbix server周期性发送过来的数据收集指令。

在被动模式之下,zabbix server会根据主机关联的模板中的监控项和数据采集间隔时间,周期性的打开随机端口并向zabbix agent服务器的10050发起tcp连接,然后发送获取监控项数据的指令,即zabbix server发送什么指令那么zabbix agent就收集什么数据,zabbix server什么时候发送zabbix agent就什么时候采集,zabbix server不发送zabbix agent就一直不响应,所以zabbix agent也不用关心其监控项和数据采集周期间隔时间。

被动模式的优点就是配置简单,安装后即可使用,因此也成为zabbix 的默认工作模式。

但是被动模式的最大问题就是会加大zabbix server的工作量,在数百甚至数千台服务器的环境下会导致zabbix server需要轮训向每个zabbix agent发送数据采集指令,如果zabbix server负载很高还会导致不能及时获取到最新数据,但由于无需其他复杂配置,被设置为了默认的工作方式。

zabbix主动模式

  • 主动模式是由zabbix agent主动向zabbix server的10051端口发起tcp连接请求。

因此主动模式下必须在zabbixagent配置文件中指定zabbix server的IP或者主机名(必须可以被解析为IP地址),在连接到zabbix server之前zabbix agent是不知道自己要采集那些数据以及间隔多久采集一次数据的,然后在连接到zabbix server以后获取到自己的监控项和数据采集间隔周期时间,然后再根据监控项采集数据并返回给zabbix server。

在主动模式下不再需要zabbix serve向zabbix agent发起连接请求,因此主动模式在一定程度上可减轻zabbix server打开的本地随机端口和进程数,在一定程度就减轻看zabbix server的压力。

问题情况

问题1

为什么在主机上配置自动发现可以拿到结果,但是在监控项原型里面创建不出新的对应监控项。

下面是对监控项原型的配置。

问题2(已解决)

在模版中定义自动发现规则是使用到了路径参数,但是却没有发现能通过跟主机一样通过宏定义来简化使用的方法。

方法一 在模版上定义宏

如图所示。

优点是可以在定义模版的时候查看宏的路径,可以进行测试的时候使用。

缺点是如果主机上定义了一样的名字会起冲突。

方法二 使用主机上定义宏

如图所示。

优点是方便在主机上使用,不会出现定义冲突。

缺点是不能在模版上进行测试。

标签:被动模式,模版,agent,server,zabbix,复制,pg,监控
From: https://www.cnblogs.com/zreo2home/p/18353410

相关文章

  • zabbix自动发现
    zabbix自动发现环境介绍:本例中安装zabbix开源软件和postgres,软件版本信息如下:软件版本zabbixZabbix6.4.0postgres14.7zabbix-agent6.4.17主机信息如下:RedHatEnterpriseLinuxServer7.9(Maipo)主机名主机地址用途zib_server192.168.10......
  • zabbix触发器
    zabbix触发器环境介绍:本例中安装zabbix开源软件和postgres,软件版本信息如下:软件版本zabbixZabbix6.4.0postgres14.7zabbix-agent6.4.17主机信息如下:RedHatEnterpriseLinuxServer7.9(Maipo)主机名主机地址用途zib_server192.168.101.......
  • zabbix采集器
    zabbix采集器环境介绍:本例中安装zabbix开源软件和postgres,软件版本信息如下:软件版本zabbixZabbix6.4.0postgres14.7zabbix-agent6.4.17主机信息如下:RedHatEnterpriseLinuxServer7.9(Maipo)主机名主机地址用途zib_server192.168.101.......
  • Fabse的同步异步复制转换
    240711-Fabse的同步/异步复制转换1.主从搭建详情请见240710-Fbase一主一从安装文档.md安装文档。2.主从复制方式查看2.1判断主从库执行select*frompg_stat_replication;在主库上有结果,在备库上无结果;select*frompg_stat_replication;执行select*frompg_stat......
  • PostgreSQL的同步异步复制简介及互相转换
    PostgreSQL的同步/异步复制简介及互相转换一、介绍1.概念1.1.同步流复制同步流复制就是当主库发生变化,比如有一条DML语句产生了WAL日志后,通过后台进程传送到备库,备库必须要应用这个日志,然后向主库返回一个成功应用的信号,主库才可以成功的commit;否则主库会一直等待到备库成功......
  • GeoServer+Postgis发布存储在Postgis中的栅格数据(二)--pgraster插件使用
    这一篇是前面一篇的续集,前一篇链接GeoServer+Postgis发布存储在Postgis中的栅格数据前期准备pgraster插件下载:还是提供一个maven地址,直接搜索pgraster即可,版本的话因为插件是gs-开头选择和GeoServer版本一致即可,前一篇使用的GeoServer版本为2.19.6,所以这里也选择2.19.6即......
  • MySQL--主从复制
    前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除一、什么是主从复制1、定义主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。2、作用做数据的热备,作为后备数据库,主数据库服务器故障后,可切......
  • 编写类 MyTools 类,编写一个方法可以打印二维数组的数据。 2) 编写一个方法 copyPerson
    1publicclassMethodExercise02{2publicstaticvoidmain(String[]args){34Personp=newPerson();5p.name="milan";6p.age=100;7//创建tools8MyToolstools=newMyTools();9......
  • SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
    问题场景SQLServer事务复制在正常创建发布和订阅之后,logreaderJob启动异常,出现“Theprocesscouldnotexecute‘sp_replcmds’onxxx”等异常日志导致代理服务无法正常启动。 异常现象参考下图,异常日志如下Errormessages:Theprocesscouldnotexecute‘sp_re......
  • TINYMCE可以如何直接复制WORD的图文内容到编辑器中?
    昨天晚上论坛里面有一位网友给我发私信请教问题,如何解决word内容复制粘贴的问题,这位网友也是刚开始学习接触这块,很多基础知识并不了解,比如如何上传图片,如何保存图片,如何返回文件路径,这些技术他都不了解。先花了大概半个小时左右的时间给他讲解了一下基础知识,然后又花了一个小时......