全链路分布式跟踪系统 Apache SkyWalking 入门教程_运维之美的博客-程序员秘密

技术标签: kubernetes  java  elasticsearch  分布式  docker  

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !



先决条件

确保有一套运行正常的 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。

部署 Skywalking

3.1、部署 Elasticsearch

Elasticsearch 当前使用 7.9.2 版本,由于只是初次尝试还处于测试阶段所以直接 docker-compose 启动一个单点:

# 如果有需要可以进入 es 容器使用以下命令设置密码
# elasticsearch-setup-passwords interactive
version: '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:

3.2、安装 Helm

由于 Skywalking 官方给出的 Kubernetes 安装方式为 Helm 安装,所以需要本地先安装 Helm;Helm 安装方式非常简单,根据官方文档在网络没问题的情况下直接执行以下命令即可:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

如果网络不是那么 OK 的情况下请参考官方文档的包管理器方式安装或直接下载二进制文件安装。

3.3、克隆仓库初始化 Helm

Helm 部署之前按照官方文档提示需要先初始化 Helm 仓库:

# clone helm 仓库
git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes/chart

# 即使使用外部 ES 也要添加这个 repo,否则会导致依赖错误
helm repo add elastic https://helm.elastic.co
helm dep up skywalking

# change the release name according to your scenario
export SKYWALKING_RELEASE_NAME=skywalking
# 如果修改了 NAMESPACE,后续部署则需要先通过 kuebctl 创建该 NAMESPACE
# change the namespace according to your scenario
export SKYWALKING_RELEASE_NAMESPACE=default

3.4、安装 Skywalking

Helm 初始化完成后需要自行调整配置文件,配置 oap-server 使用外部 ES

values-my-es.yaml

oap:
  image:
    tag: 8.1.0-es7      # Set the right tag according to the existing Elasticsearch version
  storageType: elasticsearch7

ui:
  image:
    tag: 8.1.0

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.0-es7 --set ui.image.tag=8.2.0

如果安装出错或者其他问题可以使用以下命令进行卸载:

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          0/1     Completed   0          32h   10.30.0.62     k8s21   <none>           <none>
skywalking-oap-64c65cc6bb-lnq82   1/1     Running     0          32h   10.30.0.61     k8s21   <none>           <none>
skywalking-oap-64c65cc6bb-q7zj8   1/1     Running     0          32h   10.30.32.103   k8s22   <none>           <none>
skywalking-ui-695ff9d69d-wqcm8    1/1     Running     0          32h   10.30.161.42   k8s25   <none>           <none>

在确认 Pod 都运行正常后可以通过 kubectl port-forward 命令来查看 UI 界面:

# 执行以下命令,访问 127.0.0.1:8080 即可访问到 skywalking-ui
kubectl port-forward -n ${SKYWALKING_RELEASE_NAMESPACE} service/skywalking-ui 8080:80

在生产环境可能需要配置正确的 Ingress 或者 NodePort 等方式暴露 skywalking-ui 服务,具体取决于生产集群服务暴露方式,请自行调整。

Agent 配置

由于目前仅在 Java 项目上测试,所以以下 Agent 配置仅仅对 Java 项目有效。

Skywalking 在简单使用时不需要侵入代码,对于 jar 包启动的项目只需要在启动时增加 -javaagent 选项即可。

4.1、Agent 获取

javaagent 可以通过下载对应的 skywalking release 安装包获取,将此 agent 目录解压到任意位置,稍后将添加到 java 启动参数。

4.2、Agent 配置

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 域名服务发现方式寻址

本文转载自:「 Bleem 」,原文:https://tinyurl.com/y4uwbmmb ,版权归原作者所有。欢迎投稿,投稿邮箱: [email protected]


你可能还喜欢

点击下方图片即可阅读

一文读懂开源日志管理方案 ELK 和 EFK 的区别

点击上方图片,打开小程序,加入「玩转 Linux」圈子

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/easylife206/article/details/115562163

智能推荐

佛教哲学 学习笔记-003-四谛归空-空宗哲学_佛教哲学 笔记_Python大视觉的博客-程序员秘密

欢迎关注公众号·:这一课我们来讲空宗哲学。空宗哲学是佛教哲学四大哲学体系中的第二种,它本身是从佛教第二次大分裂中的划地部中产生的,空宗哲学的基本命题是:四谛归空。就是将佛教的全部真理,最终归结为空。在方法论上,空宗哲学继承了“说一切有部”的分析方法,但是,他把构造世界的四大元素——地水火风变成了感觉的四个要素,空宗哲学否定了认识器官和认识对象在认识中的决定作用,什么意思呢?就是认识器官,比如说是眼睛,认识对象是你看到的东西,他既否认了这是眼睛的作用,他也否认了对象的存在,就是说他既否认了器官,他

