zabbix5.0之postgresql表分区操作详情(存储过程、定时任务)

删除原表
psql -U zabbix -d zabbix  //登录数据库
drop table history;
drop table history_str;
drop table history_log;
drop table history_text;
drop table history_uint;
drop table trends;
drop table trends_uint;

创建独立的表空间
CREATE TABLESPACE zabbix_tbs
  OWNER zabbix
  LOCATION '/app/postgresql-12.3/data';
 
ALTER TABLESPACE zabbix_tbs
  OWNER TO zabbix;

重建删除的表
--history
CREATE TABLE public.history
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    value double precision NOT NULL DEFAULT '0'::double precision,
    ns integer NOT NULL DEFAULT 0
) PARTITION BY RANGE (clock)
TABLESPACE zabbix_tbs;
ALTER TABLE public.history
    OWNER to zabbix;
CREATE INDEX history_1
    ON public.history USING btree
    (itemid ASC NULLS LAST, clock ASC NULLS LAST)
    TABLESPACE zabbix_tbs;
-- Partitions SQL
CREATE TABLE public.history_default PARTITION OF public.history
    DEFAULT;
 
--history_str
CREATE TABLE public.history_str
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    value character varying(255) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    ns integer NOT NULL DEFAULT 0
)PARTITION BY RANGE (clock)
TABLESPACE zabbix_tbs;
ALTER TABLE public.history_str
    OWNER to zabbix;
 
CREATE INDEX history_str_1
    ON public.history_str USING btree
    (itemid ASC NULLS LAST, clock ASC NULLS LAST)
    TABLESPACE zabbix_tbs;
 
-- Partitions SQL
CREATE TABLE public.history_str_default PARTITION OF public.history_str
    DEFAULT;
 
--history_log
CREATE TABLE public.history_log
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    "timestamp" integer NOT NULL DEFAULT 0,
    source character varying(64) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying,
    severity integer NOT NULL DEFAULT 0,
    value text COLLATE pg_catalog."default" NOT NULL DEFAULT ''::text,
    logeventid integer NOT NULL DEFAULT 0,
    ns integer NOT NULL DEFAULT 0
) PARTITION BY RANGE (clock)
 
TABLESPACE zabbix_tbs;
ALTER TABLE public.history_log
    OWNER to zabbix;
CREATE INDEX history_log_1
    ON public.history_log USING btree
    (itemid ASC NULLS LAST, clock ASC NULLS LAST)
    TABLESPACE zabbix_tbs;
 
-- Partitions SQL
CREATE TABLE public.history_log_default PARTITION OF public.history_log
    DEFAULT;
 
--history_text
CREATE TABLE public.history_text
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    value text COLLATE pg_catalog."default" NOT NULL DEFAULT ''::text,
    ns integer NOT NULL DEFAULT 0
)PARTITION BY RANGE (clock)
 
TABLESPACE zabbix_tbs;
 
ALTER TABLE public.history_text
    OWNER to zabbix;
CREATE INDEX history_text_1
    ON public.history_text USING btree
    (itemid ASC NULLS LAST, clock ASC NULLS LAST)
    TABLESPACE zabbix_tbs;
 
-- Partitions SQL
CREATE TABLE public.history_text_default PARTITION OF public.history_text
    DEFAULT;
 
 
--history_uint
CREATE TABLE public.history_uint
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    value numeric(20,0) NOT NULL DEFAULT '0'::numeric,
    ns integer NOT NULL DEFAULT 0
)PARTITION BY RANGE (clock)
 
TABLESPACE zabbix_tbs;
ALTER TABLE public.history_uint
    OWNER to zabbix;
CREATE INDEX history_uint_1
    ON public.history_uint USING btree
    (itemid ASC NULLS LAST, clock ASC NULLS LAST)
    TABLESPACE zabbix_tbs;
 
-- Partitions SQL
CREATE TABLE public.history_uint_default PARTITION OF public.history_uint
    DEFAULT;
 
 
--trends
CREATE TABLE public.trends
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    num integer NOT NULL DEFAULT 0,
    value_min double precision NOT NULL DEFAULT '0'::double precision,
    value_avg double precision NOT NULL DEFAULT '0'::double precision,
    value_max double precision NOT NULL DEFAULT '0'::double precision,
    CONSTRAINT trends_pkey PRIMARY KEY (itemid, clock)
)PARTITION BY RANGE (clock)
 
TABLESPACE zabbix_tbs;
ALTER TABLE public.trends
    OWNER to zabbix;
 
