Lychee2887 2024-05-10 18:51 采纳率: 0%
浏览 8
已结题

Kubernetes&Fission&Eleasticsearch

Kubernetes集群上在Fission框架下创建实时爬取外部网站数据的Function,在将数据传输给Elasticsearch数据库时遇到的问题。

使用Fission功能将爬取数据的py文件封装成Function后,测试该Function报错:
Error: error executing HTTP request: Get "http://127.0.0.1:65008/fission-functio
n/tempwind-demo": context deadline exceeded

该py文件在本地测试返回值正常,初步认为是连接Elasticsearch数据库出现的问题,如果能提供帮助可以额外付费。

  • 写回答

32条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-05-10 18:52
    关注
    获得1.00元问题酬金

    🕗晚上好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:山有木兮木有枝,心悦君兮君不知。

    看起来你在使用Fission在Kubernetes集群中部署一个Python函数,该函数从外部网站抓取数据并将其存储到Elasticsearch。你遇到的问题可能是由于网络延迟、请求超时或者Elasticsearch服务未正确配置导致的。以下是一些可能的解决方案和代码示例:

    1. Fission Function配置: 确保你的Fission函数已经正确配置了HTTP触发器,并且允许访问外部资源。在fission.yaml文件中,添加适当的环境变量(如ELASTICSEARCH_URL)和安全设置。
    apiVersion: fission.io/v1
    kind: Function
    metadata:
      name: tempwind-demo
    spec:
      env:
        - name: ELASTICSEARCH_URL
          value: http://your-elastic-search-endpoint:9200
      code:
        zip: |
          # your python code with the elasticsearch client
          import requests
          from elasticsearch import Elasticsearch
    
          def handler(event, context):
              # Your Python function code here
              es = Elasticsearch([ELASTICSEARCH_URL])
              # Add your data scraping and indexing logic
    
    1. 网络问题: 检查Kubernetes集群内部网络是否畅通,或者尝试使用Fission提供的fission route命令来测试函数与Elasticsearch的连接。确保Elasticsearch服务的端口映射正确并且可以从Fission函数访问。

    2. 超时设置: 在你的Python代码中,检查requests.getElasticsearch连接的超时设置。例如:

    import requests
    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry
    
    def handler(event, context):
        retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
        session = requests.Session()
        session.mount('http://', HTTPAdapter(max_retries=retries))
        session.mount('https://', HTTPAdapter(max_retries=retries))
    
        es = Elasticsearch([ELASTICSEARCH_URL], timeout=60)  # Adjust timeout as needed
    
        # Your data scraping and indexing logic
    
    1. 错误处理: 添加适当的错误处理,捕获可能的网络错误并提供有用的错误信息。

    2. 日志调试: 在Fission函数中添加日志输出,以便于跟踪问题。例如:

    import logging
    
    logging.basicConfig(level=logging.INFO)
    
    def handler(event, context):
        try:
            # Your code here
            ...
        except Exception as e:
            logging.error(f"Error occurred: {str(e)}")
    

    如果以上步骤无法解决问题,可能需要进一步排查Elasticsearch服务的配置或者查看Kubernetes日志以获取更多详细信息。如果问题依然存在,付费支持可能是一个好的选择,但在此之前,我建议你先尝试上述建议。

    评论

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 创建了问题 5月10日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集