PostgreSQL函数执行结果未在Azure Log Analytics审计日志中显示
问题描述
我想要调度运行PostgreSQL查询,让Azure Monitor基于查询结果生成自定义指标,当结果返回1时触发邮件告警。目前不清楚如何将SQL查询结果发送到Log Analytics工作区,从而通过Kusto查询语言(KQL)在Azure Monitor中自动创建自定义指标。
补充说明
我尝试创建了一个函数,并基于该函数的执行结果创建自定义指标告警规则,但遇到问题:Log Analytics工作区的审计日志未显示函数执行的返回结果。
我的函数代码
CREATE OR REPLACE FUNCTION get_partman_details() RETURNS integer AS $func$ DECLARE count integer; BEGIN count := (SELECT count(*)::int FROM cron.job_run_details WHERE status!='succeeded'); return count; END $func$ LANGUAGE plpgsql;
执行函数语句
select get_partman_details();
执行结果为1
Log Analytics工作区中的审计日志内容
LOG: AUDIT: SESSION,3,1,FUNCTION,EXECUTE,FUNCTION,public.get_partman_details,select get_partman_details();
解决方案
核心问题说明
审计日志仅记录操作事件的执行行为,不会存储查询的返回结果,因此无法直接通过审计日志获取函数的输出值来创建告警。需要通过以下方式将查询结果主动推送至Log Analytics:
方案1:用Azure Functions/逻辑应用推送结果
- 创建Azure Functions(或逻辑应用),配置定时触发器(比如每5分钟执行一次)。
- 在函数中编写代码连接PostgreSQL,执行
select get_partman_details()获取结果。 - 调用Log Analytics数据收集API,将结果以自定义日志的形式发送到工作区,数据格式示例:
{ "TimeGenerated": "<当前时间戳>", "FailureCount": <函数返回值> } - 在Log Analytics中会生成对应的自定义表(如
PostgreSQLCustomMetrics_CL)。
方案2:PostgreSQL内部调度+脚本推送
- 使用
pg_cron创建定时任务,执行包含查询和推送逻辑的脚本(比如Python脚本):SELECT cron.schedule('check-partman-failures', '*/5 * * * *', $$ \! python3 /path/to/push_to_loganalytics.py $$); - 在Python脚本中执行PostgreSQL查询,获取结果后调用Log Analytics API发送数据。
方案3:利用PostgreSQL诊断设置(仅Azure托管实例)
- 修改函数,添加
RAISE NOTICE输出结果:CREATE OR REPLACE FUNCTION get_partman_details() RETURNS integer AS $func$ DECLARE count integer; BEGIN count := (SELECT count(*)::int FROM cron.job_run_details WHERE status!='succeeded'); RAISE NOTICE 'Partman failure count: %', count; return count; END $func$ LANGUAGE plpgsql; - 在Azure门户中开启PostgreSQL实例的诊断设置,将
PostgreSQLLogs类别发送到Log Analytics工作区。 - 在Log Analytics中用KQL提取NOTICE中的数值:
PostgreSQLLogs | where Message contains 'Partman failure count:' | extend FailureCount = toint(split(Message, ': ')[1]) | where FailureCount == 1
创建告警规则
无论采用哪种方案,最后都需要在Azure Monitor中创建日志告警规则:
- 选择对应的Log Analytics工作区,输入上述KQL查询。
- 设置触发条件为“查询结果数大于0”,配置评估频率(比如每5分钟,查看过去5分钟的数据)。
- 关联邮件通知的动作组,当满足条件时自动发送告警邮件。
内容的提问来源于stack exchange,提问作者Hieu Hoang
相关产品推荐
相关产品推荐

