Skywalking on Kubernetes
简介应用监控能够为提供对应用服务的监控、跟踪、诊断等功能,并为系统优化提供必要的依据,是分布式系统应用中不可缺少的基础功能。目前商业的解决方案有阿里云的arms、听云的服务监控等,开源的方案有美团的CAT、Pinpoint、Skywalking等。本文主要讲述Skywalking在Kubernetes上的安装配置,以及对针对Java应用程序的配置。oap server 安装在k8s上使用helm进
简介
应用监控能够为提供对应用服务的监控、跟踪、诊断等功能,并为系统优化提供必要的依据,是分布式系统应用中不可缺少的基础功能。目前商业的解决方案有阿里云的arms、听云的服务监控等,开源的方案有美团的CAT、Pinpoint、Skywalking等。
本文主要讲述Skywalking在Kubernetes上的安装配置,以及对针对Java应用程序的配置。
oap server 安装
在k8s上使用helm进行安装部署应用是非常便捷的方式,类似于CentOS上使用yum安装软件,helm相关的安装和使用请参考《helm官方文档》, 此处不做赘述。
注意:oap server的安装需要配置存储,本文使用的自有的Elasticsearch7,不采用默认内建ES的方式。
具体安装步骤如下
- 登入可以操作k8s的服务器(一般是k8s的master)
- 将skywalking的helm chart克隆到本地
git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes/chart
- 配置es的helm仓库(skywalking的chart依赖于es)
helm repo add elastic https://helm.elastic.co
helm dep up skywalking
- 修改
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: "" # 可选
- 配置HELM安装时使用的环境变量
export SKYWALKING_RELEASE_NAME=skywalking # 配置HELM的部署名称,可以自行调整
export SKYWALKING_RELEASE_NAMESPACE=default # 安装的k8s命名空间,可以配置和应用同个命名空间
- 安装SkyWalking
helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}"
- 等待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
更多推荐
所有评论(0)