--- title: "APM(三):监控 Python 服务链" date: 2025-12-31 lastmod: 2025-12-31 description: "本文实战演示了利用 Skywalking 与 Easysearch 监控 python 服务调用的解决方案。" tags: ["Easysearch", "APM", "Skywalking"] summary: "上一篇我们通过 Skywalking 监控了一个单体的 Python Flask 服务,并在 Skywalking 的 Web UI 中进行展示。这次我们再写一个服务 BService,调用上次创建的 AService,看看在 Skywalking 中的效果如何。 启动后端服务 # 先启动好后端服务,包括 Skywalking 和 Easysearch。启动完成后能通过 Web UI 访问 Skywalking。 构建 Python 服务 BService # 我们编写一个简单的 BService 服务程序,只要访问 localhost:8082/b 就会调用 AService 并返回相关信息。 from flask import Flask import requests app = Flask(__name__) SERVICE_A_URL = 'http://localhost:8081/a' @app.route('/b', methods=['GET']) def call_service_a(): response = requests.get(SERVICE_A_URL) if response.status_code == 200: return f"Hello, I'am Server B and {response.text} from Service A' else: return 'Error calling Service A' if __name__ == '__main__': app." --- [上一篇](https://infinilabs.cn/blog/2025/integrating-skywalking-with-easysearch-part2/)我们通过 Skywalking 监控了一个单体的 Python Flask 服务,并在 Skywalking 的 Web UI 中进行展示。这次我们再写一个服务 BService,调用上次创建的 AService,看看在 Skywalking 中的效果如何。 ## 启动后端服务 先启动好后端服务,包括 Skywalking 和 Easysearch。启动完成后能通过 Web UI 访问 Skywalking。 {{% load-img "/img/blog/2025/integrating-skywalking-with-easysearch-part3/1.png" "" %}} ## 构建 Python 服务 BService 我们编写一个简单的 BService 服务程序,只要访问 localhost:8082/b 就会调用 AService 并返回相关信息。 ```plain from flask import Flask import requests app = Flask(__name__) SERVICE_A_URL = 'http://localhost:8081/a' @app.route('/b', methods=['GET']) def call_service_a(): response = requests.get(SERVICE_A_URL) if response.status_code == 200: return f"Hello, I'am Server B and {response.text} from Service A' else: return 'Error calling Service A' if __name__ == '__main__': app.run(host='0.0.0.0',port=8082) ``` 运行前,要安装好依赖。 ```plain pip3 install flask pip3 install apache-skywalking pip3 install requests ``` ## 设置环境变量 为了让服务能成功把相关信息发送到 Skywalking 后端,启动前我们还要设置两个环境变量告诉服务程序该往哪里发送信息。 ```plain export SW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800 export SW_AGENT_NAME=BService-python ``` ## 启动 Python 程序 一切准备妥当后,运行我们的服务程序。 ```plain sw-python run python3 BService.py ``` 程序启动后会监听 8082 端口。 {{% load-img "/img/blog/2025/integrating-skywalking-with-easysearch-part3/2.png" "" %}} 我们通过浏览器访问下 BService,它调用了 AService。 {{% load-img "/img/blog/2025/integrating-skywalking-with-easysearch-part3/3.png" "" %}} 在 Skywalking 的 Web UI 上查看服务的信息是否采集到。 服务调用频率、成功率、延时等。 {{% load-img "/img/blog/2025/integrating-skywalking-with-easysearch-part3/4.png" "" %}} 我们之前直接调用过 ASERvice,这次我们调用了 BService,BService 调用了 AService,所以 BService 的调用信息中会包含 AService 的调用信息。 {{% load-img "/img/blog/2025/integrating-skywalking-with-easysearch-part3/5.png" "" %}} 调用链详情。 {{% load-img "/img/blog/2025/integrating-skywalking-with-easysearch-part3/6.png" "" %}} {{% load-img "/img/blog/banner/about_yangf.png" "" %}}