SkyWalking使用案例-2

SkyWalking实现基于容器环境Dubbo微服务链路跟踪

在这里插入图片描述

在k8s中运行zookeeper集群可以参考https://blog.csdn.net/weixin_43266367/article/details/126856526?spm=1001.2014.3001.5501

这里已经提前再K8s集群中运行了一个zookeeper集群,如下图:
在这里插入图片描述

部署Dubbo Provider

构建Dubbo Provider镜像

Dockerfile如下:

FROM harbor-server.linux.io/base-images/ubuntu-jdk-base:8u131

LABEl maintainer="[email protected]"

RUN mkdir -p /apps/dubbo/provider
ADD skywalking-agent /apps/dubbo/provider/skywalking-agent
ADD dubbo-server.jar /apps/dubbo/provider/
ADD run_java.sh /apps/dubbo/provider/

RUN useradd -m -u 2023 user1 && chown -R user1:user1 /apps/  && chmod +x /apps/dubbo/provider/*.sh

CMD ["/apps/dubbo/provider/run_java.sh"]

所有构建文件如下图所示:

在这里插入图片描述

其中skywalking-agent目录是SkyWalking Java Agent解压后的目录,需要修改其中的配置文件指定服务名称和SkyWalking Server的地址

vim kywalking-agent/config/agent.config	
########################################
 20 agent.service_name=${SW_AGENT_NAME:dubbo-provider}	#agent监控的项目或服务在SkyWalking UI上对应的服务名称
 21
 22 # The agent namespace
 23 agent.namespace=${SW_AGENT_NAMESPACE:n70}	#agent所在的名称空间,可以用来标示服务所属项目
104 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.122.28:11800}	#指定SkyWalking Server的地址和端口

dubbo-server.jar是项目代码,里面的配置文件config.properties已经指定了zookerper的地址

root@sw-agent-node-01:~/dubbo-server# cat config.properties
dubbo.registry=zookeeper://zookeeper3.default.svc.cluster.local:2181?backup=zookeeper2.default.svc.cluster.local:2181,zookeeper1.default.svc.cluster.local:2181
dubbo.port=20880

run_java.sh是服务启动脚本,内容如下:

扫描二维码关注公众号,回复: 14925538 查看本文章
#!/bin/bash
su - user1 -c "java -javaagent:/apps/dubbo/provider/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/provider/dubbo-server.jar"

执行构建,上传镜像到仓库

docker build -t harbor-server.linux.io/n70/dubbo-provider:v1.0 .
docker push harbor-server.linux.io/n70/dubbo-provider:v1.0
运行dubbo-provider

在K8s集群上运行dubbo-provider,部署文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-provider
spec:
  selector:
    matchLabels:
      app: dubbo-provider
  replicas: 2
  template:
    metadata:
      labels:
        app: dubbo-provider
    spec:
      containers:
      - name: dubbo-provider
        image: harbor-server.linux.io/n70/dubbo-provider:v1.0
        imagePullPolicy: Always
        ports:
        - containerPort: 20880

将部署文件应用到集群上,等到Pod就绪
在这里插入图片描述
查看Pod的日志确保服务已经正常启动
在这里插入图片描述

部署Dubbo Consumer

构建Dubbo Consumer镜像

DockerFile如下:

FROM harbor-server.linux.io/base-images/ubuntu-jdk-base:8u131

LABEl maintainer="[email protected]"

RUN mkdir -p /apps/dubbo/consumer
ADD skywalking-agent /apps/dubbo/consumer/skywalking-agent
ADD dubbo-client.jar /apps/dubbo/consumer/
ADD run_java.sh /apps/dubbo/consumer/

RUN useradd -m -u 2023 user1 && chown -R user1:user1 /apps/  && chmod +x /apps/dubbo/consumer/*.sh

CMD ["/apps/dubbo/consumer/run_java.sh"]

所有构建文件如下图所示:

在这里插入图片描述

其中skywalking-agent目录是SkyWalking Java Agent解压后的目录,需要修改其中的配置文件指定服务名称和SkyWalking Server的地址

vim kywalking-agent/config/agent.config	
########################################
 20 agent.service_name=${SW_AGENT_NAME:dubbo-consumer}
 21
 22 # The agent namespace
 23 agent.namespace=${SW_AGENT_NAMESPACE:n70}
104 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.122.28:11800}

run_java.sh是服务启动脚本,内容如下:

#!/bin/bash
su - user1 -c "java -javaagent:/apps/dubbo/consumer/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/consumer/dubbo-client.jar"

dubbo-client.jar是项目代码,里面的配置文件config.properties已经指定了zookerper的地址

root@sw-agent-node-01:~/dubbo-client# cat config.properties
dubbo.registry=zookeeper://zookeeper1.default.svc.cluster.local:2181?backup=zookeeper2.default.svc.cluster.local:2181,zookeeper3.default.svc.cluster.local:2181

执行构建,上传镜像

docker build -t harbor-server.linux.io/n70/dubbo-consumer:v1.0 .
dockers push harbor-server.linux.io/n70/dubbo-consumer:v1.0
运行dubbo-consumer

在K8s集群上运行dubbo-consumer,部署文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-consumer
spec:
  selector:
    matchLabels:
      app: dubbo-consumer
  replicas: 2
  template:
    metadata:
      labels:
        app: dubbo-consumer
    spec:
      containers:
      - name: dubbo-consumer
        image: harbor-server.linux.io/n70/dubbo-consumer:v1.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: dubbo-consumer-svc
spec:
  type: NodePort
  selector:
    app: dubbo-consumer
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    nodePort: 30080

将部署文件应用到集群上,等到Pod就绪
在这里插入图片描述
在这里插入图片描述

查看Pod的日志确保服务已经正常启动
在这里插入图片描述

验证

通过nodeport访问dubbo-consumer 产生一些数据
在这里插入图片描述

在SkyWalking中查看对应Service的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SkyWalking收集python项目数据

skywalking python-agent官方文档:https://skywalking.apache.org/docs/skywalking-python/v1.0.0/readme/

创建一个Django测试项目

pip3 install Django
django-admin startproject mysite
cd mysite/
python3 manage.py startapp app1
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsuperuse

在这里插入图片描述

安装skywalking python-agent

pip3 install apache-skywalking

通过环境变量传递一些配置给skywalking python-agent,其他可以使用的变量可以参考:https://skywalking.apache.org/docs/skywalking-python/v1.0.0/en/setup/configuration/

export SW_AGENT_NAME='python-app1'
export SW_AGENT_NAMESPACE='n70'
export export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.122.28:11800

启动Django项目

sw-python -d run python3 manage.py runserver 192.168.122.32:80

sw-python是skywalking python-agent提供的一个命令行工具,使用它运行python项目就可以收集数据发送到skywalking server

访问Django页面,产生一些数据

在这里插入图片描述
在这里插入图片描述

在SkyWalking UI上查看对应的数据
在这里插入图片描述
在这里插入图片描述

Skywalking告警

Skywalking告警设置官方文档:https://skywalking.apache.org/docs/main/v9.3.0/en/setup/backend/backend-alarm/

Skywalking指标

Skywalking的告警流程和Prometheus类似,首先定义一个告警规则文件,根据里面rule的定义判断指标是否超过阈值,是否需要触发告警,告警触发后再通过wenhook发送给接收者。

Skywalking的指标是通过查询后端存储中的数据生成的,而不是通过agent收集的。Skywalking默认已经提供了一些指标定义文件(.oal文件),存放在Skywalking安装目录下的config/oal/目录下。
在这里插入图片描述

指标定义的格式是:

<metrics_name> = <Query SQL>

在这里插入图片描述

core.oal文件中有一些常用指标:

service_resp_time	#服务响应时间
service_sla		#服务的请求成功率SLA, 比如99%
service_cpm		#服务每分钟的吞吐量
service_percentile	#指定最近多少数据范围内的响应时间百分比,即p99、p95、p90在内的数据统计结果
service_apdex		#服务性能指标评分

endpoint_cpm	#端点每分钟吞吐量
endpoint_resp_time		#端点响应时间
endpoint_sla	#端点的请求成功率SLA, 比如99%
endpoint_percentile		#指定最近多少数据范围内的响应时间百分比,即p99、p95、p90在内的数据统计结果

Skywalking告警规则

Skywalking默认提供了一个告警规则示例文件,Skywalking安装目录下的config/alarm-settings.yml

Skywalking的告警规则文件主要包含两部分:一部分是rule定义;另一半部分是webhook定义,用于指定告警接收人

告警规则rule定义格式:

  service_resp_time_rule:	#规则名称,唯一的,必须以_rule结尾
    metrics-name: service_resp_time		#指标名称
    op: ">"		#操作符,支持>、<、>=、<=、==
    threshold: 1000		#指标阈值
    period: 10		#检测间隔周期,单位分钟
    count: 3	#匹配成功多少次才会触发告警
    silence-period: 5	#告警后的静默时间,单位分钟
    message: Response time of service {
    
    name} is more than 1000ms in 3 minutes of last 10 minutes.	#告警信息

下面是一个示例文件:

root@sw-node-01:/usr/local/src/apache-skywalking-apm-bin# cat config/alarm-settings.yml
rules:
  service_cpm_rule:	#监控所有服务的每分钟请求量,如果超过1就告警
    metrics-name: service_cpm
    op: ">"
    threshold: 1	#为了测试,故意设置为1
    period: 10
    count: 1
    silence-period: 5
    message: Cpm of service {
    
    name} is more than 1 in last 10 minutes.


dingtalkHooks:	#钉钉接收者定义
  textTemplate: |-	#消息模板
    {
    
    
      "msgtype": "text",
      "text": {
    
    
          "content": "Apache SkyWalking Alarm \n alertname: %s."
       }
     }
  webhooks:	#钉钉webhook地址
    - url: https://oapi.dingtalk.com/robot/send?access_token=a013ec66bf3cf4dc338e167982f349bf9bd2f3013830850e8e1ba4c1168330c5

访问前面的dubbo-consumer,使skywalking产生告警

在这里插入图片描述

钉钉收到的告警信息

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43266367/article/details/129284693