这篇文章给大家介绍如何部署并安装全链路分布式跟踪系统Apache SkyWalking,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了南漳免费建站欢迎大家使用!
确保有一套运行正常的 Kubernetes 集群,文章默认为使用 Elasticsearch7 作为后端存储;如果想把 ES 放到 Kubernetes 集群里那么还得确保集群配置了正确的存储,譬如默认的 StorageClass 可用等。为了方便起见(其实就是穷)采用外部 ES 存储且使用 docker-compose 单节点部署,所以不需要集群的分布式存储;最后确保你本地的 kubectl
能够正常运行。
Skywalking 在大体上(不准确)分为四大部分:
oap-server: 无状态服务后端,主要负责处理核心逻辑,可以简单理解为一个标准 java web 项目。
skywalking-ui: UI 前端,通过 graphql 连接 oap-server 提供用户查询等 UI 展示。
agent: 各种语言实现的 agent 负责抓取应用运行数据并上报给 oap-server,核心的指标上报来源。
DB: 各种数据库,负责存储 Skywalking 的指标数据,生产环境推荐 ES、TiDB、MySQL。
Elasticsearch 当前使用 7.9.2 版本,由于只是初次尝试还处于测试阶段所以直接 docker-compose 启动一个单点:
# 如果有需要可以进入 es 容器使用以下命令设置密码# elasticsearch-setup-passwords interactiveversion: '3.8'services: elasticsearch: container_name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2 restart: always network_mode: "host" volumes: - data:/data/elasticsearch environment: - http.host=172.16.11.43 - http.port=9200 - transport.tcp.port=172.16.11.43 - transport.tcp.port=9300 - cluster.name=skyes - node.name=skyes - discovery.type=single-node - xpack.security.enabled=true - xpack.monitoring.enabled=true - "ES_JAVA_OPTS=-Xms4096m -Xmx7168m"volumes: data:
由于 Skywalking 官方给出的 Kubernetes 安装方式为 Helm 安装,所以需要本地先安装 Helm;Helm 安装方式非常简单,根据官方文档在网络没问题的情况下直接执行以下命令即可:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
如果网络不是那么 OK 的情况下请参考官方文档的包管理器方式安装或直接下载二进制文件安装。
Helm 部署之前按照官方文档提示需要先初始化 Helm 仓库:
# clone helm 仓库git clone https://github.com/apache/skywalking-kubernetescd skywalking-kubernetes/chart# 即使使用外部 ES 也要添加这个 repo,否则会导致依赖错误helm repo add elastic https://helm.elastic.co helm dep up skywalking# change the release name according to your scenarioexport SKYWALKING_RELEASE_NAME=skywalking# 如果修改了 NAMESPACE,后续部署则需要先通过 kuebctl 创建该 NAMESPACE# change the namespace according to your scenarioexport SKYWALKING_RELEASE_NAMESPACE=default
Helm 初始化完成后需要自行调整配置文件,配置 oap-server 使用外部 ES
values-my-es.yaml
oap: image: tag: 8.1.-es7 # Set the right tag according to the existing Elasticsearch version storageType: elasticsearch7ui: image: tag: 8.1.elasticsearch: enabled: false config: # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is false host: 172.16.11.43 port: http: 9200 user: "elastic" password: "elastic"
调整好配置后只需要使用 Helm 安装即可:
helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" \ -f ./skywalking/values-my-es.yaml --set oap.image.tag=8.2.-es7 --set ui.image.tag=8.2.
如果安装出错或者其他问题可以使用以下命令进行卸载:
helm uninstall "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}"
安装成功后应该在 ${SKYWALKING_RELEASE_NAMESPACE}
下看到相关 Pod:
k8s21 ➜ ~ kubectl get pod -o wide -n skywalking NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES skywalking-es-init-xw6tx /1 Completed 32h 10.30.0.62 k8s21skywalking-oap-64c65cc6bb-lnq82 1/1 Running 32h 10.30.0.61 k8s21 skywalking-oap-64c65cc6bb-q7zj8 1/1 Running 32h 10.30.32.103 k8s22 skywalking-ui-695ff9d69d-wqcm8 1/1 Running 32h 10.30.161.42 k8s25
在确认 Pod 都运行正常后可以通过 kubectl port-forward
命令来查看 UI 界面:
# 执行以下命令,访问 127.0.0.1:8080 即可访问到 skywalking-uikubectl port-forward -n ${SKYWALKING_RELEASE_NAMESPACE} service/skywalking-ui 8080:80
在生产环境可能需要配置正确的 Ingress 或者 NodePort 等方式暴露 skywalking-ui 服务,具体取决于生产集群服务暴露方式,请自行调整。
由于目前仅在 Java 项目上测试,所以以下 Agent 配置仅仅对 Java 项目有效。
Skywalking 在简单使用时不需要侵入代码,对于 jar 包启动的项目只需要在启动时增加 -javaagent
选项即可。
javaagent
可以通过下载对应的 skywalking release 安装包获取,将此 agent
目录解压到任意位置,稍后将添加到 java 启动参数。
Agent 主配置文件存放在 config/agent.config
配置文件中,配置文件内支持环境变量读取,可以自行添加其他配置和引用其他变量;通常这个配置文件在容器化时有两种选择,一种是创建 ConfigMap,然后通过 ConfigMap 挂载到容器里进行覆盖;另一种是在默认配置里引用各种变量,在容器启动时通过环境变量注入。这里暂时使用环境变量注入的方式:
agent.config
deployment.yml
调整完成后,应用运行一段时间后应该能在 UI 中看到数据
默认情况下 Helm 相关命令执行缓慢,可能需要设置 http(s)_proxy
...( _ _)ノ|壁
(自行体会这个表情)
Skywalking 镜像一般比较大,下载缓慢,推荐预先拉取好然后 load 到每个节点
ES 如果设置了密码,不要忘记在 Helm 安装时调整好密码配置
jar 包启动时 -javaagent
不能放在 -jar
选项之后,否则可能不生效
集群内连接 oap-server 推荐通过 skywalking-oap.skywalking.svc.cluster.local
域名服务发现方式寻址
关于如何部署并安装全链路分布式跟踪系统Apache SkyWalking就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。