skywalking应用性能监控

发布于:2025-07-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

1.skywalking描述

官方文档
SkyWalking 是一个开源的可观测性平台,用于收集、分析、汇总和可视化来自服务及云原生基础设施的数据。SkyWalking 为维护分布式系统的清晰视图提供了简便的方法,即使是在跨云环境中也能做到。它是一款专为云原生、基于容器的分布式系统设计的现代应用性能管理工具。
SkyWalking 能够满足云原生环境中的所有可观测性需求,包括:

  • Tracing 支持 SkyWalking 原生数据格式以及 Zipkin v1 和 v2 格式的追踪数据。
  • Metrics(指标)。SkyWalking 支持成熟的指标格式,包括原生计数器格式、OTEL 指标格式和 Telegraf 格式。SkyWalking 与服务网关平台(通常为 Istio 和 Envoy)集成,将可观测性融入数据平面或控制平面。此外,SkyWalking 原生代理可以在指标模式下运行,这极大地提高了性能。
  • Logging(日志记录)。包括从磁盘收集的日志或通过网络收集的日志。原生代理能够自动将追踪上下文与日志绑定,或者使用 SkyWalking 通过文本内容将跟踪和日志进行绑定。(有关人或事物的)资料收集。性能分析是一种强大的工具,可帮助开发人员从代码行的角度了解其应用程序的性能。SkyWalking 提供了内置在原生语言代理和独立的 ebpf 代理中的性能分析功能。
  • Event(事件)。事件是一种特殊类型的数据,用于记录系统中的重要时刻,例如版本升级、配置更改等。将事件与指标相联系有助于解释指标中的峰值或低谷,而将事件与跟踪和日志相联系则有助于排查根本原因。

2.下载安装

环境安装:

skywalking安装:
下载地址:https://www.apache.org/dyn/closer.cgi/skywalking/10.2.0/apache-skywalking-apm-10.2.0.tar.gz
下载成功上传到服务器(笔者使用ubuntu24),解压到/usr/local 命令:
bash tar -zxvf apache-skywalking-apm-10.2.0.tar.gz -C /usr/local
修改配置:

#进入安装目录
cd /usr/local/apache-skywalking-apm-bin
#编辑config目录application.yml
vi config/application.yml

关键配置信息:

cluster:
  selector: ${SW_CLUSTER:standalone} #单机模式
  standalone:
#存储使用elasticsearch
storage:
  selector: ${SW_STORAGE:elasticsearch}
  banyandb:
    # Since 10.2.0, the banyandb configuration is separated to an independent configuration file: `bydb.yaml`.
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} #多个以“,”号隔开
    user: ${SW_ES_USER:"user"}
    password: ${SW_ES_PASSWORD:"password"}

配置ui
编辑webapp目录application.yml,自定义serverPort端口号

serverPort: ${SW_SERVER_PORT:-8081}

