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

根据规则,触发告警,接收到之后编写自己的业务逻辑,比如进行邮件提醒之类...

posted @   小侯学编程  阅读(833)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示