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

Google Cloud Function调用LibreNMS API超时问题排查求助

问题:Google Cloud Function调用LibreNMS API超时

本地可正常运行的代码

我用以下Python代码调用LibreNMS API:

import requests
import json  # 注:原代码遗漏该导入,本地能运行可能是环境隐式导入,但云函数会报错
TOKEN = './token.json'
def get_request(request_type):
    url = f'http://192.168.1.141/api/v0/{request_type}'
    with open(TOKEN,'r') as file:
        headers = json.load(file)
    response = requests.get(url,headers=headers)
    if response.status_code == 200:
        pass
    else:
        print(f"Failed to pull for {request_type}: {response.status_code}")
    return response.json()
if __name__ == '__main__':
    dat = get_request('alerts') # pull alerts

问题现象

  • 本地运行脚本完全正常,响应速度快
  • 部署为Google Cloud Function后,requests.get(url, headers=headers) 出现超时,云日志报错如下:
Traceback (most recent call last):
  File "/layers/google.python.pip/pip/lib/python3.11/site-packages/urllib3/connection.py", line 203, in _new_conn
    sock = connection.create_connection( 
Traceback (most recent call last):
  File "/layers/google.python.pip/pip/lib/python3.11/site-packages/urllib3/connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
Traceback (most recent call last):
  File "/layers/google.python.pip/pip/lib/python3.11/site-packages/requests/adapters.py", line 489, in send
    resp = conn.urlopen(
Traceback (most recent call last):
  File "/layers/google.python.pip/pip/lib/python3.11/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()

已排查的内容

  • 本地和云函数的requirements.txt均使用相同版本依赖:requests==2.28.1、urllib3==1.26.14,排除版本差异问题
  • 最初怀疑本地IP192.168.1.141无法被云函数访问,替换为域名librenms.bctechnologies.co.za:8050后,仍然超时

问题分析与解决建议

核心原因

Google Cloud Function默认运行在Google公共网络环境中,无法直接访问两类资源:

  1. 本地私有IP(192.168.1.141):属于局域网地址,仅在你的本地网络内可达,云函数所在的外部网络无法路由到该地址
  2. 未公开的域名(librenms.bctechnologies.co.za:8050):该域名对应的服务要么未对外开放公网访问,要么防火墙/安全组未允许Google Cloud的IP段访问

解决步骤

  1. 确保LibreNMS服务可被公网访问

    • 检查LibreNMS所在服务器的防火墙规则,开放8050端口(或对应服务端口),并允许来自任意公网IP(或限定Google Cloud的IP范围)的访问
    • 确认域名librenms.bctechnologies.co.za已正确解析到服务器的公网IP,且端口映射配置正确(如果服务器在NAT后)
  2. 配置云函数的网络访问权限

    • 如果LibreNMS部署在Google Cloud VPC内的私有网络,可将云函数配置为与VPC连接,使其能访问VPC内的私有资源
    • 若使用其他云厂商或本地服务器,需确保服务器的公网入口规则允许云函数的出口IP访问
  3. 代码补全与容错优化

    • 补全import json导入,避免云函数抛出NameError
    • 添加超时参数避免无限等待:response = requests.get(url, headers=headers, timeout=10)(可根据实际情况调整超时时间)
    • 增加异常捕获,比如requests.exceptions.Timeout、requests.exceptions.ConnectionError,便于定位具体问题

内容的提问来源于stack exchange,提问作者Dylan Solms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:18:14