本文记录最简单的一个过程要点。
搭建 ES7
参考这里:Install Elasticsearch with Docker
搭建单节点时需要注意配置环境变量:discovery.type=single-node
配置本地存储(例如 hostPath方式)需要注意配置权限:
mkdir esdatadir
chmod g+rwx esdatadir
chgrp
搭建 skywalking-oap-server 服务
官方镜像:apache/skywalking-oap-server:8.1.0-es7
ConfigMap 或环境变量配置,指定存储和 ES7 地址(这里也发现个 BUG,必须指定端口,否则根据 :
分割获取 [1]
端口部分会数组越界)。
apiVersion: v1
data:
SW_STORAGE: elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch-master:9200
kind: ConfigMap
metadata:
name: skywalking-oap-server
namespace:
搭建 skywalking-ui 服务
官方镜像:apache/skywalking-ui:8.1.0
ConfigMap 或环境变量配置,主要是指定 oap 服务和端口。
apiVersion: v1
data:
SW_OAP_ADDRESS: skywalking-oap-server:12800
SW_TIMEOUT: "20000"
kind: ConfigMap
metadata:
name: skywalking-ui
namespace:
配置 java agent
上面3步大家服务端是最简单的,agent 的配置也没那么麻烦,只是看怎么更简单。
下载官方二进制压缩包:
https://www.ctyun.cn/portal/link.html?target=https%3A%2F%2Fwww.apache.org%2Fdyn%2Fcloser.cgi%2Fskywalking%2F8.1.0%2Fapache-skywalking-apm-es7-8.1.0.tar.gz
上面是 下载页面 ,不是具体的文件。这里下载的 es7 版本。
解压后主要看 agent
目录。
想要使用 skywalking, 你需要的是整个 agent 目录,不是其中的某几个 jar 。 放在 plugins
和 activations
目录的是激活的插件,这些插件的原理基本上就是查找某个 java class,如果存在就在运行时修改这个类,使得这个类被代理的接口方法调用时能给 skywalking 发送数据。
为了使用skywalking,将 agent 打包到所有镜像中是一个办法,但不是最好的办法。如果 k8s 集群有 nfs,nas 类的存储,可以放一份,然后所有容器挂载目录使用,如果没有共享存储,使用 hostPath,在每个节点的相同位置存放也能一起使用。我这里使用的 hostPath 方式。
先看 agent/config/agent.config 配置,这个目录就一个配置文件,所以如果想要在 hostPath 的基础上统一控制,可以对这个文件使用 ConfigMap 挂载卷。
修改配置中的关键几项内容:
agent.service_name=${SW_AGENT_NAME:Undefined}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:skywalking-oap-server:11800}
logging.file_name=${SW_AGENT_NAME:skywalking-api}.log
为了减少配置,我这里直接让日志名和服务名一致。
假设将 agent 放到了所有节点的 /data/skywalking-agent
目录。
写个批量脚本对所有服务执行下面的更新操作:
kubectl patch deployments service1 --patch '
spec:
template:
spec:
containers:
- name: service1
env:
- name: JAVA_OPTS
value: -javaagent:/skywalking-agent/skywalking-agent.jar
- name: SW_AGENT_NAME
value: service1
volumeMounts:
- mountPath: /skywalking-agent
name: vol1
volumes:
- hostPath:
path: /data/skywalking-agent
type: ""
name:
前提,你的 java 服务需要支持
JAVA_OPTS
环境变量。
通过上面的代码会给所有服务挂载 hostPath,并且配置了服务名和 javaagent,服务启动成功后在 skywalking 就能看到服务的信息了。