简介

应用监控能够为提供对应用服务的监控、跟踪、诊断等功能,并为系统优化提供必要的依据,是分布式系统应用中不可缺少的基础功能。目前商业的解决方案有阿里云的arms、听云的服务监控等,开源的方案有美团的CAT、Pinpoint、Skywalking等。

本文主要讲述Skywalking在Kubernetes上的安装配置,以及对针对Java应用程序的配置。

oap server 安装

在k8s上使用helm进行安装部署应用是非常便捷的方式,类似于CentOS上使用yum安装软件,helm相关的安装和使用请参考《helm官方文档》, 此处不做赘述。

注意:oap server的安装需要配置存储,本文使用的自有的Elasticsearch7,不采用默认内建ES的方式。

具体安装步骤如下

  1. 登入可以操作k8s的服务器(一般是k8s的master)
  2. 将skywalking的helm chart克隆到本地
git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes/chart
  1. 配置es的helm仓库(skywalking的chart依赖于es)
helm repo add elastic https://helm.elastic.co
helm dep up skywalking
  1. 修改skywalking-kubernetes/chart下的values.yaml配置文件,此处仅列出有修改的部分
oap:
  image:
    tag: 8.6.0-es7 # 最新的支持es7的版本
  storageType: elasticsearch7
  javaOpts: -Xmx2g -Xms2g  -Duser.timezone=GMT+8 # 这里添加了时区配置,后续问题中有解释

ui:
  image:
    tag: 8.6.0
  ingress:
    enabled: true # 启用Ingress,方便访问Skywalking管理后台
    annotations: {}
    path: /
    hosts:
    - skywalking.xxx.com # 修改为自己的域名

elasticsearch:
  enabled: false # 由于使用的是自建的ES7,所以不需要启用内建的ES
  config:
    host: 192.168.1.xxx # 修改为自建ES7的地址
    port:
      http: 9200
    user: ""         # 可选,ES有配置认证账号时使用,建议启用
    password: ""     # 可选
  1. 配置HELM安装时使用的环境变量
export SKYWALKING_RELEASE_NAME=skywalking  # 配置HELM的部署名称,可以自行调整
export SKYWALKING_RELEASE_NAMESPACE=default  # 安装的k8s命名空间,可以配置和应用同个命名空间
  1. 安装SkyWalking
helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}"
  1. 等待SkyWalking的应用启动完之后,通过上述的Ingress配置的域名访问Skywalking管理后台。

从管理后台上看并没有看到有任何应用相关的内容,因为还需要配置应用接入SkyWalking,以便应用将监控数据上报给SkyWalking OAP服务器。
在这里插入图片描述

agent安装配置

由于作者只用到Java应用,这块只讲Java应用的Agent安装配置。

大部分的Java应用监控都是通过指定javaagent方式,修改已有类的字节码从而采集相应的监控数据。在tomcat或者直接脚本启动的应用,可以在启动脚本中添加-javaagent:来指定agent文件。在Kubernetes中则可以通过init container来拷贝agent文件并通过JAVA_TOOL_OPTIONS环境变量来设置javaagent。可以参考如下配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-v1.0
  labels:
    app: demo
    version: v1.0
spec:
  selector:
    matchLabels:
      app: demo
      version: v1.0
  template:
    metadata:
      labels:
        app: demo
        version: v1.0
    spec:
      initContainers:
      - name: skywalking-init
        image: apache/skywalking-java-agent:8.6.0-jdk8
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: skywalking-agent
          mountPath: /agent
          command: ['sh', '-c', 'cp -R /skywalking/agent /agent/']
      containers:
        - name: demo
          image: demo:0.0.1
          env:
          - name: JAVA_TOOL_OPTIONS
            value: "-javaagent:/skywalking/agent/skywalking-agent.jar"
          - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
            value: "skywalking-sw-oap:11800" # SkyWalking oap服务器的地址
          - name: SW_AGENT_NAME # 应用的名称
            value: "demo"
          volumeMounts:
            - name: skywalking-agent
              mountPath: /skywalking
      volumes:
        - name: skywalking-agent
          emptyDir: { }

管理后台一览

仪表盘

在这里插入图片描述

拓扑图

在这里插入图片描述

追踪

在这里插入图片描述

遇到的问题

1. server配置问题

在刚开始配置完Agent后,还是没看到有相关的数据上报,通过检查被监控应用容器的日志(在/skywalking/agent/logs/下),注意到是因为OAP服务器的地址配置错误所致(默认是127.0.0.1:11800)。通过指定被监控应用的环境变量SW_AGENT_COLLECTOR_BACKEND_SERVICES,可以修改OAP服务器的地址。

2. 时区问题

Agent数据正常上报后,在管理后台还是需要修改浏览器的时区为UTC+0才能正确显示。这主要是oap server的时区配置问题导致的,可以指定oap的启动参数来调整时区,修改values.yaml中的oap.javaOpts配置为-Xmx2g -Xms2g -Duser.timezone=GMT+8

参考

  • https://github.com/apache/skywalking-kubernetes
  • https://skywalking.apache.org/docs/main/latest/en/setup/service-agent/java-agent/containerization/#kubernetes
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