应用性能监控系统

JeremyJone ... 2022-9-9 大约 5 分钟

# 应用性能监控系统

如今分布式架构越来越多,对于整套系统的监控越来越复杂,不单单是一个日志能够解决的,需要日志、追踪、分析等不同工具配合使用,才能满足需求。

在众多 APM 系统中,SkyWalking 算是一款比较好用的 APM 系统。它包括 服务端界面、以及 探针,其中 探针 是针对不同语言有不同的包,针对 ASP.NET 的探针包是 SkyAPM-dotnet,具体可以查看 GitHub

# SkyWalking

SkyWalking 提供了在许多不同场景中观察和监控分布式系统的解决方案。配合不同语言环境下的 探针,接收 探针 的遥测数据,让用户了解整个分布式系统。

SkyWalking 包括了一整套完整的文档,有兴趣的朋友可以自行查看。官方文档地址(英文)

# 配置 SkyWalking

打开链接:

http://skywalking.apache.org/downloads/ (推荐)

https://archive.apache.org/dist/skywalking/

直接下载最新版的 tar.gz 压缩包即可。

提示

针对 SkyAPM 1.0+ 的版本,需要 SkyWalking 8.0+ 或更高版本。

整套 SkyWalking 是 Java 编写的,解压缩后直接运行 /bin 目录下的 startup.bat(Windows) 或 startup.sh(linux/MacOS) 即可。

如果有打开两个窗口并且 Webapp 窗口没有自动关闭,就说明已经成功,打开浏览器并输入 http://localhost:8080/,如果能看到仪表盘的页面则说明成功。

# 修改端口

SkyWalking 默认开启 8080 端口,同时会还会占用 11800、12800 两个端口作为接收端口。如果端口被占用,它就无法启动,所以要确保这几个端口可用,同时也可以修改端口。

  • 8080:UI 的访问端口
  • 11800:后端侦听 gRPC 服务地址端口
  • 12800:后端侦听 Http REST 服务地址端口

# 修改 UI 端口

打开 SkyWalking 根目录下的 /webapp 目录下的 webapp.yml 文件,将 port 修改为空闲端口即可

# 修改后端侦听端口

打开 SkyWalking 根目录下的 /config 目录下的 application.yml 文件,搜索对应端口号并修改即可。

# 修改存储

默认情况下,SkyWalking 是使用 H2 存储,简单实用足够,但是它也可以重新配置,我们可以通过设置修改它。

elasticsearch7 为例,打开 SkyWalking 根目录下的 /config 目录下的 application.yml 文件,找到 storage 节点,修改 selector 即可:

storage:
  selector: ${SW_STORAGE:elasticsearch7} # 修改名称,对应下面子节点名称即可
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    # ...
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    # ...
  h2:
    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db;DB_CLOSE_DELAY=-1}
    # ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14

友情提示

elasticsearch 不在本文讨论范围,具体方法可以移步 阮一峰的网络日志。阮大神的日志,质量有保证。

提示

如果使用 ElasticSearch7+ 版本,需要下载 apache-skywalking-bin-es7.tar.gz 包,一定是带 es7 的包。

对于 7 以下版本,需要下载不包含 es7 的包。这点需要注意。

修改之后,就可以正常使用了。

# 配置探针

SkyAPMApache SkyWalking 团队的帮助下对不同语言提供原生支持,它支持多种语言,其中针对 .NET 平台是非常好用的。

# 安装探针工具

创建一个 WebAPI 项目,并在 NuGET 包管理器中查找并下载:

SkyAPM.Agent.AspNetCore (当前 1.3.0)

示例代码

具体代码可以看 示例代码

# 添加环境变量

安装之后,需要添加环境变量。在项目的启动配置文件 launchSettings.json 中添加:

"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
1

具体配置位置如下图:

环境变量配置

还可以自定义服务名称,方便在 UI 中查看(可以不设置,在 json 文件中单独配置即可):

"SKYWALKING__SERVICENAME": <your-app-name> // 修改为自定义的项目名称
1

# 添加配置文件

可以通过 CLI 工具快速创建配置文件。

全局安装 CLI:

dotnet tool install -g SkyAPM.DotNet.CLI
1

然后在项目目录下添加文件(其他地方创建拷贝到项目根目录亦可):

dotnet skyapm config <your-app-name> localhost:11800
1

注意

项目名称需要替换,IP 以及 Port 需要按照 SkyWalking 的配置,默认端口为 11800

生成的文件内容如下。(如果你不想安装 CLI 工具,可以直接拷贝下面的 json 文件):

{
  "SkyWalking": {
    "ServiceName": "Log.APM", // 服务名称,可以自定义
    "Namespace": "",
    "HeaderVersions": [
      "sw8" // 对照 SkyWalking 版本
    ],
    "Sampling": {
      "SamplePer3Secs": -1,
      "Percentage": -1.0
    },
    "Logging": {
      "Level": "Information",
      "FilePath": "logs\\skyapm-{Date}.log"
    },
    "Transport": {
      "Interval": 3000,
      "ProtocolVersion": "v8", // 对照 SkyWalking 的版本
      "QueueSize": 30000,
      "BatchSize": 3000,
      "gRPC": {
        "Servers": "localhost:11800", // SkyWalking 监听地址
        "Timeout": 10000,
        "ConnectTimeout": 10000,
        "ReportTimeout": 600000,
        "Authentication": ""
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

主要注意备注的内容即可,其他如果没有特殊要求可以默认。

这样就完成了配置。然后启动项目,如果有 swagger,直接在 swagger 中测试 API 即可。在 SkyWalking 的 UI 中就能看到测试效果。

说明

只要在项目中安装了 SkyAPM.Agent.AspNetCore 并且设置了上述环境变量,配置好 json 文件,即可

# 测试一下效果

为了测试一下效果,我们多建立几个关联项目,用最简单的 HttpClient 链接,每个项目都通过上面的方式配置探针即可。

示例代码

具体代码可以看 示例代码

启动后在 swagger 中测试一下,就可以在 SkyWalking 中看到对应的信息了:

追踪拓扑