skywalking 部署测试

发布时间 2023-05-31 15:35:28作者: ZANAN

概述

APM概述:
早期监控工具功能比较单一,主要以监控CPU使用率、I/O、内存资源、网速等网络基础设施为主(cacti、nagios)
后来随着中间件技术的不断发展,APM也开始监控缓存、数据库、MQ等各种基础组件的性能(zabbix、prometheus)
微服务兴起之后,系统功能被模块化,再加上k8s与容器化的兴起及应用数量的爆炸式增长,各模块和服务之的调用链路、响应时间、负载等越来越不好通过传统的工具进行监控和统计,此时APM系统诞生了(应运而生)

APM核心功能:

  • 在代码级别实现性能分析:通过在代码级别分析应用程序中的class等,APM工具可以深入了解并分析导致应用程序性能较低的代码,另外目前安卓、IOS等手机APP都有Agent用于记录APP的启动时间、首屏加载时间、使用的网络类型、版本信息、崩溃记录等信息并提交到服务端进行统计分析和展示。
  • 监控应用程序资源使用情况:监控资源使用情况尤其是CPU和内存的使用情况至关重要(如java程序的内存使用等),尤其是想根据资源利用率实现自动弹性伸缩应用程序。
  • 统一展示监控数据和日志:应用程序的性能统计、访问和错误日志在统一的平台进行展示(devops运维平台),方便快速查询与故障定位

多次访问验证告警

skywalking 基于谷歌的dapper设计理念

 

设计要求

  • 处不在的部署: 任务服务都i应该被监控到
  • 持续的监控: 7*24

设计目标

  • 低消耗,对服务影响最小,CPU、内存尽可能低
  •  对应用透明,不用植入代码
  • 可伸缩性:针对未来众多的服务和大规模业务集群

请求链路

  •  为每次请求添加跟踪标识符(timestamped events)
  •  基于dapper或类似的跟踪系统,跟踪客户额完整请求

 

一、skywalking 基础测试

注:测试虚拟机系统都是Ubuntu20.04LTS

1. 基于 docker-compose 或二进制部署 SkyWalkingMarkdown

 

skywalking 组件1

 

  1. skywalking支持elasticsearch作为数据库存储,这里测试使用elasticsearch作数据存储,先部署好elasticsearch

简化安装elasticsearch,关闭SSL校验,单机部署。通过deb安装上传elasticearch的deb安装包

dpkg -i elasticsearch-8.5.2-amd64.deb

修改elasticsearch配置文件

 
grep -v '#' /etc/elasticsearch/elasticsearch.yml | grep -v '^$'
cluster.name: my-application
node.name: db-node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.182.62
http.port: 9200
discovery.seed_hosts: ["192.168.182.62"]
cluster.initial_master_nodes: ["192.168.182.62"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
http.host: 0.0.0.0
启动服务查看服务状态

 

通过插件链接查看链接成功,由于没有配置认证,直接链接成功
 

 

部署好elasticsearch,接下来可以安装skywalking,先获取skywalking安装包https://skywalking.apache.org/downloads/

skywalking依赖jdk,当前版本需要安装jdk11

apt update && apt install openjdk-11-jdk -y

上传二进制包并解压到/apps 路径下,并创建软连接

root@skywalking-server:/apps# tar xvf apache-skywalking-apm-9.3.0.tar.gz
ln -sv /apps/apache-skywalking-apm-bin/ /apps/skywalking

 

修改skywalking配置文件,主要是配置storage为elasticsearch(默认为h2,仅用于测试)

vim /apps/skywalking/config/application.yml
storage:
  selector: ${SW_STORAGE:elasticsearch}

创建skywalking.service文件

vim /etc/systemd/system/skywalking.service
[Unit]
Description=Apache Skywalking
After=network.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/apps/skywalking/bin/
ExecStart=/bin/bash /apps/skywalking/bin/startup.sh
RemainAfterExit=yes
RestartSec=5
[Install]
WantedBy=multi-user.target
# 启动服务
systemctl daemon-reload && systemctl restart skywalking.service && systemctl enable skywalking.service

 

前端测试访问

 skywalking端口
8080–UI端口 。12800–http端口(用于接收agent发送的http请求)。11800–gRPC端口(用于接收gRPC客户端发发送的数据)
前端访问空白,F12查看有接口报错500,遂取查看服务日志:

 

 

查看12800并没有被监听,排除elasticsearch服务正常,于是重启skywalking服务,重启后恢复正常

 

 

实现单体服务 Halo 博客和 Jenkins 的请求链路跟踪

 

安装skywalking-javaagent
官网获取安装包:https://skywalking.apache.org/downloads/

 

 

下载好后的java-agent直接放到/data 路径下,和/apps路径服务区分开,修改配置文件 

 
/data/skywalking-agent/config/agent.config
agent.service_name=${SW_AGENT_NAME:Halo-agent}
agent.namespace=${SW_AGENT_NAMESPACE:Halo1}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.182.61:11800}

