Skywalking简介

实现从请求跟踪、指标收集和日志记录的完整信息记录。

多语言自动探针,支持JAVA、Go、Python、PHP、NodeJS、LUA、Rust等客户端

内置服务网络可观察性,支持从Isito+envoy Service Mesh收集和分析数据

模块化架构、存储、集群管理、使用插件集合都可以进行自由选择

支持告警

优秀的可视化结果

官网

https://github.com/apache/skywalking

部署链路追踪:

version: '3.3'
services:
  es7:
    image: elasticsearch:7.10.1
    container_name: es7
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node #单机模式
      - bootstrap.memory_lock=true #锁定物理内存地址
      - "ES_JAVA_OPTS=-Xms1048m -Xmx1048m" #堆内存大小
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/elasticsearch/data:/usr/share/elasticsearch/data

  skywalking-oap:
    image: apache/skywalking-oap-server:8.6.0-es7
    container_name: skywalking-oap
    volumes:
      - ./core.al:/skywalking/config/oal/core.al   # 类似prometheus的promql查询语句,监控指标来此文件查
      - ./alarm-settings.yml:/skywalking/config/alarm-settings.yml # 告警配置
    restart: always
    depends_on:
      - es7
    links:
      - es7
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: es7:9200

  skywalking-ui:
    image: apache/skywalking-ui:8.6.0
    container_name: skywalking-ui
    restart: always
    depends_on:
      - skywalking-oap
    links:
      - skywalking-oap
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: skywalking-oap:12800
      
chmod -R 777 /data/elasticsearch/data

添加报警配置

注意:确认 SkyWalking 版本和告警插件版本:要使用告警功能,您需要安装 SkyWalking 版本大于等于 8.6,并且安装告警插件版本大于等于 1.3.0。

配置alarm-settings.yml

# DingTalk Robot Webhook URL
SW_ALARM_DINGTALK_ROBOT_WEBHOOK_URL=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxx

# WeChat Work Robot Webhook URL
SW_ALARM_WECHAT_WORK_ROBOT_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxx

#启用告警通知
# Enable alarm notification
SW_ALARM_NOTIFICATION_ENABLED=true

# Alarm notification interval (in seconds)
SW_ALARM_NOTIFICATION_INTERVAL=300

自定义告警规则

如果您需要自定义告警规则,则需要编辑 alarm-settings.yml 文件并添加自定义的规则。具体来说,您需要按照 YAML 格式定义每个规则及其参数,例如:在下述示例中,

我们定义了一个名为 service_cpm 的告警规则

metricNames:指标名称 

threshold: 指标阀值

period: 指标采集的简隔周期,单位为分钟

count: 出现一次则报警

sendRecoveryAlarm:恢复后再次发送通知

silence-period: 触发告警后的静默时间,单位为分钟

message: 发送的消息

需要注意的是,当您自定义告警规则时,需要确保规则的名称不与默认规则冲突,并且规则的参数符合 SkyWalking 定义的数据类型和范围。同时,建议谨慎测试自定义规则的正确性和可靠性,在生产环境中使用前进行充分测试。

cat alarm-settings.yml
rules:
  # 匹配请求数超过1则报警
  service_cpm_rule: 唯一的规则名称(自定义),必须以rule结尾。
    metricNames: cpuUsagePercent # 指标名称从core.al文件获取
    op: ">"
    threshold: 1
    period: 1
    count: 1
    sendRecoveryAlarm: true
    silence-period: 2
    message: 这里是告警信息,当前指标server_npm请求值大于1.
    
dingtalkHooks:
  textTemplate: |-
    {
      "msgtype": "text",
      "text": {
        "content": "apache skywaking alrm: \n %s"
      }      
    }
   webhooks:
     -url: https://oapi.dingtalk.com/robot/send?access_token=xxxx

架构规划:

Skywalking分布式链路追踪部署、java项目链路追踪_elasticsearch

skywalking-ui: 前端服务,端口号8080

skywalking-oap: 可观测性分析平台,11800为grpc数据端口,12800为http数据端口

es7: 9200为elasticsearch数据读写端口,skywalking支持的存储有elasticsearch、h2、mysql、tidb、influxdb、postgresql等

java应用示例

java命令运行halo博客并实现链路追踪

软件环境

从1.4.3起,版本要求为11以上的版 本。1.4.3以下需要1.8以上的版本。

1、准备skwalking-java-agent

https://skywalking.apache.org/downloads/

Skywalking分布式链路追踪部署、java项目链路追踪_jar_02

mkdir -p  /data/skywalking/java-agent
cd /data/skywalking/java-agent
wget -c https://dlcdn.apache.org/skywalking/java-agent/8.13.0/apache-skywalking-java-agent-8.13.0.tgz --no-check-certificate
tar xf apache-skywalking-java-agent-8.13.0.tgz 
vim config/agent.config 
... # 代码名称,这里定义为halo
 20 agent.service_name=${SW_AGENT_NAME:halo}
 21 
 22 # The agent namespace 项目名称,这里定义为halo
 23 agent.namespace=${SW_AGENT_NAMESPACE:halo}
... # 指向skywalking的IP和端口
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:10.0.7.2:11800}

2、安装jdk

tar xf jdk-11.0.14_linux-x64_bin.tar.gz -C /usr/local/jdk
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=.:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

source /etc/profile
java -version

3、halo app下载

mkdir /data/app
cd /data/app
wget -c https://dl.halo.run/release/halo-1.4.17.jar --no-check-certificate

4、启动应用

一个启应对应一个agent。go有go的agent,java有java的agent

# 相对路径 
java -javaagent:./skywalking-agent.jar -jar /data/app/halo-1.4.17.jar
绝对路径
java -javaagent:/data/skywalking/java-agent/skywalking-agent/skywalking-agent.jar -jar /data/app/halo-1.4.17.jar

5、halo博客访问注册

http://10.0.7.2:8090

Skywalking分布式链路追踪部署、java项目链路追踪_elasticsearch_03

进之博客网站后编写文章产生访问信息

Skywalking分布式链路追踪部署、java项目链路追踪_java_04

EasySwoole 中集成 SkyWalking 的具体步骤

https://skywalking.apache.org/docs/skywalking-php/v0.3.0/en/setup/service-agent/php-agent/readme/

skywalking仪表盘简介

global: 显示服务的全局统计详情

服务(Service)-表示对请求提供相同行为的一系列或一组工作负载(服务名称),在使用agent或sdk的时候 ,可以自定义服务的名字,如果不定义的话,skywalking会使用你在平台(列如istio)上定义的名字

服务实例-上述的一组工作负载中的每一个工作负载称为一个实例(一个服务运行的节点)一个服务实例可以是一个kubernetes中的pod或者一个虚拟机甚至是物理机

端口:对于特定服务所接收的请求路径,如http的uri路径和grpc服务的类+方法签名,如/api/v1

skywalking global界面

Skywalking分布式链路追踪部署、java项目链路追踪_elasticsearch_05

skywalking Service界面

Skywalking分布式链路追踪部署、java项目链路追踪_elasticsearch_06

skywalking Instance界面

Skywalking分布式链路追踪部署、java项目链路追踪_elasticsearch_07

skywalking Endpoint界面

Skywalking分布式链路追踪部署、java项目链路追踪_java_08

Skywalking分布式链路追踪部署、java项目链路追踪_jar_09

skywalking database仪表盘

Skywalking分布式链路追踪部署、java项目链路追踪_java_10

skywalking 拓扑图

Skywalking分布式链路追踪部署、java项目链路追踪_java_11