-- Partitions SQL
CREATE TABLE public.trends_default PARTITION OF public.trends
    DEFAULT;
 
--trends_uint
CREATE TABLE public.trends_uint
(
    itemid bigint NOT NULL,
    clock integer NOT NULL DEFAULT 0,
    num integer NOT NULL DEFAULT 0,
    value_min numeric(20,0) NOT NULL DEFAULT '0'::numeric,
    value_avg numeric(20,0) NOT NULL DEFAULT '0'::numeric,
    value_max numeric(20,0) NOT NULL DEFAULT '0'::numeric,
    CONSTRAINT trends_uint_pkey PRIMARY KEY (itemid, clock)
)PARTITION BY RANGE (clock)
 
TABLESPACE zabbix_tbs;
ALTER TABLE public.trends_uint
    OWNER to zabbix;
 
-- Partitions SQL
CREATE TABLE public.trends_uint_default PARTITION OF public.trends_uint
    DEFAULT;


创建存储过程
psql -U zabbix -d zabbix

--创建存储过程partition_create
 
CREATE OR REPLACE PROCEDURE public.partition_create(
    tablename character varying,
    partitionname character varying,
    clock integer)
LANGUAGE 'plpgsql'
AS $BODY$DECLARE RETROWS INT;
DECLARE STRCLOCK VARCHAR = CLOCK;
DECLARE LESSCLOCK VARCHAR = CLOCK + 86400;
DECLARE tableCreateSQL VARCHAR;
BEGIN
        SELECT COUNT(1) INTO RETROWS
        FROM pg_inherits JOIN pg_class parent
        ON pg_inherits.inhparent = parent.oid JOIN pg_class child
        ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent
        ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child
        ON nmsp_child.oid = child.relnamespace WHERE parent.relname = TABLENAME  and child.relname = PARTITIONNAME;
       
        IF RETROWS = 0 THEN
            tableCreateSQL := 'create table ' || PARTITIONNAME || ' PARTITION OF public.' || tablename || '
           FOR VALUES FROM (' || STRCLOCK || ') TO (' || LESSCLOCK || ')';
            RAISE NOTICE '开始创建表%',tableCreateSQL;
            EXECUTE(tableCreateSQL);
            RAISE NOTICE '成功创建表%',tableCreateSQL;
        END IF;
END
$BODY$;
 
 
--创建存储过程partition_drop
 
CREATE OR REPLACE PROCEDURE public.partition_drop(
    tablename character varying,
    partitionname character varying)
LANGUAGE 'plpgsql'
AS $BODY$
        DECLARE RETROWS INT;
        DECLARE tableDropSQL VARCHAR;
BEGIN
 
        SELECT COUNT(1) INTO RETROWS
        FROM pg_inherits JOIN pg_class parent
        ON pg_inherits.inhparent = parent.oid JOIN pg_class child
        ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent
        ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child
        ON nmsp_child.oid = child.relnamespace WHERE parent.relname = tablename  and child.relname = partitionname;
       
       IF RETROWS = 1 THEN
 
            tableDropSQL := 'drop table ' || PARTITIONNAME;
            RAISE NOTICE '开始删除表%',tableDropSQL;
            EXECUTE(tableDropSQL);
            RAISE NOTICE '成功删除表%',tableDropSQL;
        END IF;
END
$BODY$;
 
 
--创建存储过程partition_maintenance
 
CREATE OR REPLACE PROCEDURE public.partition_maintenance(
    table_name character varying,
    keep_data_days integer)
LANGUAGE 'plpgsql'
AS $BODY$        DECLARE PARTITION_NAME VARCHAR(64);
        DECLARE NEXT_DATE VARCHAR;
        DECLARE NEXT_TIMESTAMP INT;
        DECLARE HISTORY_PARTITION_NAME VARCHAR(64);
        DECLARE RETROWS INT;
        DECLARE DATE_TIMESTAMP INT;
        DECLARE DATE_PARTITION_NAME VARCHAR(64);
