skywalking 部署测试
概述
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
- 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多次访问验证告警
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通