html的font属性中的face设置,css @font-face属性怎么用_weixin_29468871的博客-程序员秘密

css @font-face属性指定名为"myFirstFont"的字体,并指定在哪里可以找到它的[email protected]{font-family: myFirstFont;src: url('Sansation_Light.ttf'),url('Sansation_Light.eot'); /* IE9 */}css @font-face属性属性定义及使用说明@font-face规则,网页设计...

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ma ven/cli/Maven/java与..._weixin_30257433的博客-程序员秘密

编译的时候 中出现如下异常:Exception in thread "main"Java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Nat...

(转)剖析C++标准库智能指针(std::auto_ptr)_weixin_30367543的博客-程序员秘密

不可否认,资源泄露(resource leak)曾经是C++程序的一大噩梦.垃圾回收 机制(Garbage Collection)一时颇受注目.然而垃圾自动回收机制并不能 满足内存管理的即时性和可视性,往往使高傲的程序设计者感到不自在. 况且,C++实现没有引入这种机制.在探索中,C++程序员创造了锋利的 "Smart Pointer".一定程度上,解决了资...

表达式ya是不合法的c语言标识符,2011年计算机等级二级C语言模拟试题及答案(3)..._weixin_39760433的博客-程序员秘密

二.判断题1. C 语言源程序文件通过了编译、连接之后 , 生成一个后缀为 .EXE 的文件。 ( )2. 在 C 程序中 , 函数既可以嵌套定义 , 也可以嵌套调用。( )3. 在 C 程序中, APH 和 aph 代表不同的变量。( )4. 表达式 0195 是一个八进制整数。( )5. 表达式 _ya是不合法的C语言标识符。( )6. C程序总是从main( ) 函数的第一条语句开始执行的。...

随便推点

NPN PNP 导通_蚂蚁取经的博客-程序员秘密

大学模拟电子的课程里面肯定讲到了三极管、晶体管的应用。什么放大倍数,推挽输出、共基极放大电路、共射放大电路等等。现在想起来还是头晕,其实我自始至终都不怎么会用上面说的那些电路。工作好几年,三极管用的最多的,其实是开关电路。下面分别介绍PNP型和NPN型的三极管。先说PNP型的三极管,常用的型号有9012,8550等等。如何使用呢,如下图: FM是一个蜂鸣器,8550是一个P

Android之WebView的使用与简单浏览器_若泣的博客-程序员秘密

在要浏览网页的时候,第一种我们可以通过Intent来使用自带的浏览器,第二种可以通过WebView这个控件来浏览。第一种很简单,直接看代码:Uri uri = Uri.parse("http://www.baidu.com/");Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uri);startActivity(launch

android Check the JVM arguments defined for the gradle process in:_Dr_abandon新秀的博客-程序员秘密

android studio 编译报错:Unable to start the daemon process.This problem might be caused by incorrect configuration of the daemon.For example, an unrecognized jvm option is used.Please refer to the User Manual chapter on the daemon at https://docs.gradle.

SQL Server 2008 R2 新建数据库、表的简易流程_sql2008r2创建数据库_祥林Love的博客-程序员秘密

目的:安装了SQL Server后新建一个新的数据库,添加一个表,为后续的功能做测试准备;

STM32CubeIDE教程:下载安装,配置生成代码,硬件在线调试_cubeide配置好引脚如何自动生成代码_strongerHuang的博客-程序员秘密

STM32CubeIDE属于一站式工具,那么本文也一站式带你体验:下载安装,配置生成代码,硬件在线调试。内容已经在我微信公众号『strongerHuang』分享(下面链接),抽空把它搬运到博客来。STM32CubeIDE教程:下载安装,配置生成代码,硬件在线调试...

STM32配置USB组合设备_stm32 usb组合设备_爱出名的狗腿子的博客-程序员秘密

STM32配置USB组合设备有个比喻描述的特别好说到USB复合设备就不得不说说USB的枚举过程,也就是USB插入后主机的一系列动作。当然我们这里是不会用很专业的术语来说明的,相信如果你是开发者,必然已经了如指掌,如果你是使用者,更是不愿看到太多的专业术语的。我把USB的枚举比作一个自我介绍,在插入后主机会询问USB设备的属性,而设备则像自我介绍一样告诉主机自己的“名字”,“年龄”,“证件号”,“母语”等等。主机也是根据这些来区分插入的设备的。因此,我们可以做个假设是不是修改相应的身份信息(也就是描

推荐文章

热门文章

相关标签