skywalking

    SkyWalking 使用其原生的 NGINX Lua tracer 从服务和 URI 角度提供了分布式追踪、拓扑分析以及 metrics 。

    服务端目前支持 HTTP 和 gRPC 两种协议,在 APISIX 中目前只支持 HTTP 协议。

    你可以在配置文件(./conf/config.yaml)中配置以下属性:

    名称类型默认值描述
    service_namestring“APISIX”SkyWalking 上报的服务名称。
    service_instance_namestring“APISIX Instance Name”SkyWalking 上报的服务实例名。设置为 $hostname 时,将获取本机主机名。
    endpoint_addrstringSkyWalking 的 HTTP endpoint 地址,例如:http://127.0.0.1:12800
    report_intervalintegerSkyWalking 客户端内置的值上报间隔时间,单位为秒。

    以下是配置示例:

    ./conf/config.yaml

    上游服务示例代码

    Java with Spring Boot

    1. package com.lenovo.ai.controller;
    2. import org.springframework.web.bind.annotation.PathVariable;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. import javax.servlet.http.HttpServletRequest;
    6. /**
    7. * @author cyxinda
    8. * @create 2020-05-29 14:02
    9. * @desc skywalking test controller
    10. **/
    11. @RestController
    12. public class TestController {
    13. @RequestMapping("/uid/{count}")
    14. public String getUidList(@PathVariable("count") String countStr, HttpServletRequest request) {
    15. System.out.println("counter:::::"+countStr);
    16. return "OK";
    17. }
    18. }

    在启动服务前,需要配置 SkyWalking agent:

    1. agent.service_name=yourservername

    使用以下命令启动服务脚本:

    1. nohup java -javaagent:/root/skywalking/app/agent/skywalking-agent.jar \
    2. -jar /root/skywalking/app/app.jar \
    3. --server.port=8089 \

    该插件默认是禁用状态,你需要将其添加到配置文件(./conf/config.yaml)中才可以启用它:

    ./conf/config.yaml

    配置完成后,重新加载 APISIX,此时 APISIX 会创建一个后台定时器,向 SkyWalking OAP 服务定期上报数据。

    以下示例展示了如何在指定路由中启用 skywalking 插件:

    1. curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    2. {
    3. "methods": ["GET"],
    4. "uris": [
    5. "/uid/*"
    6. ],
    7. "plugins": {
    8. "skywalking": {
    9. "sample_ratio": 1
    10. }
    11. },
    12. "upstream": {
    13. "type": "roundrobin",
    14. "nodes": {
    15. "10.110.149.175:8089": 1
    16. }
    17. }
    18. }'

    首先你可以通过 Docker Compose 启动 SkyWalking OAP 和 SkyWalking UI:

    • 在 usr/local 中创建 skywalking.yaml 文件。

      1. version: "3"
      2. services:
      3. oap:
      4. image: apache/skywalking-oap-server:8.9.1
      5. restart: always
      6. - "12800:12800/tcp"
      7. image: apache/skywalking-ui:8.9.1
      8. restart: always
      9. ports:
      10. - "8080:8080/tcp"
      11. environment:
      12. SW_OAP_ADDRESS: http://oap:12800
      1. docker-compose -f skywalking.yaml up -d

      完成上述操作后,就已经启动了 SkyWalking 以及 SkyWalking Web UI。你可以使用以下命令确认容器是否正常运行:

    接下来你可以通过以下命令访问 APISIX:

    1. curl -v http://10.110.149.192:9080/uid/12
    1. HTTP/1.1 200 OK
    2. OK
    3. ...

    完成上述步骤后,打开浏览器,访问 SkyWalking 的 UI 页面,你可以看到如下服务拓扑图:

    并且可以看到服务追踪列表:

    plugin_skywalking

    当你需要禁用 skywalking 插件时,可通过以下命令删除相应的 JSON 配置,APISIX 将会自动重新加载相关配置,无需重启服务:

    1. curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
    2. {
    3. "methods": ["GET"],
    4. "uris": [
    5. "/uid/*"
    6. ],
    7. "plugins": {
    8. },
    9. "upstream": {
    10. "type": "roundrobin",
    11. "nodes": {
    12. "10.110.149.175:8089": 1
    13. }
    14. }'

    ./conf/config.yaml