如何优雅的使用SkyWalking
1 架构设计
2 通过 helm 部署 skywalking
2.1 下载代码
git clone https://github.com/apache/skywalking-kubernetes.git
cd skywalking-kubernetes/chart/
values-es6.yaml 、values-es7.yaml 和 values-my-es.yaml,分别对应使用 es6、es7 和 外部 es 存储的配置。这里使用的是外部自有的 es 集群,并且 es 的版本是 7.10.0
2.2 自定义配置
Chart.yaml文件dependencies字段里删除postgresql
2.2.1 使用自搭建es
cat skywalking/values-my-es.yaml
1 | oap: |
2.2.2 使用集成es
执行:
helm repo add elastic https://helm.elastic.co
helm repo update
helm dep up skywalking
如果timout
wget https://helm.elastic.co/helm/elasticsearch/elasticsearch-7.17.1.tgz # 注意下,如果公司注重license使用7.10以下版本
mkdir charts/
mv elasticsearch-7.17.1.tgz charts/
1 | serviceAccounts: |
2.3 安装 skywalking
- helm install 名称 chart 名称 命名空间 配置文件
-n 指定命名空间
helm install skywalking -n skywalking -f ./skywalking/values-my-es.yaml
2.3.1 使用集成es执行oap-init可能会卡住
卡住原因是因为索引没创建,查看es索引
1 | # 查看索引 |
2.4 查看
安装成功后可以使用下面的命令查看安装的 chart,安装后的 chart 叫做 skywalking:
1 | helm list -n skywalking |
安装完成以后,可以通过下面的命令查看 pod 是否正常启动:
1 | kubectl get pod -n skywalking |
3 应用服务接入 skywalking
- 直接把从官网下载的 agent 安装包放到基础镜像的/opt/skywalking-agent 目录里(我目前再用的)
- 使用 sidecar 将 pod 接入链路追踪(网上的方法,感觉不方便就没用)
3.1 配置 agent
1 | agent.namespace=${SW_AGENT_NAMESPACE:default-namespace} #项目名称 |
3.2 cd 的时候 Jenkins 通过 helm 使用环境变量注入值
这里我做了个 chart 包,Jenkins 生成配置的时候通过变量注入配置,后面文章会将怎么写 helm
主要参数
变量名 | 变量值 | 解释 |
---|---|---|
JAVA_AGENT | -javaagent:/opt/skywalking-agent/skywalking-agent.jar | agent 路径 |
APPLICATION_NAME | account-test | 服务名 |
SW_AGENT_NAM | account-test-19@account-test-6b4df8b44d-h6rz9 | 实例名 |
helm ${action} ${APP_NAME}-${BRANCH_NAME} --version 0.0.1 rongxin-java8/rongxin-java8 --set SW_AGENT_NAME=${APP_NAME}-${BRANCH_NAME}${BUILD_NUMBER},SW_AGENT_NAMESPACE=${BRANCH_NAME} -n ${PROJECT}-${BRANCH_NAME}
部署的时候变成:
helm upgrade rongbao-gateway-dev --version 0.0.1 rongxin-java8/rongxin-java8 --set 'SW_AGENT_NAME=rongbao-gateway-dev251,SW_AGENT_NAMESPACE=finance' -n rongbao-dev
4 配置 Apollo 动态获取配置
4.1 修改 skywalking-configmap
1 | configuration: |
4.2 通过 Apollo 配置告警
4.2.1 Apollo 里创建项目
注意 appid 要与 skywalking-configmap 配置一样
4.2.2 配置 Apollo
key 填写 alarm.default.alarm-settings
如果不想用 apollo,那就用 configmap,配置与 Apollo 唯一区别是 key 是 alarm-settings.yaml,并且挂载到/skywalking/config/alarm-settings.yaml
-
value:其中 secret 为钉钉机器人加密字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65rules:
# Rule unique name, must be ended with `_rule`.
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 8000
period: 10
count: 3
silence-period: 5
message: 最近3分钟内服务 {name} 的平均响应时间超过8秒
service_sla_rule:
# Metrics value need to be long, double or int
metrics-name: service_sla
op: "<"
threshold: 8000
# The length of time to evaluate the metrics
period: 10
# How many times after the metrics match the condition, will trigger alarm
count: 2
# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.
silence-period: 3
message: 最近2分钟内服务 {name} 的成功率低于80%
service_resp_time_percentile_rule:
# Metrics value need to be long, double or int
metrics-name: service_percentile
op: ">"
threshold: 8000,8000,8000,8000,8000
period: 10
count: 3
silence-period: 5
message: 最近3分钟的服务 {name} 的响应时间百分比超过8秒
service_instance_resp_time_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 8000
period: 10
count: 2
silence-period: 5
message: 最近2分钟内服务实例 {name} 的平均响应时间超过8秒
database_access_resp_time_rule:
metrics-name: database_access_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
# message: Response time of database access {name} is more than 1000ms in 2 minutes of last 10 minutes
message: 最近2分钟内数据库访问 {name} 的平均响应时间超过1秒
endpoint_relation_resp_time_rule:
metrics-name: endpoint_relation_resp_time
threshold: 5000
op: ">"
period: 10
count: 2
message: 最近2分钟内端点 {name} 的平均响应时间超过5秒
dingtalkHooks:
textTemplate: |-
{
"msgtype": "text",
"text": {
"content": "生产环境 SkyWalking 链路追踪告警: \n %s."
}
}
webhooks:
- url: https://oapi.dingtalk.com/robot/send?access_token=cea09f09c3cfd3c7ed74d257413b73c0a15e5a69a56376786680e505XXX
secret: SECab306b03fcdfa5e4c8643ed7712056fbb7c6006ee80ea1dcf1b6a0XXX
4.2.3 查看钉钉告警
5 Kubernetes 监控
5.1 kube-state-metric
先检查下,如果
kubectl top node
报错说明没有安装执行以下命令
1 | helm repo add bitnami https://charts.bitnami.com/bitnami |
6 OpenTelemetry Collector
1 | https://github.com/apache/skywalking-showcase/tree/main/deploy/platform/kubernetes/feature-kubernetes-monitor |
总结
这篇文章简单介绍了使用 helm 部署 skywalking,关于 helm 的使用以及如何自定义 chart,通过 Apollo 动态配置 skywalking,skywalking 告警配置