You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenTelemetry监控PostgreSQL查询遇依赖冲突问题求助

在AWS Lambda FaaS环境中解决opentelemetry-instrumentation-psycopg2与psycopg2-binary的依赖冲突问题

问题场景

在AWS Lambda环境中尝试通过opentelemetry-instrumentation-psycopg2获取PostgreSQL查询执行时长时,遇到两个核心问题:

  1. 安装psycopg2失败:在requirements.txt中添加psycopg2后,Lambda环境因缺少pg_config导致源码编译失败,错误信息如下:
× python setup.py egg_info did not run successfully.
-->   │ exit code: 1
-->   ╰─> [23 lines of output]
-->       running egg_info
-->       creating /tmp/pip-pip-egg-info-ngamcigt/psycopg2.egg-info
-->       writing /tmp/pip-pip-egg-info-ngamcigt/psycopg2.egg-info/PKG-INFO
-->       writing dependency_links to /tmp/pip-pip-egg-info-ngamcigt/psycopg2.egg-info/dependency_links.txt
-->       writing top-level names to /tmp/pip-pip-egg-info-ngamcigt/psycopg2.egg-info/top_level.txt
-->       writing manifest file '/tmp/pip-pip-egg-info-ngamcigt/psycopg2.egg-info/SOURCES.txt'
-->       
-->       Error: pg_config executable not found.
-->       
-->       pg_config is required to build psycopg2 from source.  Please add the directory
-->       containing pg_config to the $PATH or specify the full executable path with the
-->       option:
-->       
-->           python setup.py build_ext --pg-config /path/to/pg_config build ...
-->       
-->       or with the pg_config option in 'setup.cfg'.
-->       
-->       If you prefer to avoid building psycopg2 from source, please install the PyPI
-->       'psycopg2-binary' package instead.
-->       
-->       For further information please check the 'doc/src/install.rst' file (also at
-->       <https://www.psycopg.org/docs/install.html>).
-->       
-->       [end of output]
-->   
-->   note: This error originates from a subprocess, and is likely not a problem with pip.
--> error: metadata-generation-failed
--> 
--> × Encountered error while generating package metadata.
--> ╰─> See above for output.
--> 
--> note: This is an issue with the package mentioned above, not pip.
--> hint: See above for details.
--> make: *** [install] Error 1
  1. 依赖冲突导致OTEL数据无法生成:将psycopg2替换为psycopg2-binary==2.9.9后,添加opentelemetry-instrumentation-psycopg2时出现依赖检测错误,无法生成链路数据:
[ERROR] opentelemetry.instrumentation.instrumentor - DependencyConflict: requested: "psycopg2 >= 2.7.3.1" but found: "None"

当前使用的初始化代码:

Psycopg2Instrumentor().instrument(enable_commenter=True)

解决方案

方案1:手动映射psycopg2-binary为psycopg2(快速解决)

psycopg2-binary是psycopg2的预编译版本,功能完全一致,但OTEL检测模块默认只识别psycopg2包名。可以通过代码修改绕过依赖检测:

  1. 在初始化Instrumentor前,将psycopg2_binary注册为psycopg2的别名:
import sys
import psycopg2_binary

# 让OTEL检测模块识别psycopg2_binary为psycopg2
sys.modules["psycopg2"] = psycopg2_binary

# 初始化监控
from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor
Psycopg2Instrumentor().instrument(enable_commenter=True)
  1. requirements.txt依赖配置:
psycopg2-binary==2.9.9
opentelemetry-instrumentation-psycopg2

方案2:使用Lambda层预编译psycopg2(无代码修改)

如果不想改动代码,可以创建包含编译好的psycopg2的Lambda层:

  1. 在与Lambda同架构的环境(如Amazon Linux 2)中执行以下命令:
# 安装编译依赖
sudo yum install postgresql-devel python3-devel
# 创建虚拟环境并编译安装psycopg2
python3 -m venv venv
source venv/bin/activate
pip install psycopg2 -t python/lib/python3.x/site-packages/
# 打包成Lambda层压缩包
zip -r psycopg2-layer.zip python/
  1. 将压缩包上传为Lambda层,附加到目标函数后,requirements.txt保留以下内容即可:
psycopg2
opentelemetry-instrumentation-psycopg2

方案3:迁移到psycopg3(长期推荐)

如果代码兼容,建议升级到psycopg3版本,其binary包无需编译,且OTEL有原生支持的检测模块:

  1. requirements.txt修改为:
psycopg[binary]==3.1.18
opentelemetry-instrumentation-psycopg
  1. 替换初始化代码:
from opentelemetry.instrumentation.psycopg import PsycopgInstrumentor
PsycopgInstrumentor().instrument(enable_commenter=True)

内容的提问来源于stack exchange,提问作者Pritam Bohra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:30:58