SkyWalking服务监控简单配置【Windows版本】
SkyWalking是什么
skywalking是一个可观测性分析平台和应用性能管理系统专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
下载
官网:https://skywalking.apache.org/
下载地址:https://skywalking.apache.org/downloads/
中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/
配置开始
本人使用版本9.1.0,目录如下,下载的agent放到目录下即可
配置nacos
进入目录config,编辑application.yml文件
修改如下配置
cluster:
selector: ${SW_CLUSTER:nacos}
.
.
.
nacos:
serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:192.168.3.145:8848}
# Nacos Configuration namespace
namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"develop-hhs"}
# Nacos auth username
username: ${SW_CLUSTER_NACOS_USERNAME:"nacos"}
password: ${SW_CLUSTER_NACOS_PASSWORD:"nacos"}
# Nacos auth accessKey
accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}
secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}
internalComHost: ${SW_CLUSTER_INTERNAL_COM_HOST:""}
internalComPort: ${SW_CLUSTER_INTERNAL_COM_PORT:-1}
服务配置,打开idea,修改启动配置
agent配置路径添加,修改每个服务的服务名,最后一个可不变
-javaagent:D:\chromeDownload\skywalking\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=skywalking-alarm-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
即可看到对应的服务已被监控到
配置数据库【采用mysql】
还是修改config下application.yml
storage:
selector: ${SW_STORAGE:mysql}
.
.
.
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/skywalking?rewriteBatchedStatements=true"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}
dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}
重新启动看到如下内容【自动创建了表】
自定义链路追踪
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<!-- 版本号和skywalking服务版本号保持一致 -->
<version>9.1.0</version>
</dependency>
在service业务方法层添加注解
@Trace // skywalking自定义链路追踪注解
@Tags({
@Tag(key = "result", value = "returnedObj"), // skywalking自定义链路追踪记录返回值,returnedObj值是固定的
@Tag(key = "id", value = "arg[0]") // skywalking自定义链路追踪记录入参,arg[X]对应入参下标
})
即可以看到对应的日志内容,方便我们排查问题
日志配置及日志上报
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.1.0</version>
</dependency>
resource下添加logback-spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入Spring boot 默认的 logback XML 配置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--日志格式化-->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<!-- 添加SkyWalking 的tid方便查询 主要是这个[%X{tid}] -->
<pattern>[%X{tid}] ${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS} }){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} }</pattern>
</layout>
</encoder>
</appender>
<!--设置Appender-->
<root level="INFO">
<!-- 控制台日志 -->
<appender-ref ref="console"/>
</root>
</configuration>
配置完成后重启服务即可在控制台看到对应的TID,进入页面查询
告警功能
config/alarm-settings.yml文件
里面预先定义了一些常用的告警规则,我们可以在里面进行一些规则的修改
rules:
# Rule unique name, must be ended with `_rule`.
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 1
count: 2
silence-period: 5
message: 服务 {name} 的响应时间在过去的1分钟内超过1000毫秒的次数达到2次。
service_sla_rule:
# Metrics value need to be long, double or int
metrics-name: service_sla
op: "<"
threshold: 8000
# The length of time to evaluate the metrics
period: 10
# How many times after the metrics match the condition, will trigger alarm
count: 2
# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.
silence-period: 3
message: 服务 {name} 的成功率在过去的10分钟内低于80%的次数达到2次。
service_resp_time_percentile_rule:
# Metrics value need to be long, double or int
metrics-name: service_percentile
op: ">"
threshold: 1000,1000,1000,1000,1000
period: 10
count: 3
silence-period: 5
message: 服务 {name} 的百分位数响应时间在过去的10分钟内超过1000毫秒的次数达到3次,其中包括p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000。
service_instance_resp_time_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 1000
period: 10
count: 2
silence-period: 5
message: 服务实例 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到2次。
database_access_resp_time_rule:
metrics-name: database_access_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
message: 数据库访问 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到2次。
endpoint_relation_resp_time_rule:
metrics-name: endpoint_relation_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
message: 端点关系 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到2次。
Webhook(网络钩子)
概述:可以简单理解为是一种Web层面的回调机制
SkyWalking的告警消息会通过 HTTP 请求进行发送,请求方法为 POST,Content-Type 为 application/json,其JSON 数据实基于List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage>进行序列化的
[{
"scopeId": 1,
"scope": "SERVICE",
"name": "serviceA",
"id0": 12,
"id1": 0,
"ruleName": "service_resp_time_rule",
"alarmMessage": "alarmMessage xxxx",
"startTime": 1560524171000
}, {
"scopeId": 1,
"scope": "SERVICE",
"name": "serviceB",
"id0": 23,
"id1": 0,
"ruleName": "service_resp_time_rule",
"alarmMessage": "alarmMessage yyy",
"startTime": 1560524171000
}]
字段说明:
scopeId、scope:所有可用的 Scope 详见 org.apache.skywalking.oap.server.core.source.DefaultScopeDefine
name:目标 Scope 的实体名称
id0:Scope 实体的 ID
id1:保留字段,目前暂未使用
ruleName:告警规则名称
alarmMessage:告警消息内容
startTime:告警时间,格式为时间戳
编辑config/alarm-settings.yml文件
webhooks:
- http://192.168.3.21:8000/monitor/alarm/receive
根据规则,触发告警,接收到之后编写自己的业务逻辑,比如进行邮件提醒之类...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)