# Comma seperated list of OAP addresses.
oapServices: ${SW_OAP_ADDRESS:-http://localhost:12800}

zipkinServices: ${SW_ZIPKIN_ADDRESS:-http://localhost:9412}

启动skywalking

./bin/startup.sh

访问skywalking:
http://ip:8081
在这里插入图片描述

3.Java agent

Apache SkyWalking 的 Java agent,为 Java 项目提供原生的跟踪/指标/日志/事件/分析能力
下载java agent:https://www.apache.org/dyn/closer.cgi/skywalking/java-agent/9.4.0/apache-skywalking-java-agent-9.4.0.tgz
监控其他语言项目:https://skywalking.apache.org/downloads/

  • 项目集成agent https://skywalking.apache.org/docs/skywalking-java/v9.4.0/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/

  • 将apache-skywalking-java-agent-9.4.0.tgz 解压到项目目录

    tar -zxvf apache-skywalking-java-agent-9.4.0.tgz -C /app/run/test #你的项目目录
    
  • 进入/app/run/test修改agent配置文件

    #skywalking-agent是apache-skywalking-java-agent-9.4.0.tgz解压后的目录
    vi  skywalking-agent/config/agent.config
    
    

    主要配置:

    #The group name is optional only
    agent.service_name=${SW_AGENT_NAME:test}
    # The agent cluster
    agent.cluster=${SW_AGENT_CLUSTER:100}
    # Backend service addresses.
    collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:localhost:11800}
    
  • 启动test
    jvm 参数新增 -javaagent:./skywalking-agent/skywalking-agent.jar

     nohup java -javaagent:./skywalking-agent/skywalking-agent.jar  -jar  -Xms1024M -Xmx1024M test.jar > /dev/null 2>&1 &
    

重新打开控制台可以正常看到服务监控指标:
常规服务-服务-选择查看的服务:
在这里插入图片描述

4.报警设置

进入skywalking安装目录,编辑config目录下alarm-settings.yml,以下是默认配置:

# SkyWalking 告警规则配置
rules:
  # 服务响应时间告警规则
  service_resp_time_rule:
    # 表达式:当服务响应时间超过1000ms的情况在最近10分钟内累计达到3次时触发告警
    expression: sum(service_resp_time > 1000) >= 3
    # 检查周期:每10分钟检查一次
    period: 10
    # 静默周期:触发告警后静默5分钟
    silence-period: 5
    # 告警消息:服务{name}在最近10分钟内有3分钟的响应时间超过1000ms
    message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.

  # 服务成功率告警规则
  service_sla_rule:
    # 表达式:当服务成功率低于80%(即SLA值小于8000)的情况在最近10分钟内累计达到2次时触发告警
    expression: sum(service_sla < 8000) >= 2
    # 检查周期:每10分钟检查一次
    period: 10
    # 静默周期:触发告警后静默3分钟
    silence-period: 3
    # 告警消息:服务{name}在最近10分钟内有2分钟的成功率低于80%
    message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutes
    #发送钉钉通知信息
    hooks:
      - "dingtalk.default"

  # 服务响应时间百分位数告警规则
  service_resp_time_percentile_rule:
    # 表达式:当服务的响应时间百分位数(p50, p75, p90, p95, p99)中任何一个超过1000ms的情况在最近10分钟内累计达到3次时触发告警
    expression: sum(service_percentile{p='50,75,90,95,99'} > 1000) >= 3
    # 检查周期:每10分钟检查一次
    period: 10
    # 静默周期:触发告警后静默5分钟
    silence-period: 5
    # 告警消息:服务{name}的百分位响应时间在最近10分钟内有3分钟告警,因为p50、p75、p90、p95、p99中有超过一个条件大于1000ms
    message: Percentile response time of service {name} alarm in 3 minutes of last 10 minutes, due to more than one condition of p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000

  # 服务实例响应时间告警规则
  service_instance_resp_time_rule:
    # 表达式:当服务实例响应时间超过1000ms的情况在最近10分钟内累计达到2次时触发告警
    expression: sum(service_instance_resp_time > 1000) >= 2
    # 检查周期:每10分钟检查一次
    period: 10
    # 静默周期:触发告警后静默5分钟
    silence-period: 5
    # 告警消息:服务实例{name}在最近10分钟内有2分钟的响应时间超过1000ms
    message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes

  # 数据库访问响应时间告警规则
  database_access_resp_time_rule:
    # 表达式:当数据库访问响应时间超过1000ms的情况在最近10分钟内累计达到2次时触发告警
    expression: sum(database_access_resp_time > 1000) >= 2
    # 检查周期:每10分钟检查一次
    period: 10
    # 告警消息:数据库访问{name}在最近10分钟内有2分钟的响应时间超过1000ms
    message: Response time of database access {name} is more than 1000ms in 2 minutes of last 10 minutes

  # 端点关系响应时间告警规则
  endpoint_relation_resp_time_rule:
    # 表达式:当端点关系响应时间超过1000ms的情况在最近10分钟内累计达到2次时触发告警
    expression: sum(endpoint_relation_resp_time > 1000) >= 2
    # 检查周期:每10分钟检查一次
    period: 10
    # 告警消息:端点关系{name}在最近10分钟内有2分钟的响应时间超过1000ms
    message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes

Hooks向外部发送告警信息

参考文档:https://skywalking.apache.org/docs/main/v10.2.0/en/setup/backend/backend-alarm/#hooks

发送钉钉通知:

hooks:
  dingtalk:
    default:
      is-default: true
      text-template: |-
        {
          "msgtype": "text",
          "text": {
            "content": "Apache SkyWalking Alarm: \n %s."
          }
        }
      webhooks:
        - url: https://oapi.dingtalk.com/robot/send?access_token=xx
          secret: xx


重启服务使配置生效

动态配置无需重启服务:https://skywalking.apache.org/docs/main/v10.2.0/en/setup/backend/dynamic-config/

5.为了保护 SkyWalking UI 和相关接口的安全性,可以通过 NGINX 配置基本认证(Basic Authentication)来限制访问

5.1 安装依赖工具

首先需要安装 apache2-utils(Ubuntu/Debian)或 httpd-tools(CentOS/RHEL)来生成密码文件:

# Ubuntu/Debian
sudo apt-get install apache2-utils

# CentOS/RHEL
sudo yum install httpd-tools

5.2. 创建认证用户和密码

使用 htpasswd 命令创建密码文件并添加用户:

# 创建新的密码文件并添加用户
sudo htpasswd -c /etc/nginx/.htpasswd username
# 添加更多用户(不需要 -c 参数)
sudo htpasswd /etc/nginx/.htpasswd anotheruser

# 查看密码文件
cat /etc/nginx/.htpasswd

5.3. NGINX 配置

server {
    listen 80;
    server_name skywalking.yourdomain.com;

    # 保护整个 SkyWalking UI
    location / {
        auth_basic "SkyWalking Admin";
        auth_basic_user_file /etc/nginx/.htpasswd;
        
        proxy_pass http://localhost:8080;  # SkyWalking UI 默认端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

效果:
在这里插入图片描述

6.agent上报设置token

https://skywalking.apache.org/docs/main/v10.2.0/en/setup/backend/backend-token-auth/#token-authentication

  • agent Set token in agent.config file
# Authentication active is based on backend setting, see application.yml for more details.
agent.authentication = ${SW_AGENT_AUTHENTICATION:xxxx}
  • Set token in application.yml file
receiver-sharing-server:
  default:
    authentication: ${SW_AUTHENTICATION:""}

网站公告

今日签到

点亮在社区的每一天
去签到