获取halo的jar包,同样放在/apps路径下

 

https://github.com/halo-dev/halo/releases/tag/v1.6.1

安装jdk11(halo1.6.1 依赖jdk11

apt update && apt install openjdk-11-jdk -y

启动测试,使用skywakingagnet 配合起订halo

 
java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/halo-1.6.1.jar
# 生产环境启动命令参考
java -javaagent:/skywalking-agent/skywalking-agent.jar \
-DSW_AGENT_NAMESPACE=xyz \
-DSW_AGENT_NAME=abc-application \
-Dskywalking.collector.backend_service=skywalking.abc.xyz.com:11800 \
-jar abc-xyz-1.0-SNAPSHOT.jar

 

截图显示启动成功

  • 首次访问根据提示进行安装

 

发布测试博客

 

 

通过skywalkingUI查看服务监控

 

 

查看拓扑图

 

 

通过tomcat启动jenkins(用来区别上面直接使用java启动的方式)

 

下载tomcat,下载地址tomcat8.5.84

将下载的tomcat上传并解压到/apps 路径下

将jenkins.war上传到 /apps/apache-tomcat/webapps 路径(该路径其他文件删除)

 

 

修改tomcat启动文件

vim /apps/apache-tomcat/bin/catalina.sh
# 加入启动命令参数
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/skywalking-agent/skywalking-agent.jar -Dskywalking.collector.backend_service=192.168.182.61:11800 -Dskywalking.agent.service_name=Jenkins -Dskywalking.agent.namespace=Jenkins-namespace"; export CATALINA_OPTS

 http://192.168.182.63:8080/jenkins

 

skywalking UI查看

 

实现 skywalking 的钉钉告警

 

修改skywalking server服务告警配置文件

 
#  告警核心指标,参考文件 core.oal
cat /apps/skywalking/config/oal/core.oal
- service_resp_time #服务的响应时间
- service_sla #服务的http请求成功率SLA,比如99%等。
- service_cpm #表示每分钟的吞吐量.  service_apdex : 应用性能指数是0.8是0.x
- service_percentile: 指定最近多少数据范围内的响应时间百分比,即p99, p95, p90, p75, p50在内的数据统计结果
- endpoint_relation_cpm #端点的每分钟的吞吐量
- endpoint_relation_resp_time #端点的响应时间
- endpoint_relation_sla #端点的http请求成功率SLA,比如99%等。
- endpoint_relation_percentile ##端点的最近多少数据范围内的响应时间百分比,即p99、p95、p90、p75、p50在内的数据统计结果
# 备份原告警alarm文件,然后自定义测试配置文件
cp /apps/skywalking/config/alarm-settings.yml /apps/skywalking/config/alarm-settings.yml-bak
vim /apps/skywalking/config/alarm-settings.yml
rules: # 定义rule规则
  service_cpm_rule: # 唯一的规则名称,必须以_rule结尾
    # Metrics value need to be long, double or int
    metrics-name: service_cpm # 指标名称
    op: ">" # 操作符,>, >= , <, <= , ==
    threshold: 1 #指标阈值
    # The length of time to evaluate the metrics
    period: 2 #评估指标的间隔周期
    # How many times after the metrics match the condition, will trigger alarm
    count: 1 #匹配成功多少次就会触发告警
    # How many times of checks, the alarm keeps silence after alarm triggered, default as same as period. #silence-period: 3
    silence-period: 2 #触发告警后的静默时间
    message: "dubbo-provider service_cpm  请求次数大于1了" #告警信息
dingtalkHooks:
  textTemplate: |-
    {
      "msgtype": "text",
      "text": {
        "content": "Apache SkyWalking Alarm: \n %s."
      }
    }
  webhooks:
    - url: https://oapi.dingtalk.com/robot/send?access_token=dd9dbe4db622af7419b733a719e0c19f7794bbcc78fe394b985a7073b3fd5eb6 #注意钉钉关键字
# 修改完配置需要重启服务使配置生效!!
systemctl restart skywalking.service

多次访问验证告警