目录
自定义告警规则如果您需要自定义告警规则,则需要编辑 alarm-settings.yml 文件并添加自定义的规则。具体来说,您需要按照 YAML 格式定义每个规则及其参数,例如:在下述示例中,
EasySwoole 中集成 SkyWalking 的具体步骤
Skywalking 是一款开源的分布式系统性能监控工具,主要用于追踪、监控和诊断分布式系统中的性能问题。它支持多种编程语言和框架,如 Java、.NET、Node.js、Go 等,能够帮助开发者和运维人员快速定位和解决系统中的性能瓶颈。
核心功能
Skywalking 提供了分布式追踪、服务拓扑图、性能指标监控、告警等功能。通过分布式追踪,可以清晰地看到请求在系统中的流转路径,帮助定位性能瓶颈。服务拓扑图展示了系统中各个服务之间的调用关系,便于理解系统的整体架构。性能指标监控则提供了实时的系统性能数据,如响应时间、吞吐量等。
架构设计
Skywalking 的架构设计分为探针(Agent)、收集器(Collector)和用户界面(UI)三部分。探针负责在应用程序中收集数据,并将数据发送到收集器。收集器负责接收、存储和处理这些数据。用户界面则提供了可视化的数据展示和查询功能。
安装与配置
Skywalking 的安装和配置相对简单。可以通过下载预编译的二进制包或使用 Docker 镜像来部署。配置文件中可以设置探针的采样率、收集器的地址等参数,以满足不同的监控需求。
使用场景
Skywalking 适用于各种规模的分布式系统,特别是在微服务架构中,能够有效地监控和诊断服务之间的调用关系。它可以帮助开发者在开发和测试阶段发现性能问题,也可以帮助运维人员在生产环境中进行实时监控和故障排查。
社区与支持
Skywalking 拥有活跃的开源社区,提供了丰富的文档和示例,帮助用户快速上手。社区还定期发布新版本,增加新功能和修复已知问题。用户可以通过 GitHub、邮件列表等渠道获取支持和反馈。
总结
Skywalking 是一款功能强大且易于使用的分布式系统性能监控工具,适用于多种编程语言和框架。通过其丰富的功能和灵活的配置,能够帮助开发者和运维人员有效地监控和诊断分布式系统中的性能问题。
官网
https:///apache/skywalking
部署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:
- ./:/skywalking/config/oal/ # 类似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 # 指标名称从文件获取
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-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/
mkdir -p /data/skywalking/java-agent
cd /data/skywalking/java-agent
wget -c https:///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
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