BEGIN
       select to_char(now() + interval '1 d','yyyyMMdd') INTO NEXT_DATE;
 
        select floor(extract(epoch from to_timestamp(to_char(now() + interval  '1 d','yyyyMMdd'),'yyyyMMdd'))) INTO NEXT_TIMESTAMP;
 
       select TABLE_NAME||to_char(now() + interval '1 d','yyyyMMdd') INTO PARTITION_NAME;
 
       CALL partition_create(TABLE_NAME, PARTITION_NAME, NEXT_TIMESTAMP);
 
        select TABLE_NAME||to_char(now(),'yyyyMMdd') INTO DATE_PARTITION_NAME;
        SELECT COUNT(1) INTO RETROWS
        FROM pg_inherits JOIN pg_class parent
        ON pg_inherits.inhparent = parent.oid JOIN pg_class child
        ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent
        ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child
        ON nmsp_child.oid = child.relnamespace WHERE parent.relname = table_name  and child.relname = DATE_PARTITION_NAME;
       
        IF RETROWS = 0 THEN
    select floor(extract(epoch from to_timestamp(to_char(now(),'yyyyMMdd'),'yyyyMMdd'))) INTO DATE_TIMESTAMP;
    CALL partition_create(TABLE_NAME, DATE_PARTITION_NAME, DATE_TIMESTAMP);
        END IF;
        
        EXECUTE 'select to_char(now() - interval ''' || KEEP_DATA_DAYS || '  d'''||','||'''yyyyMMdd'''||')'|| '' INTO HISTORY_PARTITION_NAME;
      
       HISTORY_PARTITION_NAME := table_name||HISTORY_PARTITION_NAME;
 
       CALL partition_drop(table_name,HISTORY_PARTITION_NAME);
END
 
$BODY$;
 
 
--创建存储过程partition_maintenance_all
 
CREATE OR REPLACE PROCEDURE public.partition_maintenance_all(
    )
LANGUAGE 'plpgsql'
AS $BODY$    begin
                CALL partition_maintenance('history', 90);
    CALL partition_maintenance('history_log', 90);
    CALL partition_maintenance('history_str', 90);
    CALL partition_maintenance('history_text', 90);
    CALL partition_maintenance('history_uint', 90);
    CALL partition_maintenance('trends', 90);
    CALL partition_maintenance('trends_uint', 90);
    end;
$BODY$;

首次执行过程
call partition_maintenance_all();


添加定时任务
su - postgres
vi /home/postgres/.procedure
 
#!/bin/bash
source ~/.bash_profile
psql "user=zabbix password=zabbix123 host=localhost port=5432" -c "call partition_maintenance_all()";
 
保存并退出编辑

添加定时任务
crontab -e  //编辑定时任务,并加入如下内容,保存退出(添加多条,防止执行失败未创建分区)
 
30 10 * * * /bin/sh /home/postgres/.procedure
30 21 * * * /bin/sh /home/postgres/.procedure
30 23 * * * /bin/sh /home/postgres/.procedure

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是 Zabbix 5.0 监控 Linux 主机的操作手册: 1. 安装 Zabbix Agent:在 Linux 主机上安装 Zabbix Agent,可以使用以下命令: ``` sudo apt-get update sudo apt-get install zabbix-agent ``` 2. 配置 Zabbix Agent:Zabbix Agent 的配置文件位于 /etc/zabbix/zabbix_agentd.conf。打开该文件并进行以下配置: - 将 Server 和 ServerActive 配置为 Zabbix Server 的 IP 地址。 - 将 Hostname 配置为该 Linux 主机的主机名。 - 配置其他选项,如 Timeout、LogFileSize 等。 保存文件并重启 Zabbix Agent。 3. 创建主机:在 Zabbix Server 上创建一个主机,使用以下步骤: - 登录到 Zabbix Web 界面。 - 转到 Configuration -> Hosts。 - 单击 Create Host。 - 在 Hostname 字段中输入该 Linux 主机的主机名。 - 选择 Group、Agent Interface 和 Templates。 - 单击 Add。 4. 检查监控项:在 Zabbix Server 上检查监控项,使用以下步骤: - 转到 Configuration -> Hosts。 - 单击所需主机的名称。 - 转到 Items 选项卡。 - 检查监控项,如 CPU 使用率、内存使用率、磁盘空间等。 5. 检查触发器:在 Zabbix Server 上检查触发器,使用以下步骤: - 转到 Configuration -> Hosts。 - 单击所需主机的名称。 - 转到 Triggers 选项卡。 - 检查触发器,如 CPU 使用率超过阈值、磁盘空间不足等。 6. 检查图形:在 Zabbix Server 上检查图形,使用以下步骤: - 转到 Monitoring -> Graphs。 - 选择所需主机和监控项。 - 单击 Add。 以上就是 Zabbix 5.0 监控 Linux 主机的操作手册,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dba_sam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值